Skip to content

refactor: ui patterns#127

Merged
pedronauck merged 8 commits into
mainfrom
ui-patterns
May 9, 2026
Merged

refactor: ui patterns#127
pedronauck merged 8 commits into
mainfrom
ui-patterns

Conversation

@pedronauck
Copy link
Copy Markdown
Member

@pedronauck pedronauck commented May 9, 2026

Summary by CodeRabbit

  • New Features

    • Added many UI components and utilities: confirm dialogs, code blocks & copy, command-select, data-surface, catalog/list/table primitives, connection/status indicators, block loading, metric grid, and more for richer pages.
  • Design System

    • Unified typography, spacing, color and sizing tokens across the site for consistent visuals and improved responsive behavior.
  • Improvements

    • Refreshed site/page typography, imagery performance, metadata wording, and accessibility/ARIA refinements.
  • Tests

    • Expanded test coverage and e2e scenarios across components and site flows.

@pedronauck pedronauck self-assigned this May 9, 2026
@vercel
Copy link
Copy Markdown

vercel Bot commented May 9, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
agh-site Error Error May 9, 2026 3:24pm

Request Review

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 9, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 07f28632-af3c-46eb-8cda-28249ec5226e

📥 Commits

Reviewing files that changed from the base of the PR and between 6e0f094 and ca05b9b.

📒 Files selected for processing (4)
  • packages/site/components/blog/__tests__/changelog-components.test.tsx
  • packages/site/components/docs/page-actions/__tests__/llm-copy-button.test.tsx
  • packages/site/components/site/__tests__/docs-header.test.tsx
  • packages/ui/src/components/stories/catalog-card.stories.tsx
🚧 Files skipped from review as they are similar to previous changes (4)
  • packages/site/components/site/tests/docs-header.test.tsx
  • packages/ui/src/components/stories/catalog-card.stories.tsx
  • packages/site/components/docs/page-actions/tests/llm-copy-button.test.tsx
  • packages/site/components/blog/tests/changelog-components.test.tsx

Walkthrough

This PR is a comprehensive refactor: it introduces new design tokens, replaces and expands all UI primitives, fully migrates app/site/web/tests/E2E and Storybook to the new contracts and slots, removes all legacy primitives, rewrites barrel/type exports, and brings exhaustive coverage in tests and stories.

Changes

Design-system, Custom Primitives, API Overhaul, and Migration

Layer / File(s) Summary
Design tokens and global styles
packages/site/app/global.css
Adds and updates theme design tokens including typography scales, overlays, selection background, and new bento overlay utility classes.
Core primitive interfaces and design token API
multiple packages/ui/src/components/custom/* files
Introduces all design-system token interfaces, base types, and helper utilities; creates new UI primitives like BlockLoading, DataSurface, Eyebrow, KindIcon, ConfirmDialog, CatalogCard, StatusCard, CommandSelect, LinkedRecordTable, and MetricGrid.
Custom UI primitives and barrel export rewrites
packages/ui/src/components/custom/*, packages/ui/src/index.ts
Implements new UI primitives with comprehensive modern slot-based composition, removes legacy primitives like Logo and PageHeader, refactors exports to a consolidated API surface, and ensures API consistency across components.
Typography and style migration
multiple packages/site/components/*, packages/site/app/*, and image transitions
Restyles blog, landing, protocol, error, changelog, and site system UI to use new semantic token classes, replaces raw <img> tags with Next.js <Image> components for performance, and updates text/label punctuation for consistency.
Helper function refactors and utility updates
packages/site/components/*, packages/site/app/runtime/[[...slug]]/page.tsx
Refactors slug and label humanization helpers to use explicit loops for clarity; standardizes import paths for utility functions such as cn; updates minor logic in docs and routing helpers.
Migration of tests, E2E, and Storybook stories
web/src/__tests__/*, web/e2e/__tests__/*, packages/ui/src/components/__tests__/*, packages/ui/src/components/stories/*
Extensive update and addition of component/test suite files to validate new primitive slotting, token usage, component props, and Storybook namespace migrations; includes new E2E testing flows and UI interaction assertions.

Sequence Diagram(s)

No sequence diagram generated for this PR: the changes focus on extensive refactoring and migration of UI primitives, slots, and contracts instead of introducing multi-component integrated feature flows with new sequential control paths.

Estimated code review effort

🎯 5 (Critical) | ⏱️ ~120 minutes

Possibly related PRs

  • compozy/compozy#125: Both PRs touch and modify the shared UI/component library (packages/ui) — adding/updating UI primitives, exports, and styling tokens (overlapping changes to component files and barrel exports), so they are related.
  • compozy/agh#80: Both PRs modify the same sidebar and its tests (web/src/components/app-sidebar.tsx and its test file) — the main PR updates styling/classnames while the retrieved PR restructures sidebar session/route logic, so the changes are related and may conflict.
  • compozy/agh#26: Both PRs touch the same file packages/site/app/(home)/page.tsx — the retrieved PR added the HomePage file and the main PR modifies it to export metadata (title/description) from siteConfig.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch

Copy link
Copy Markdown

@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: 12

Note

Due to the large number of review comments, Critical, Major severity comments were prioritized as inline comments.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
packages/ui/src/components/stories/sidebar.stories.tsx (1)

209-215: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Reduced-motion story copy is stale after the motion removal.

Sidebar no longer uses motion/react, so this description now overstates behavior that the runtime does not implement. Please update this story text—and the matching component description in this file—to describe the current collapse behavior instead of “motion” or “width animation”.

As per coding guidelines, "Treat runtime truth as stronger than copy preference: implemented code, tests, and release artifacts beat aspirational wording".

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/ui/src/components/stories/sidebar.stories.tsx` around lines 209 -
215, Update the ReducedMotion story copy and the matching component description
to remove references to motion/react and "width animation" and instead state the
actual current behavior: that Sidebar collapse is instantaneous when UIProvider
reducedMotion='always' (no runtime animation is performed). Edit the
ReducedMotion Story object (symbol ReducedMotion) and any adjacent description
strings in this file to replace wording like "motion", "width animation", or
"collapse transition" with a concise statement that collapse happens
instantly/no animation is applied by the runtime.
packages/ui/src/components/separator.tsx (1)

71-80: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

style is ignored when label is absent.

Line 71-80 returns SeparatorPrimitive without forwarding the extracted style prop, so consumers cannot style unlabeled separators despite SeparatorProps exposing style.

Suggested patch
   return (
     <SeparatorPrimitive
       data-slot="separator"
       orientation={orientation}
+      style={style}
       className={cn(
         "shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch",
         className
       )}
       {...props}
     />
   );
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/ui/src/components/separator.tsx` around lines 71 - 80, The Separator
component is not forwarding the extracted style prop to the rendered
SeparatorPrimitive, so consumers cannot style unlabeled separators; update the
component (where SeparatorPrimitive is returned) to include the extracted style
prop in the JSX spread/props passed to SeparatorPrimitive (ensure the style from
SeparatorProps or the local destructured variable is included alongside
className, orientation and {...props}), and verify this applies both when label
is present and absent so the exposed style prop is honored.
🟡 Minor comments (35)
packages/ui/src/components/stories/sonner.stories.tsx-85-85 (1)

85-85: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix punctuation typo in Storybook docs text.

There’s an extra space before the comma in the sentence ("Interaction test , clicking..."), which reads as a copy error in docs.

Suggested fix
-          "Interaction test , clicking the trigger fires `toast.error` and the toast body renders with the danger message.",
+          "Interaction test, clicking the trigger fires `toast.error` and the toast body renders with the danger message.",

As per coding guidelines, "COPY.md (repo root) is the authoritative product-language specification for every AGH surface - marketing copy, docs prose, release copy, package metadata, UI microcopy, CLI help, and public social/SEO/OpenGraph text".

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/ui/src/components/stories/sonner.stories.tsx` at line 85, Fix the
punctuation typo in the Storybook story description: locate the string literal
"Interaction test , clicking the trigger fires `toast.error` and the toast body
renders with the danger message." in
packages/ui/src/components/stories/sonner.stories.tsx (the interaction test
description) and remove the extra space before the comma so it reads
"Interaction test, clicking the trigger fires `toast.error` and the toast body
renders with the danger message."; update the story text accordingly to match
COPY.md style.
packages/ui/src/components/field.tsx-176-189 (1)

176-189: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Preserve valid falsy children and branch only on actual message content.

Line 176 and Line 191 use !content, which treats valid React children like 0/"" as missing. Also, the list/single-message branch currently counts errors without messages.

Suggested fix
-  if (!content && errors?.length) {
-    const uniqueErrors = [...new Map(errors.map(error => [error?.message, error])).values()];
-
-    content =
-      uniqueErrors.length === 1 ? (
-        uniqueErrors[0]?.message
-      ) : (
-        <ul className="ml-4 flex list-disc flex-col gap-1">
-          {uniqueErrors.map(error =>
-            error?.message ? <li key={error.message}>{error.message}</li> : null
-          )}
-        </ul>
-      );
+  if (content == null && errors?.length) {
+    const messages = [
+      ...new Set(errors.map(error => error?.message).filter((message): message is string => Boolean(message))),
+    ];
+
+    content =
+      messages.length === 1 ? (
+        messages[0]
+      ) : (
+        <ul className="ml-4 flex list-disc flex-col gap-1">
+          {messages.map(message => (
+            <li key={message}>{message}</li>
+          ))}
+        </ul>
+      );
   }
 
-  if (!content) {
+  if (content == null) {
     return null;
   }

Also applies to: 191-193

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/ui/src/components/field.tsx` around lines 176 - 189, The current
logic uses a falsy check (!content) and counts errors without messages; update
the branch to only run when content is null or undefined (use content == null)
and compute uniqueErrors from errors filtered to those with a non-empty message
(e.g., filter(e => e?.message)). Then derive uniqueErrors via the Map de-dupe as
before and choose the single-message vs list rendering based on
uniqueErrors.length; apply the same null-check change where content is tested
again (the other branch referenced around the same area).
packages/ui/src/components/stories/empty.stories.tsx-15-15 (1)

15-15: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix docs description copy typo and phrasing on Line 15.

There is an extra space before the comma and icon well reads like a typo, which makes the docs text look broken.

Suggested copy fix
-          "Empty state , icon well + muted title + optional description + optional action(s).",
+          "Empty state: icon + muted title + optional description + optional action(s).",

As per coding guidelines, "COPY.md (repo root) is the authoritative product-language specification..." and "Read COPY.md before writing or changing public copy."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/ui/src/components/stories/empty.stories.tsx` at line 15, Fix the
story description string in packages/ui/src/components/stories/empty.stories.tsx
by removing the stray space before the comma and correcting the phrasing so
"icon well" reads clearly; update the description literal (the line containing
"Empty state , icon well + muted title + optional description + optional
action(s).") to a polished sentence such as "Empty state: icon well, muted
title, optional description, and optional action(s)." to match COPY.md style.
web/e2e/__tests__/tasks-coordinator-handoff.spec.ts-13-13 (1)

13-13: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Remove space before comma.

Both line 13 and line 58 have incorrect punctuation with a space before the comma. In English, commas should not be preceded by a space.

📝 Proposed fix
-  *   1. Creating a task is saved intent only , no run is queued, the lifecycle
+  *   1. Creating a task is saved intent only, no run is queued, the lifecycle
-test("creating a task is saved intent , no run is enqueued and labels never imply autonomy", async ({
+test("creating a task is saved intent, no run is enqueued and labels never imply autonomy", async ({

Also applies to: 58-58

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@web/e2e/__tests__/tasks-coordinator-handoff.spec.ts` at line 13, Remove the
stray space before the comma in the inline test comment phrase "Creating a task
is saved intent only , no run is queued" (and the identical incorrect
punctuation later in the file) so the comma immediately follows the preceding
word ("only,") and similarly fix the second occurrence; search for that exact
comment phrase to locate and correct both instances in the test file.
packages/site/components/landing/comparison.tsx-24-24 (1)

24-24: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix punctuation spacing in user-facing copy.

Line 24 and Line 51 include a space before the comma, which reads as a typo in the comparison table.

✏️ Suggested fix
-    coordination: "None , single agent",
+    coordination: "None, single agent",
...
-    coordination: "agh-network/v0 , implemented",
+    coordination: "agh-network/v0, implemented",

As per coding guidelines, COPY.md is the authoritative product-language specification for UI microcopy.

Also applies to: 51-51

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/site/components/landing/comparison.tsx` at line 24, The user-facing
copy strings in the comparison data contain an extra space before commas (e.g.,
the "coordination" property in the comparison data object and the analogous
string used later) — update those string values to remove the space before the
comma so they read "None, single agent" (and any other occurrences) and ensure
the copy matches COPY.md; locate and edit the comparison data/const in
components/landing/comparison.tsx (the object/array that contains the
"coordination" key and the matching entry near the second occurrence) to fix the
punctuation.
packages/ui/src/components/stories/toggle.stories.tsx-15-15 (1)

15-15: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix typographical error in description.

There's an extra space before the comma after "text" in the component description.

📝 Proposed fix
-          "Two-state button backed by Base UI. Compose with icons or text , use `ToggleGroup` for mutually exclusive or multi-select clusters.",
+          "Two-state button backed by Base UI. Compose with icons or text, use `ToggleGroup` for mutually exclusive or multi-select clusters.",
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/ui/src/components/stories/toggle.stories.tsx` at line 15, In the
Toggle story description string in toggle.stories.tsx (the line containing
"Two-state button backed by Base UI. Compose with icons or text , use
`ToggleGroup`..."), remove the stray space before the comma after "text" so the
phrase reads "icons or text, use `ToggleGroup`..." and commit the corrected
string.
packages/site/components/docs/page-actions/llm-copy-button.tsx-15-22 (1)

15-22: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

copyPending does not cover the cache-hit path.

On cached content, the handler returns before setting copyPending, so the button is not actually gated during clipboard write for that branch.

Suggested fix
 export function LLMCopyButton({ markdownUrl }: LLMCopyButtonProps) {
   const [copyPending, setCopyPending] = useState(false);
   const [checked, onClick] = useCopyButton(async () => {
-    const cached = cache.get(markdownUrl);
-    if (cached) {
-      await navigator.clipboard.writeText(cached);
-      return;
-    }
     setCopyPending(true);
     try {
+      const cached = cache.get(markdownUrl);
+      if (cached) {
+        await navigator.clipboard.writeText(cached);
+        return;
+      }
+
       const response = await fetch(markdownUrl);
       const content = await response.text();
       cache.set(markdownUrl, content);
       await navigator.clipboard.writeText(content);
     } finally {
       setCopyPending(false);
     }
   });

Also applies to: 29-29, 34-34

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/site/components/docs/page-actions/llm-copy-button.tsx` around lines
15 - 22, The handler returned early on a cache hit so copyPending isn't set
during clipboard writes; modify the callback passed to useCopyButton (the
function that reads cache.get(markdownUrl) and calls
navigator.clipboard.writeText) to setCopyPending(true) before performing any
clipboard write (including the cached branch) and ensure setCopyPending(false)
is called after the write (use try/finally) so copyPending correctly represents
the in-progress state for both cache-hit and miss paths.
packages/site/lib/og/tokens.ts-23-23 (1)

23-23: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix truncation length accounting after switching to "...".

Line 23 now slices with max - 1 but appends a 3-character ellipsis, so output can exceed max and misbehave for small limits.

Proposed fix
 export function truncate(value: string | undefined, max: number): string {
   if (!value) return "";
+  if (max <= 0) return "";
   if (value.length <= max) return value;
-  return `${value.slice(0, max - 1).trimEnd()}...`;
+  const ellipsis = "...";
+  if (max <= ellipsis.length) return ellipsis.slice(0, max);
+  return `${value.slice(0, max - ellipsis.length).trimEnd()}${ellipsis}`;
 }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/site/lib/og/tokens.ts` at line 23, The truncation currently slices
with value.slice(0, max - 1) but then appends a 3-char literal ("..."), causing
output to exceed max and fail for small max values; update the logic in
tokens.ts to account for the 3-character ellipsis: if value.length <= max return
value; if max <= 3 return '.'.repeat(max) (or just return '...' for max===3 and
'.' or '..' for smaller values); otherwise slice with value.slice(0, max -
3).trimEnd() and append '...'. Use the existing value and max variables and
replace the current return expression accordingly.
packages/site/app/llms.txt/route.ts-34-34 (1)

34-34: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix punctuation typo in public llms.txt tagline (Line [34]).

There is an extra space before the comma (agents ,) in user-facing copy.

✏️ Proposed fix
-    "> An open workplace for AI agents , the runtime, the agh-network/v0 protocol, and the blog.",
+    "> An open workplace for AI agents, the runtime, the agh-network/v0 protocol, and the blog.",

As per coding guidelines, COPY.md (repo root) is the authoritative product-language specification for every AGH surface - marketing copy, docs prose, release copy, package metadata, UI microcopy, CLI help, and public social/SEO/OpenGraph text.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/site/app/llms.txt/route.ts` at line 34, The tagline string in
packages/site/app/llms.txt/route.ts contains an extra space before the comma
("agents ,"); edit the string literal used for the public llms.txt tagline so it
reads "AI agents, the runtime, the agh-network/v0 protocol, and the blog."
(remove the space before the comma) and ensure this exact corrected copy matches
the product-language spec in COPY.md.
packages/site/lib/site-config.ts-5-5 (1)

5-5: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix punctuation typo in site description copy.

Line 5 has an extra space before the comma ("automation , connected"), which degrades metadata quality.

Suggested patch
-    "An open workplace for AI agents. AGH runs Claude Code, OpenClaw, and Hermes as durable sessions with memory, autonomy, tools, and automation , connected on agh-network/v0 channels where they find each other, share capabilities, and close work with receipts.",
+    "An open workplace for AI agents. AGH runs Claude Code, OpenClaw, and Hermes as durable sessions with memory, autonomy, tools, and automation, connected on agh-network/v0 channels where they find each other, share capabilities, and close work with receipts.",
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/site/lib/site-config.ts` at line 5, The site description string
contains a punctuation typo: remove the extra space before the comma in the
phrase "automation , connected" so it becomes "automation, connected"; locate
the site description value in packages/site/lib/site-config.ts (the string that
begins "An open workplace for AI agents. AGH runs Claude Code, OpenClaw, and
Hermes as durable sessions with memory, autonomy, tools, and automation ,
connected on agh-network/v0 channels...") and update that literal to the
corrected punctuation.
packages/site/app/blog/metadata.ts-6-6 (1)

6-6: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix punctuation typo in public metadata description.

Line 6 has runtime , (extra space before comma), which reads as a copy error in SEO metadata.

Proposed fix
-  description: "Field notes from the runtime , protocol design, engineering, and release receipts.",
+  description: "Field notes from the runtime, protocol design, engineering, and release receipts.",

As per coding guidelines, COPY.md is the authoritative product-language specification for public text surfaces.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/site/app/blog/metadata.ts` at line 6, Fix the punctuation typo in
the public metadata by removing the stray space before the comma in the
description string: update the metadata object's description field (the
"description" value in metadata in packages/site/app/blog/metadata.ts) from
"Field notes from the runtime , protocol design, engineering, and release
receipts." to use correct punctuation per COPY.md (i.e., "Field notes from the
runtime, protocol design, engineering, and release receipts."). Ensure no other
unintended spacing exists in that string.
packages/site/lib/__tests__/public-link-safety.test.ts-66-66 (1)

66-66: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix duplicated ellipsis guard in URL concreteness check.

Line 66 checks "..." twice, so Unicode ellipsis ("…") is not handled as intended.

Proposed fix
 function parseConcreteUrl(url: string): URL | null {
-  if (url.includes("...") || url.includes("...")) {
+  if (url.includes("...") || url.includes("…")) {
     return null;
   }
   return new URL(url);
 }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/site/lib/__tests__/public-link-safety.test.ts` at line 66, The
condition currently checks url.includes("...") twice so the Unicode ellipsis
isn’t covered; update the second check to url.includes("…") (or
url.includes("\u2026")) so the if that inspects the url variable handles both
three-dot and single-character ellipsis; locate the failing guard expression in
the public-link-safety test where url.includes(...) is used and replace the
duplicated literal with the Unicode ellipsis check to fix the concreteness
check.
packages/site/lib/__tests__/static-route-metadata.test.ts-16-16 (1)

16-16: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix the punctuation typo in the expected blog metadata description.

The expected copy currently has an extra space before the comma ("runtime , protocol"), which bakes a typo into metadata validation.

Suggested fix
-      "Field notes from the runtime , protocol design, engineering, and release receipts."
+      "Field notes from the runtime, protocol design, engineering, and release receipts."

As per coding guidelines, COPY.md is the authoritative product-language specification for public metadata text.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/site/lib/__tests__/static-route-metadata.test.ts` at line 16, Update
the expected description string in the unit test static-route-metadata.test.ts
to match COPY.md by removing the stray space before the comma in the phrase
"runtime , protocol" so it reads "runtime, protocol"; locate and edit the test
that contains the string "Field notes from the runtime , protocol design,
engineering, and release receipts." and replace it with the corrected
punctuation to ensure metadata validation uses the authoritative COPY.md text.
packages/site/components/site/docs-header.tsx-76-77 (1)

76-77: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

getLinkItemKey can produce duplicate keys when items share the same type and lack unique identifiers.

The fallback to item.type creates a collision risk if multiple items lack url, label, or text properties. While the current test configuration has all content-bearing items with unique URLs or labels, this is not guaranteed by the type system.

Consider either:

  1. Ensuring all list items have a guaranteed unique property (preferred)
  2. Using a composite key with index as a last resort (e.g., `${item.type}-${index}`), though React discourages index-based keys when list order may change

Applies to lines 76–77, 92–97, and 183–188.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/site/components/site/docs-header.tsx` around lines 76 - 77,
getLinkItemKey can produce duplicate keys when multiple items share the same
type and lack url/label/text; update getLinkItemKey to accept an index fallback
and return a composite key like `${item.type}-${index}` only as a last resort,
then update all map usages (the mainItems => <NavbarLinkItem ...>, the other
list maps around lines 92–97 and 183–188) to pass the array index into
getLinkItemKey so each rendered <NavbarLinkItem> gets a stable unique key when
items lack unique identifiers.
packages/site/lib/blog.ts-10-10 (1)

10-10: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Use natural punctuation in featured-image alt text.

Line 10 uses "v0 , three peers..." (space before comma), which reads awkwardly in metadata and assistive narration. Please use standard punctuation.

Suggested fix
-    alt: "agh-network/v0 , three peers exchanging direct, receipt, and trace envelopes",
+    alt: "agh-network/v0, three peers exchanging direct, receipt, and trace envelopes",
As per coding guidelines, `COPY.md` (repo root) is the authoritative product-language specification for every AGH surface.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/site/lib/blog.ts` at line 10, The featured image alt text contains a
misplaced space before a comma ("agh-network/v0 , three peers..."); update the
alt value used for the featured-image (the alt property) to use standard
punctuation — e.g., change "agh-network/v0 , three peers exchanging direct,
receipt, and trace envelopes" to "agh-network/v0, three peers exchanging direct,
receipt, and trace envelopes" so assistive narration and metadata read
naturally.
packages/ui/src/components/stories/scroll-area.stories.tsx-27-27 (1)

27-27: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix punctuation typo in the event summary copy.

Line 27 has an extra space before the comma ("bash , listing..."), which reads as a typo. Use "bash, listing..." (or restore the dash form) for clean UI copy.

Suggested fix
-  summary: "tool_use · bash , listing repository files under /internal",
+  summary: "tool_use · bash, listing repository files under /internal",
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/ui/src/components/stories/scroll-area.stories.tsx` at line 27,
Change the event summary string in scroll-area.stories.tsx to remove the stray
space before the comma: replace the value currently set to "tool_use · bash ,
listing repository files under /internal" with "tool_use · bash, listing
repository files under /internal" (or restore the original dash form if
preferred) so the UI copy reads correctly; update the summary string where it is
defined in the stories file.
packages/ui/src/components/stories/accordion.stories.tsx-33-35 (1)

33-35: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix the FAQ punctuation typo.

idle triggers , reads like a typo in the rendered Storybook copy. Please replace it with normal punctuation so the sentence stays natural for docs consumers.

As per coding guidelines, "TechSpecs, ADRs, code, commit messages, docs are always English."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/ui/src/components/stories/accordion.stories.tsx` around lines 33 -
35, The FAQ string assigned to the answer property in the accordion story
contains a punctuation typo ("idle triggers ,"); update the text in the answer
value (the object with key answer in
packages/ui/src/components/stories/accordion.stories.tsx) to use proper
punctuation—e.g., change "idle triggers ," to "idle triggers," or rephrase the
sentence to read naturally in English so the Storybook copy is correct.
packages/ui/src/components/custom/stories/chat-message-bubble.stories.tsx-59-60 (1)

59-60: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix punctuation spacing in story copy.

There’s an extra space before the comma in two user-visible strings, which reads as a typo.

✏️ Proposed fix
-      "I can see two candidates , stream.ts and map.ts. I'll extract the grouping into `groupToolCallsByTurn` and point the call site at it.",
+      "I can see two candidates, stream.ts and map.ts. I'll extract the grouping into `groupToolCallsByTurn` and point the call site at it.",
-        Two candidates , I&apos;ll extract the grouping into `groupToolCallsByTurn`.
+        Two candidates, I&apos;ll extract the grouping into `groupToolCallsByTurn`.

As per coding guidelines, COPY.md is the authoritative product-language specification for docs prose and UI microcopy.

Also applies to: 113-114

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/ui/src/components/custom/stories/chat-message-bubble.stories.tsx`
around lines 59 - 60, Fix the extra space before commas in the user-facing story
copy: locate the string "I can see two candidates , stream.ts and map.ts. I'll
extract the grouping into `groupToolCallsByTurn` and point the call site at it."
in chat-message-bubble.stories.tsx (and the other two occurrences noted around
lines 113-114) and remove the space before the comma so the text reads "I can
see two candidates, stream.ts and map.ts..."; make the same punctuation
correction in the other two user-visible strings and ensure the final copy
aligns with COPY.md.
packages/ui/src/components/stories/card.stories.tsx-87-87 (1)

87-87: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix punctuation typos in CardDescription text.

Lines 87 and 98 use ,, which reads as an editing artifact.

✏️ Proposed fix
-          <CardDescription>Run in-flight , 2 events in the last second.</CardDescription>
+          <CardDescription>Run in-flight, 2 events in the last second.</CardDescription>
...
-          <CardDescription>Idle , last activity 4m ago.</CardDescription>
+          <CardDescription>Idle, last activity 4m ago.</CardDescription>

Also applies to: 98-98

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/ui/src/components/stories/card.stories.tsx` at line 87, The
CardDescription strings contain stray space-comma sequences (" , ") that are
punctuation typos; update the two occurrences inside the CardDescription
components (the one currently reading "Run in-flight , 2 events in the last
second." and the similar entry around line 98) to remove the extra space before
the comma or rephrase so punctuation is correct (e.g., "Run in-flight, 2 events
in the last second." or "Run in-flight — 2 events in the last second.").
packages/ui/src/components/custom/stories/typing-dots.stories.tsx-13-13 (1)

13-13: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix docs copy typo (indicator ,).

Line 13 has an extra space before the comma, which reads like a typo in Storybook docs.

✏️ Proposed fix
-          "Three-dot typing indicator , mirrors `.typing-dots` in `docs/design/web-inspiration/styles/app.css`. Relies on the `typing-bounce` keyframes in `packages/ui/src/tokens.css`.",
+          "Three-dot typing indicator, mirrors `.typing-dots` in `docs/design/web-inspiration/styles/app.css`. Relies on the `typing-bounce` keyframes in `packages/ui/src/tokens.css`.",
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/ui/src/components/custom/stories/typing-dots.stories.tsx` at line
13, There's a typo in the story description string "Three-dot typing indicator ,
mirrors `.typing-dots` in `docs/design/web-inspiration/styles/app.css`. Relies
on the `typing-bounce` keyframes in `packages/ui/src/tokens.css`" — remove the
extra space before the comma so it reads "indicator, mirrors ..."; update the
story text in typing-dots.stories.tsx where that description string is defined
(referenced alongside `.typing-dots` and `typing-bounce`) to fix the
punctuation.
packages/ui/src/components/custom/stories/metric.stories.tsx-13-13 (1)

13-13: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix docs copy typo (Metric card ,).

Line 13 has an extra space before the comma.

✏️ Proposed fix
-          "Metric card , mono eyebrow + Inter 24px/700 value + optional inline detail or subtext. Per DESIGN.md §4 Metric Cards.",
+          "Metric card, mono eyebrow + Inter 24px/700 value + optional inline detail or subtext. Per DESIGN.md §4 Metric Cards.",
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/ui/src/components/custom/stories/metric.stories.tsx` at line 13,
Typo: remove the stray space before the comma in the story description string
"Metric card , mono eyebrow + Inter 24px/700 value + optional inline detail or
subtext. Per DESIGN.md §4 Metric Cards." in
packages/ui/src/components/custom/stories/metric.stories.tsx so it reads "Metric
card, mono eyebrow + Inter 24px/700 value + optional inline detail or subtext.
Per DESIGN.md §4 Metric Cards."; update the string literal where it is defined
in the metric story export to fix the copy.
packages/site/components/blog/release-entry.tsx-68-71 (1)

68-71: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Prevent duplicate React keys when release notes repeat identical text.

Line 70 can collide when two entries in the same section have the same item value, which leads to unstable reconciliation warnings/behavior.

🔧 Proposed fix
-                {release[key].map(item => (
+                {release[key].map((item, idx) => (
                   <li
-                    key={`${key}-${item}`}
+                    key={`${key}-${item}-${idx}`}
                     className="flex items-start gap-3 font-sans text-item-title leading-7 text-(--color-text-secondary)"
                   >
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/site/components/blog/release-entry.tsx` around lines 68 - 71, The
list key currently uses `${key}-${item}` inside the release[key].map(...) which
can collide when identical item strings repeat; update the key generation in the
mapping callback to include the iteration index or another stable unique
identifier (e.g., `${key}-${item}-${i}` or `${key}-${i}`) so each <li> rendered
by the map has a unique React key and avoids reconciliation warnings; locate the
mapping expression where release[key].map(item => ...) and change the key prop
accordingly.
packages/ui/src/components/custom/stories/wire-card.stories.tsx-14-14 (1)

14-14: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Use the canonical capability term in this Storybook copy.

The new description reintroduces recipes, which drifts from the repo glossary and public product vocabulary. Please normalize this text to capability/capabilities here and in the surrounding example copy in this story file.

As per coding guidelines, "Capability vs Recipe: reusable agent artifacts are called capability, NOT recipe/workflow/procedure/playbook for current AGH behavior".

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/ui/src/components/custom/stories/wire-card.stories.tsx` at line 14,
Update the Storybook copy in
packages/ui/src/components/custom/stories/wire-card.stories.tsx to use the
canonical term "capability" (singular) or "capabilities" (plural) instead of
"recipe"/"recipes" throughout the description and any example text in this file;
locate the story description string that currently reads `"Bordered protocol
card , mirrors \`.wire-card\` (head/body/foot) in
\`docs/design/web-inspiration/styles/app.css\`. Used to embed wire-protocol
payloads (recipes, receipts, capabilities) inside message threads."` and replace
"recipes" with "capabilities", and scan the rest of this story file for any
occurrences of "recipe"/"recipes"/"workflow"/"playbook" and normalize them to
"capability"/"capabilities" so the story follows the repo glossary.
packages/ui/src/components/custom/stories/toolbar.stories.tsx-18-18 (1)

18-18: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix punctuation spacing in Storybook copy.

Line 18 and Line 89 include a space before a comma ("shell ,", "Scroll ,"), which reads as a typo in docs/examples.

✏️ Suggested patch
-          "Composition-first toolbar shell , pass `SearchInput`, `PillGroup`, `Button` children directly. Wraps on narrow viewports.",
+          "Composition-first toolbar shell; pass `SearchInput`, `PillGroup`, `Button` children directly. Wraps on narrow viewports.",
@@
-        Scroll , the toolbar stays pinned to the top edge of the scroll container.
+        Scroll, the toolbar stays pinned to the top edge of the scroll container.

Also applies to: 89-89

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/ui/src/components/custom/stories/toolbar.stories.tsx` at line 18,
Fix the punctuation spacing in the story text by removing the stray space before
commas: change "Composition-first toolbar shell , pass `SearchInput`,
`PillGroup`, `Button` children directly. Wraps on narrow viewports." to
"Composition-first toolbar shell, pass `SearchInput`, `PillGroup`, `Button`
children directly. Wraps on narrow viewports." and likewise change "Scroll ," to
"Scroll," wherever that string appears (e.g., the story description at the later
occurrence).
web/e2e/__tests__/tasks.spec.ts-25-26 (1)

25-26: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Use a unique draft title per test run to prevent cross-run collisions.

At Line 26 and Line 248, the flow uses a static title and then searches by that title. This can match stale drafts from previous/retried runs and make the delete path flaky.

💡 Suggested patch
-const deleteDraftDescription = "Exercise the shared delete confirmation dialog from Tasks e2e.";
-const deleteDraftTitle = "Draft Tasks delete confirmation smoke";
+const deleteDraftDescriptionBase =
+  "Exercise the shared delete confirmation dialog from Tasks e2e.";
+const deleteDraftTitleBase = "Draft Tasks delete confirmation smoke";
@@
-  await tasksUI.openCreate.click();
+  const deleteDraftSuffix = `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
+  const deleteDraftTitle = `${deleteDraftTitleBase} ${deleteDraftSuffix}`;
+  const deleteDraftDescription = `${deleteDraftDescriptionBase} (${deleteDraftSuffix})`;
+
+  await tasksUI.openCreate.click();

Also applies to: 237-250

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@web/e2e/__tests__/tasks.spec.ts` around lines 25 - 26, The test uses a static
deleteDraftTitle ("Draft Tasks delete confirmation smoke") which can collide
across runs; update the setup to generate a unique title for each run (e.g.,
append a timestamp or random suffix) and use that variable everywhere the test
creates or searches for the draft (referencing deleteDraftTitle and
deleteDraftDescription in the test file tasks.spec.ts and any helper calls that
query by title) so the create → search → delete flow only matches the current
run's draft.
packages/ui/src/components/custom/stories/page-header.stories.tsx-17-17 (1)

17-17: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix punctuation typo in Storybook docs description.

There is an extra space before the comma ("header , icon"), which will show up in docs copy.

✏️ Proposed fix
-          "Top-of-page header , icon + title + count badge on the left, segmented `PillGroup` controls in the middle, meta/actions on the right.",
+          "Top-of-page header, icon + title + count badge on the left, segmented `PillGroup` controls in the middle, meta/actions on the right.",
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/ui/src/components/custom/stories/page-header.stories.tsx` at line
17, Fix the punctuation typo in the Storybook description string used in the
PageHeader story: remove the extra space before the comma in the text
`"Top-of-page header , icon + title + count badge on the left, segmented
`PillGroup` controls in the middle, meta/actions on the right."` so it reads
`"Top-of-page header, icon + title..."`; locate and update the description
string in the page-header.stories (the story export or the variable holding the
story description) to correct the spacing.
packages/ui/src/components/__tests__/alert.test.tsx-42-58 (1)

42-58: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Assert slot order explicitly to match the test intent.

The test says “after the description” but currently only checks presence. Add an order assertion so reordering regressions are caught.

✅ Suggested assertion upgrade
   it("Should render meta and actions slots after the description", () => {
     render(
       <Alert data-testid="alert" variant="warning">
         <AlertTitle>Provider missing</AlertTitle>
         <AlertDescription>Reconnect the provider.</AlertDescription>
         <AlertMeta data-testid="alert-meta">session sess_123</AlertMeta>
         <AlertActions data-testid="alert-actions">
           <button type="button">Retry</button>
         </AlertActions>
       </Alert>
     );
 
+    const alert = screen.getByTestId("alert");
+    const slots = Array.from(alert.children).map(node => node.getAttribute("data-slot"));
+    expect(slots).toEqual(["alert-title", "alert-description", "alert-meta", "alert-actions"]);
+
     expect(screen.getByTestId("alert-meta")).toHaveAttribute("data-slot", "alert-meta");
     expect(screen.getByTestId("alert-meta").className).toContain("tracking-mono");
     expect(screen.getByTestId("alert-actions")).toHaveAttribute("data-slot", "alert-actions");
     expect(screen.getByRole("button", { name: "Retry" })).toBeInTheDocument();
   });
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/ui/src/components/__tests__/alert.test.tsx` around lines 42 - 58,
The test currently only checks presence of AlertMeta and AlertActions but not
their position; update the "Should render meta and actions slots after the
description" test to assert DOM order by verifying that the AlertDescription
element precedes AlertMeta and AlertActions (e.g., use document order checks
such as nextElementSibling or compareDocumentPosition on the rendered nodes).
Locate the elements via AlertDescription, AlertMeta (data-testid="alert-meta")
and AlertActions (data-testid="alert-actions") and add assertions that AlertMeta
and AlertActions come after the AlertDescription node to prevent regressions in
slot ordering.
packages/ui/src/components/stories/catalog-card.stories.tsx-142-144 (1)

142-144: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Use canonical artifact terminology in UI copy.

Line 143 uses “skills”; please align this with the canonical term “capability” for consistency across AGH surfaces.

✏️ Proposed copy fix
-        The catalog endpoint returned an error. Existing installed skills are unchanged.
+        The catalog endpoint returned an error. Existing installed capabilities are unchanged.

As per coding guidelines, "Follow docs/_memory/glossary.md for canonical terms. The canonical artifact name is capability."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/ui/src/components/stories/catalog-card.stories.tsx` around lines 142
- 144, Update the UI copy inside CatalogCard.Description to use the canonical
term “capability” instead of “skills”: change the sentence that currently reads
“Existing installed skills are unchanged.” to use “capabilities” (e.g.,
“Existing installed capabilities are unchanged.”) so the component
CatalogCard.Description aligns with the glossary; no other logic changes
required.
packages/ui/src/components/custom/stories/pill.stories.tsx-14-14 (1)

14-14: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix punctuation artifacts in Storybook docs copy.

These strings include space + comma artifacts, which read as malformed public docs text.

✏️ Proposed copy cleanup
-          "Unified semantic pill , replaces legacy `MonoBadge`, `StatusDot`, `KindChip`, `WireChip`, and connection-state label compositions. Compose with `Pill.Dot` for leading status dots.",
+          "Unified semantic pill, replaces legacy `MonoBadge`, `StatusDot`, `KindChip`, `WireChip`, and connection-state label compositions. Compose with `Pill.Dot` for leading status dots.",

-        story: "Protocol kind markers , leading dot keyed off the kind, label preserved.",
+        story: "Protocol kind markers, leading dot keyed off the kind, label preserved.",

-          "Replacement composition for the legacy `ConnectionIndicator` , `Pill.Dot` + monospace label inside an `aria-live=polite` region.",
+          "Replacement composition for the legacy `ConnectionIndicator`, `Pill.Dot` + monospace label inside an `aria-live=polite` region.",

As per coding guidelines, COPY.md (repo root) is the authoritative product-language specification for docs prose and UI microcopy.

Also applies to: 161-161, 232-232

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/ui/src/components/custom/stories/pill.stories.tsx` at line 14, The
Storybook copy in packages/ui/src/components/custom/stories/pill.stories.tsx
contains "space + comma" punctuation artifacts (e.g., the description string
that starts with "Unified semantic pill , replaces..."); update those strings to
remove the stray space before commas and align phrasing with COPY.md (also fix
the same artifact occurrences elsewhere in this file where similar descriptions
appear), ensuring references like "Pill.Dot" and legacy component names remain
intact and correctly punctuated.
packages/ui/src/components/custom/stories/split-pane.stories.tsx-96-96 (1)

96-96: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Clean up punctuation artifacts in story text.

Two changed strings still contain space + comma, which reads as accidental copy noise.

✏️ Proposed text fixes
-        Detail view for run {row.id} , event timeline, artifacts, diff.
+        Detail view for run {row.id}, event timeline, artifacts, diff.

-          "With `UIProvider reducedMotion='always'` the detail swap is instant , motion drops the opacity transition.",
+          "With `UIProvider reducedMotion='always'` the detail swap is instant, motion drops the opacity transition.",

As per coding guidelines, COPY.md is the authoritative product-language specification for docs prose and UI copy.

Also applies to: 198-198

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/ui/src/components/custom/stories/split-pane.stories.tsx` at line 96,
The story text contains accidental "space + comma" artifacts (e.g., the string
"Detail view for run {row.id} , event timeline, artifacts, diff.")—remove the
extra space before commas in that string and the other occurrence later in the
same file so the text reads "..., event timeline, artifacts, diff."; locate the
offending string(s) in
packages/ui/src/components/custom/stories/split-pane.stories.tsx and update the
literal(s) accordingly to match COPY.md style.
web/e2e/__tests__/session-onboarding.spec.ts-22-23 (1)

22-23: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Encode dynamic path segments in browserLifecycleSessionPath(...).

Using raw interpolation can create false negatives when IDs include reserved URL characters.

🧩 Proposed robustness fix
 function browserLifecycleSessionPath(agentName: string, sessionId: string): string {
-  return `/agents/${agentName}/sessions/${sessionId}`;
+  return `/agents/${encodeURIComponent(agentName)}/sessions/${encodeURIComponent(sessionId)}`;
 }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@web/e2e/__tests__/session-onboarding.spec.ts` around lines 22 - 23, The
helper function browserLifecycleSessionPath currently interpolates agentName and
sessionId raw into the URL; update it to URL-encode both dynamic segments using
encodeURIComponent (i.e., replace uses of agentName and sessionId with
encodeURIComponent(agentName) and encodeURIComponent(sessionId)) so reserved
characters don’t break routing or tests.
packages/site/components/landing/hero.tsx-7-7 (1)

7-7: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix punctuation spacing in user-facing hero copy

Line 7 and Lines 48-49 introduce spaces before commas ("v0 , alpha runtime", "sessions , with", "automation , connected"), which reads as a typo in the UI. Please normalize punctuation and update the matching test expectation.

✏️ Proposed fix
-    label: "agh-network/v0 , alpha runtime",
+    label: "agh-network/v0, alpha runtime",
...
-              AGH runs the agent CLIs you already use as durable sessions , with memory, autonomy,
-              tools, and automation , connected on agh-network/v0 channels where they find each
+              AGH runs the agent CLIs you already use as durable sessions, with memory, autonomy,
+              tools, and automation, connected on agh-network/v0 channels where they find each

Also applies to: 48-49

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/site/components/landing/hero.tsx` at line 7, The hero copy contains
incorrect spacing before commas in the label and other UI strings (e.g., the
label value "agh-network/v0 , alpha runtime" in the hero component and the
strings around lines 48-49 like "sessions , with" and "automation , connected");
remove the stray spaces so commas follow the preceding word directly (e.g., "v0,
alpha runtime", "sessions, with", "automation, connected") in the component
(check the label constant and the literal JSX strings in the Hero component) and
update the corresponding test expectation(s) to match the corrected punctuation.
packages/site/components/landing/bridges-section.tsx-83-83 (1)

83-83: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix punctuation spacing typo in public copy.

Line 83 has "runtime , the"; remove the extra space before the comma.

✏️ Proposed fix
-        description="Webhooks in, sessions out. Responses stream back to the original thread. No serverless glue, no second runtime , the bridge adapter runs inside the daemon."
+        description="Webhooks in, sessions out. Responses stream back to the original thread. No serverless glue, no second runtime, the bridge adapter runs inside the daemon."
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/site/components/landing/bridges-section.tsx` at line 83, Typo:
remove the stray space before the comma in the description string; update the
description value in bridges-section.tsx (the description property containing
"No serverless glue, no second runtime , the bridge adapter runs inside the
daemon.") to "No serverless glue, no second runtime, the bridge adapter runs
inside the daemon." so the comma directly follows "runtime" without the extra
space.
packages/site/app/error.tsx-31-31 (1)

31-31: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Replace hard-coded text-white with a semantic token utility.

Line 31 introduces a literal color utility, which makes the site styling less token-driven. Please switch to the accent foreground token/class used by the design system.

As per coding guidelines, packages/site/**/*.{ts,tsx,css}: “Pull design tokens from DESIGN.md (repo root). No invented colors, type, radii, spacing, or motion.”

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/site/app/error.tsx` at line 31, The button JSX in
packages/site/app/error.tsx currently uses a hard-coded utility "text-white";
replace that literal with the design-system accent foreground token by changing
the className on the same element to use the semantic utility (e.g.,
"text-accent-foreground") so the button pulls color from the token system rather
than a hard-coded color.
packages/ui/src/components/custom/stories/code-block.stories.tsx-46-46 (1)

46-46: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix punctuation typo in story description.

Line 46 has an extra space before the comma ("disabled ,").

Suggested patch
-        story: "Source-code block with prompts disabled , rendered as plain code.",
+        story: "Source-code block with prompts disabled, rendered as plain code.",
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/ui/src/components/custom/stories/code-block.stories.tsx` at line 46,
The story description string in code-block.stories.tsx has a punctuation
typo—remove the extra space before the comma in the story property value
("Source-code block with prompts disabled , rendered as plain code.") so it
reads "Source-code block with prompts disabled, rendered as plain code." Update
the story string in the story property to correct the punctuation.

Comment thread packages/site/app/not-found.tsx
Comment thread packages/site/components/docs/page-actions/llm-copy-button.tsx
Comment thread packages/site/components/landing/primitives/animated-diagram.tsx Outdated
Comment thread packages/site/components/landing/runtime-micro-diagram.tsx
Comment thread packages/ui/src/components/custom/confirm-dialog.tsx Outdated
Comment thread packages/ui/src/components/custom/metadata-list.tsx
Comment thread packages/ui/src/components/custom/stories/metadata-list.stories.tsx
Comment thread packages/ui/src/components/item.tsx Outdated
Comment thread packages/ui/src/components/tooltip.tsx
Comment thread web/e2e/__tests__/skills.spec.ts
Copy link
Copy Markdown

@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 (2)
packages/site/components/docs/page-actions/__tests__/llm-copy-button.test.tsx (1)

3-3: ⚡ Quick win

Switch this test import to the @/* alias.

Line 3 uses a relative import (../llm-copy-button). Please use the project alias import format to match site conventions.

Suggested change
-import { LLMCopyButton } from "../llm-copy-button";
+import { LLMCopyButton } from "@/components/docs/page-actions/llm-copy-button";

As per coding guidelines, packages/site/**/*.{ts,tsx}: "Imports must use @/* alias."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@packages/site/components/docs/page-actions/__tests__/llm-copy-button.test.tsx`
at line 3, The test currently imports the LLMCopyButton component via a relative
path; update the import to use the project alias import format (`@/`*) instead.
Replace the import of LLMCopyButton (from "../llm-copy-button") with the
corresponding alias path (e.g.,
"@/components/docs/page-actions/llm-copy-button") so the test follows the
packages/site import convention; ensure the imported symbol name LLMCopyButton
remains unchanged.
packages/ui/src/components/stories/catalog-card.stories.tsx (1)

18-18: ⚡ Quick win

Use an interface for CatalogCardExample props instead of an inline object type.

This aligns the file with the repo TypeScript shape-definition rule and makes the props type reusable.

♻️ Proposed change
+interface CatalogCardExampleProps {
+  installed?: boolean;
+}
+
-function CatalogCardExample({ installed = false }: { installed?: boolean }) {
+function CatalogCardExample({ installed = false }: CatalogCardExampleProps) {

Per coding guidelines, **/*.{ts,tsx}: Prefer interface for defining object shapes in TypeScript.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/ui/src/components/stories/catalog-card.stories.tsx` at line 18,
Replace the inline object type used in the CatalogCardExample function signature
with a named interface: define an interface (e.g., CatalogCardExampleProps)
describing the optional installed?: boolean prop, then update the
CatalogCardExample parameter to use that interface (CatalogCardExample(props:
CatalogCardExampleProps) or destructure with ({ installed = false }:
CatalogCardExampleProps)). Ensure the interface is exported if it needs to be
reused elsewhere.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/site/components/blog/__tests__/changelog-components.test.tsx`:
- Around line 123-137: The test creates a console.error spy (errorSpy) but
restores it only at the end, so if an assertion fails the spy remains active;
wrap the test body that calls render(...) and the expects in a try/finally and
move errorSpy.mockRestore() into the finally block so the spy is always restored
even on failures (update the "renders duplicate release bullets without
duplicate-key warnings" test that uses ReleaseEntry, render, screen.getAllByText
and errorSpy).

In `@packages/site/components/site/__tests__/docs-header.test.tsx`:
- Around line 209-225: The console.error spy (errorSpy created via
vi.spyOn(console, "error")) in the DocsHeader test can leak if assertions throw,
so wrap the test body that uses errorSpy (render(<DocsHeader />) and the expect
checks) in a try/finally and call errorSpy.mockRestore() inside finally; this
ensures errorSpy is always restored even when expectations fail and keeps the
test isolated.

---

Nitpick comments:
In
`@packages/site/components/docs/page-actions/__tests__/llm-copy-button.test.tsx`:
- Line 3: The test currently imports the LLMCopyButton component via a relative
path; update the import to use the project alias import format (`@/`*) instead.
Replace the import of LLMCopyButton (from "../llm-copy-button") with the
corresponding alias path (e.g.,
"@/components/docs/page-actions/llm-copy-button") so the test follows the
packages/site import convention; ensure the imported symbol name LLMCopyButton
remains unchanged.

In `@packages/ui/src/components/stories/catalog-card.stories.tsx`:
- Line 18: Replace the inline object type used in the CatalogCardExample
function signature with a named interface: define an interface (e.g.,
CatalogCardExampleProps) describing the optional installed?: boolean prop, then
update the CatalogCardExample parameter to use that interface
(CatalogCardExample(props: CatalogCardExampleProps) or destructure with ({
installed = false }: CatalogCardExampleProps)). Ensure the interface is exported
if it needs to be reused elsewhere.
🪄 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: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: ad999341-fdf1-4040-a2f6-6724742661c5

📥 Commits

Reviewing files that changed from the base of the PR and between 983c1ef and 6e0f094.

📒 Files selected for processing (52)
  • packages/site/app/blog/metadata.ts
  • packages/site/app/llms.txt/route.ts
  • packages/site/components/blog/__tests__/changelog-components.test.tsx
  • packages/site/components/blog/release-entry.tsx
  • packages/site/components/docs/page-actions/__tests__/llm-copy-button.test.tsx
  • packages/site/components/docs/page-actions/llm-copy-button.tsx
  • packages/site/components/landing/__tests__/landing.test.tsx
  • packages/site/components/landing/bridges-section.tsx
  • packages/site/components/landing/comparison.tsx
  • packages/site/components/landing/hero.tsx
  • packages/site/components/landing/primitives/animated-diagram.tsx
  • packages/site/components/site/__tests__/docs-header.test.tsx
  • packages/site/components/site/docs-header.tsx
  • packages/site/lib/__tests__/blog-content-quality.test.ts
  • packages/site/lib/__tests__/blog-metadata.test.ts
  • packages/site/lib/__tests__/public-link-safety.test.ts
  • packages/site/lib/__tests__/public-route-metadata.test.ts
  • packages/site/lib/__tests__/static-route-metadata.test.ts
  • packages/site/lib/blog.ts
  • packages/site/lib/og/__tests__/tokens.test.ts
  • packages/site/lib/og/tokens.ts
  • packages/site/lib/site-config.ts
  • packages/ui/src/components/__tests__/alert.test.tsx
  • packages/ui/src/components/__tests__/confirm-dialog.test.tsx
  • packages/ui/src/components/__tests__/field.test.tsx
  • packages/ui/src/components/__tests__/item.test.tsx
  • packages/ui/src/components/custom/__tests__/metadata-list.test.tsx
  • packages/ui/src/components/custom/confirm-dialog.tsx
  • packages/ui/src/components/custom/metadata-list.tsx
  • packages/ui/src/components/custom/stories/chat-message-bubble.stories.tsx
  • packages/ui/src/components/custom/stories/code-block.stories.tsx
  • packages/ui/src/components/custom/stories/metadata-list.stories.tsx
  • packages/ui/src/components/custom/stories/metric.stories.tsx
  • packages/ui/src/components/custom/stories/page-header.stories.tsx
  • packages/ui/src/components/custom/stories/pill.stories.tsx
  • packages/ui/src/components/custom/stories/split-pane.stories.tsx
  • packages/ui/src/components/custom/stories/toolbar.stories.tsx
  • packages/ui/src/components/custom/stories/typing-dots.stories.tsx
  • packages/ui/src/components/custom/stories/wire-card.stories.tsx
  • packages/ui/src/components/field.tsx
  • packages/ui/src/components/item.tsx
  • packages/ui/src/components/stories/accordion.stories.tsx
  • packages/ui/src/components/stories/card.stories.tsx
  • packages/ui/src/components/stories/catalog-card.stories.tsx
  • packages/ui/src/components/stories/empty.stories.tsx
  • packages/ui/src/components/stories/scroll-area.stories.tsx
  • packages/ui/src/components/stories/sonner.stories.tsx
  • packages/ui/src/components/stories/toggle.stories.tsx
  • web/e2e/__tests__/session-onboarding.spec.ts
  • web/e2e/__tests__/skills.spec.ts
  • web/e2e/__tests__/tasks-coordinator-handoff.spec.ts
  • web/e2e/__tests__/tasks.spec.ts
✅ Files skipped from review due to trivial changes (20)
  • packages/site/app/blog/metadata.ts
  • packages/site/lib/og/tests/tokens.test.ts
  • packages/ui/src/components/custom/stories/metric.stories.tsx
  • packages/ui/src/components/custom/stories/split-pane.stories.tsx
  • packages/ui/src/components/stories/card.stories.tsx
  • packages/site/app/llms.txt/route.ts
  • packages/site/lib/site-config.ts
  • web/e2e/tests/tasks-coordinator-handoff.spec.ts
  • packages/site/lib/tests/public-link-safety.test.ts
  • packages/ui/src/components/stories/accordion.stories.tsx
  • packages/site/lib/tests/blog-metadata.test.ts
  • packages/site/components/site/docs-header.tsx
  • packages/ui/src/components/custom/stories/chat-message-bubble.stories.tsx
  • packages/ui/src/components/stories/sonner.stories.tsx
  • packages/ui/src/components/stories/scroll-area.stories.tsx
  • packages/site/components/landing/comparison.tsx
  • packages/ui/src/components/custom/stories/toolbar.stories.tsx
  • packages/site/components/docs/page-actions/llm-copy-button.tsx
  • packages/ui/src/components/custom/stories/typing-dots.stories.tsx
  • packages/site/components/landing/bridges-section.tsx
🚧 Files skipped from review as they are similar to previous changes (16)
  • packages/ui/src/components/custom/tests/metadata-list.test.tsx
  • packages/site/lib/blog.ts
  • packages/site/components/landing/primitives/animated-diagram.tsx
  • web/e2e/tests/skills.spec.ts
  • packages/ui/src/components/custom/stories/metadata-list.stories.tsx
  • packages/site/lib/og/tokens.ts
  • web/e2e/tests/tasks.spec.ts
  • packages/ui/src/components/custom/stories/page-header.stories.tsx
  • packages/site/components/landing/hero.tsx
  • web/e2e/tests/session-onboarding.spec.ts
  • packages/ui/src/components/item.tsx
  • packages/ui/src/components/field.tsx
  • packages/ui/src/components/custom/metadata-list.tsx
  • packages/ui/src/components/custom/stories/code-block.stories.tsx
  • packages/ui/src/components/custom/confirm-dialog.tsx
  • packages/ui/src/components/custom/stories/pill.stories.tsx

Comment thread packages/site/components/blog/__tests__/changelog-components.test.tsx Outdated
Comment thread packages/site/components/site/__tests__/docs-header.test.tsx
@pedronauck pedronauck merged commit 730ba4b into main May 9, 2026
7 of 9 checks passed
@pedronauck pedronauck deleted the ui-patterns branch May 9, 2026 19:19
pedronauck added a commit that referenced this pull request May 26, 2026
## Release v0.0.1

This PR prepares the release of version v0.0.1.

### Changelog

## 0.0.1 - 2026-05-26



### Other Changes

- Lessons learned



### ♻️ Refactoring

- Project structure (#7)
- Kb improvements (#12)
- Rename spaces to channels (#17)
- Add extensions gaps (#21)
- Improve tool calls ui (#22)
- Remove web app header
- Module improvements (#29)
- Memory improvements (#35)
- Storybook for web and ui (#38)
- Enable AGH network by default for new installs (#57)
- Hermes adjustments (#69)
- Badges design (#84)
- Storybook scenario and logos gallery
- Migrate typescript tests (#114)
- Internal go packages (#120)
- Ui patterns (#127)
- Improve e2e tests (#130)
- Ui redesign
- Workspace isolation across runtime surfaces (#145)
- Prod ready applies (#162)
- Tool card ui (#164)
- Alpha on logo
- Prod ready features (#167)
- Thread sheet (#202)



### 🎉 Features

- Implement config foundation packages
- Implement sqlite store package
- Add ACP client package
- Add session lifecycle manager
- Implement observe package
- Add daemon composition root
- Add uds api server
- Implement cli package
- Add http api server
- Add system design
- Add foundation types, schemas, and layout shell for web client
- Add daemon health polling and agent sidebar systems for web client
- Add session system CRUD, streaming core, and session store for web
client
- Add chat view, messages, and composer tests for web client
- Add tool cards and renderers for web client
- Add file-backed memory store core
- Scaffold memory session seams
- Add memory dream consolidation service
- Wire memory assembler into daemon
- Add memory api and cli
- New skills system (#1)
- Add workspace entity (#5)
- Add new skill capabilities (#8)
- Web ui v2 (#9)
- Improve hooks system (#10)
- Session resilience (#11)
- Add extensability (#13)
- Add automation (#16)
- Add channels (#14)
- Add network implementation (#15)
- Add network, bridges and automations web pages (#18)
- Ext registry (#20)
- Add core tasks (#19)
- Bridge adapters (#23)
- Add site (#26)
- Add ext refac and sandbox (#25)
- Settings ui (#37)
- Tasks ui (#36)
- Harness improvements (#44)
- Agent capabilities (#49)
- Redesign ui (#48)
- Unify capability (#53)
- Redesign network workspace (#59)
- Add task deletion and split session delete from stop (#58)
- Session provider selection (#60)
- Production grade adjustments (#66)
- Autonomous system (#75)
- Add agent session route (#80)
- Tools registry (#85)
- Agents soul (#88)
- Add network threads (#105)
- Orchestration improvements (#106)
- Memory v2 (#108)
- Agent categories (#113)
- Providers model (#118)
- Add canonical AGH bundled skill (#143)
- Onboarding and improvements (#198)
- Onboarding and improvements (#201)



### 🐛 Bug Fixes

- Review round
- Review rounds
- Resolve memory extensibility review batch
- Embed web into daemon
- Defaults agents
- Acp integration (#4)
- Lint errors
- Prd folder
- Remove orphan web actions and dead surfaces (#55)
- Qa testing and fixes (#73)
- New review rounds (#82)
- Security audit (#90)
- Release qa round (#95)
- Add missing tools (#141)
- New qa round (#147)
- Advanced qa round (#149)
- Homebrew tap
- Final review round (#151)
- Daemon healthy
- Reasoning models (#158)
- Lint errors (#160)
- Review round (#168)
- Release adjustments (#171)
- Stabilize release ci fixtures
- Stabilize release integration gate
- Stabilize release verify gates
- Stabilize release integration flows
- Stabilize release verify gates
- Stabilize main verify shutdown
- Ignore stale acpmock cancel
- Marketplace search focus and filtering (#193)
- Website video
- Workspace command select



### 📚 Documentation

- Update agents.md
- Update prd
- Update skills
- Update compozy tasks
- Update compozy
- Update compozy
- Add new skills
- Archive prd
- Update prds
- Update rfc
- Update prds
- Update prds
- Add automation prd
- Channels prd
- Update prd
- Update prd
- New prds
- Archive prds
- Bridges adapters prd
- Sandbox prd
- Update
- Archive prd
- Update
- Add new prd
- New design
- Update prd
- Archive prds
- Update prds
- Tasks-ui prd tasks
- Update prd
- Update design docs
- Agent capabilities prd
- Improve site docs
- Remove old design references
- Udpate
- Autonomous prd
- Update skills
- Blog design
- Agent sould prd
- Final qa plan
- Update
- Remove codex ledgers from gitignore
- Remove not needed files
- Udpate ledger
- Update cy-codex-loop skill
- Orchestration improves prd
- Update prds
- Orch improvs prd
- Memv2 prd
- Providers model prd
- Update refacs prd
- New design proposal
- Update rules
- Update skills
- New blog posts (#173)
- Format docs
- Remove old design files
- Remove old
- Skeeper update



### 📦 Build System

- Initial structure
- Commitlint
- Frontend base structure
- Update vscode settings
- Add subagents
- Coderabbit
- Prd and tooling
- Bun lock
- Lint tooling
- Copy.md and tooling adjusts
- Add repoclone rc
- Upgrade skeeper to v0.2.0
- Update go.mod
- Adopt task artifacts into skeeper
- Sync codex plans with skeeper
- Skeeper lock
- Skeeper lock
- New skills
- Skeeper lock
- Skeeper lock
- Skeeper lock
- Update deps and go
- Regenerate daytona sidecar assets for go 1.26.3
- Fix cliff
- Ignore docs on fmt
- Build web assets before goreleaser
- Extend release dry-run timeout



### 🔧 CI/CD

- Lint errors
- Fint release pr
- Fix goreleaser



### 🧪 Testing

- Add e2e tests (#27)
- Qa rounds (#78)
- Improve test suite (#138)
- Harden daemon-served restart reloads
- Harden daemon-served readiness waits
- Stabilize dashboard focus assertion
- Stabilize release integration gates
- Stabilize release e2e markers
- Stabilize release e2e flows

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
This was referenced May 26, 2026
pedronauck added a commit that referenced this pull request May 26, 2026
## Release v0.0.1

This PR prepares the release of version v0.0.1.

### Changelog

## 0.0.1 - 2026-05-26



### Other Changes

- Lessons learned



### ♻️ Refactoring

- Project structure (#7)
- Kb improvements (#12)
- Rename spaces to channels (#17)
- Add extensions gaps (#21)
- Improve tool calls ui (#22)
- Remove web app header
- Module improvements (#29)
- Memory improvements (#35)
- Storybook for web and ui (#38)
- Enable AGH network by default for new installs (#57)
- Hermes adjustments (#69)
- Badges design (#84)
- Storybook scenario and logos gallery
- Migrate typescript tests (#114)
- Internal go packages (#120)
- Ui patterns (#127)
- Improve e2e tests (#130)
- Ui redesign
- Workspace isolation across runtime surfaces (#145)
- Prod ready applies (#162)
- Tool card ui (#164)
- Alpha on logo
- Prod ready features (#167)
- Thread sheet (#202)



### 🎉 Features

- Implement config foundation packages
- Implement sqlite store package
- Add ACP client package
- Add session lifecycle manager
- Implement observe package
- Add daemon composition root
- Add uds api server
- Implement cli package
- Add http api server
- Add system design
- Add foundation types, schemas, and layout shell for web client
- Add daemon health polling and agent sidebar systems for web client
- Add session system CRUD, streaming core, and session store for web
client
- Add chat view, messages, and composer tests for web client
- Add tool cards and renderers for web client
- Add file-backed memory store core
- Scaffold memory session seams
- Add memory dream consolidation service
- Wire memory assembler into daemon
- Add memory api and cli
- New skills system (#1)
- Add workspace entity (#5)
- Add new skill capabilities (#8)
- Web ui v2 (#9)
- Improve hooks system (#10)
- Session resilience (#11)
- Add extensability (#13)
- Add automation (#16)
- Add channels (#14)
- Add network implementation (#15)
- Add network, bridges and automations web pages (#18)
- Ext registry (#20)
- Add core tasks (#19)
- Bridge adapters (#23)
- Add site (#26)
- Add ext refac and sandbox (#25)
- Settings ui (#37)
- Tasks ui (#36)
- Harness improvements (#44)
- Agent capabilities (#49)
- Redesign ui (#48)
- Unify capability (#53)
- Redesign network workspace (#59)
- Add task deletion and split session delete from stop (#58)
- Session provider selection (#60)
- Production grade adjustments (#66)
- Autonomous system (#75)
- Add agent session route (#80)
- Tools registry (#85)
- Agents soul (#88)
- Add network threads (#105)
- Orchestration improvements (#106)
- Memory v2 (#108)
- Agent categories (#113)
- Providers model (#118)
- Add canonical AGH bundled skill (#143)
- Onboarding and improvements (#198)
- Onboarding and improvements (#201)



### 🐛 Bug Fixes

- Review round
- Review rounds
- Resolve memory extensibility review batch
- Embed web into daemon
- Defaults agents
- Acp integration (#4)
- Lint errors
- Prd folder
- Remove orphan web actions and dead surfaces (#55)
- Qa testing and fixes (#73)
- New review rounds (#82)
- Security audit (#90)
- Release qa round (#95)
- Add missing tools (#141)
- New qa round (#147)
- Advanced qa round (#149)
- Homebrew tap
- Final review round (#151)
- Daemon healthy
- Reasoning models (#158)
- Lint errors (#160)
- Review round (#168)
- Release adjustments (#171)
- Stabilize release ci fixtures
- Stabilize release integration gate
- Stabilize release verify gates
- Stabilize release integration flows
- Stabilize release verify gates
- Stabilize main verify shutdown
- Ignore stale acpmock cancel
- Marketplace search focus and filtering (#193)
- Website video
- Workspace command select



### 📚 Documentation

- Update agents.md
- Update prd
- Update skills
- Update compozy tasks
- Update compozy
- Update compozy
- Add new skills
- Archive prd
- Update prds
- Update rfc
- Update prds
- Update prds
- Add automation prd
- Channels prd
- Update prd
- Update prd
- New prds
- Archive prds
- Bridges adapters prd
- Sandbox prd
- Update
- Archive prd
- Update
- Add new prd
- New design
- Update prd
- Archive prds
- Update prds
- Tasks-ui prd tasks
- Update prd
- Update design docs
- Agent capabilities prd
- Improve site docs
- Remove old design references
- Udpate
- Autonomous prd
- Update skills
- Blog design
- Agent sould prd
- Final qa plan
- Update
- Remove codex ledgers from gitignore
- Remove not needed files
- Udpate ledger
- Update cy-codex-loop skill
- Orchestration improves prd
- Update prds
- Orch improvs prd
- Memv2 prd
- Providers model prd
- Update refacs prd
- New design proposal
- Update rules
- Update skills
- New blog posts (#173)
- Format docs
- Remove old design files
- Remove old
- Skeeper update



### 📦 Build System

- Initial structure
- Commitlint
- Frontend base structure
- Update vscode settings
- Add subagents
- Coderabbit
- Prd and tooling
- Bun lock
- Lint tooling
- Copy.md and tooling adjusts
- Add repoclone rc
- Upgrade skeeper to v0.2.0
- Update go.mod
- Adopt task artifacts into skeeper
- Sync codex plans with skeeper
- Skeeper lock
- Skeeper lock
- New skills
- Skeeper lock
- Skeeper lock
- Skeeper lock
- Update deps and go
- Regenerate daytona sidecar assets for go 1.26.3
- Fix cliff
- Ignore docs on fmt
- Build web assets before goreleaser
- Extend release dry-run timeout



### 🔧 CI/CD

- Lint errors
- Fint release pr
- Fix goreleaser
- Fix release



### 🧪 Testing

- Add e2e tests (#27)
- Qa rounds (#78)
- Improve test suite (#138)
- Harden daemon-served restart reloads
- Harden daemon-served readiness waits
- Stabilize dashboard focus assertion
- Stabilize release integration gates
- Stabilize release e2e markers
- Stabilize release e2e flows

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
pedronauck added a commit that referenced this pull request May 26, 2026
## Release v0.0.2

This PR prepares the release of version v0.0.2.

### Changelog

## 0.0.2 - 2026-05-26



### Other Changes

- Lessons learned



### ♻️ Refactoring

- Project structure (#7)
- Kb improvements (#12)
- Rename spaces to channels (#17)
- Add extensions gaps (#21)
- Improve tool calls ui (#22)
- Remove web app header
- Module improvements (#29)
- Memory improvements (#35)
- Storybook for web and ui (#38)
- Enable AGH network by default for new installs (#57)
- Hermes adjustments (#69)
- Badges design (#84)
- Storybook scenario and logos gallery
- Migrate typescript tests (#114)
- Internal go packages (#120)
- Ui patterns (#127)
- Improve e2e tests (#130)
- Ui redesign
- Workspace isolation across runtime surfaces (#145)
- Prod ready applies (#162)
- Tool card ui (#164)
- Alpha on logo
- Prod ready features (#167)
- Thread sheet (#202)



### 🎉 Features

- Implement config foundation packages
- Implement sqlite store package
- Add ACP client package
- Add session lifecycle manager
- Implement observe package
- Add daemon composition root
- Add uds api server
- Implement cli package
- Add http api server
- Add system design
- Add foundation types, schemas, and layout shell for web client
- Add daemon health polling and agent sidebar systems for web client
- Add session system CRUD, streaming core, and session store for web
client
- Add chat view, messages, and composer tests for web client
- Add tool cards and renderers for web client
- Add file-backed memory store core
- Scaffold memory session seams
- Add memory dream consolidation service
- Wire memory assembler into daemon
- Add memory api and cli
- New skills system (#1)
- Add workspace entity (#5)
- Add new skill capabilities (#8)
- Web ui v2 (#9)
- Improve hooks system (#10)
- Session resilience (#11)
- Add extensability (#13)
- Add automation (#16)
- Add channels (#14)
- Add network implementation (#15)
- Add network, bridges and automations web pages (#18)
- Ext registry (#20)
- Add core tasks (#19)
- Bridge adapters (#23)
- Add site (#26)
- Add ext refac and sandbox (#25)
- Settings ui (#37)
- Tasks ui (#36)
- Harness improvements (#44)
- Agent capabilities (#49)
- Redesign ui (#48)
- Unify capability (#53)
- Redesign network workspace (#59)
- Add task deletion and split session delete from stop (#58)
- Session provider selection (#60)
- Production grade adjustments (#66)
- Autonomous system (#75)
- Add agent session route (#80)
- Tools registry (#85)
- Agents soul (#88)
- Add network threads (#105)
- Orchestration improvements (#106)
- Memory v2 (#108)
- Agent categories (#113)
- Providers model (#118)
- Add canonical AGH bundled skill (#143)
- Onboarding and improvements (#198)
- Onboarding and improvements (#201)



### 🐛 Bug Fixes

- Review round
- Review rounds
- Resolve memory extensibility review batch
- Embed web into daemon
- Defaults agents
- Acp integration (#4)
- Lint errors
- Prd folder
- Remove orphan web actions and dead surfaces (#55)
- Qa testing and fixes (#73)
- New review rounds (#82)
- Security audit (#90)
- Release qa round (#95)
- Add missing tools (#141)
- New qa round (#147)
- Advanced qa round (#149)
- Homebrew tap
- Final review round (#151)
- Daemon healthy
- Reasoning models (#158)
- Lint errors (#160)
- Review round (#168)
- Release adjustments (#171)
- Stabilize release ci fixtures
- Stabilize release integration gate
- Stabilize release verify gates
- Stabilize release integration flows
- Stabilize release verify gates
- Stabilize main verify shutdown
- Ignore stale acpmock cancel
- Marketplace search focus and filtering (#193)
- Website video
- Workspace command select



### 📚 Documentation

- Update agents.md
- Update prd
- Update skills
- Update compozy tasks
- Update compozy
- Update compozy
- Add new skills
- Archive prd
- Update prds
- Update rfc
- Update prds
- Update prds
- Add automation prd
- Channels prd
- Update prd
- Update prd
- New prds
- Archive prds
- Bridges adapters prd
- Sandbox prd
- Update
- Archive prd
- Update
- Add new prd
- New design
- Update prd
- Archive prds
- Update prds
- Tasks-ui prd tasks
- Update prd
- Update design docs
- Agent capabilities prd
- Improve site docs
- Remove old design references
- Udpate
- Autonomous prd
- Update skills
- Blog design
- Agent sould prd
- Final qa plan
- Update
- Remove codex ledgers from gitignore
- Remove not needed files
- Udpate ledger
- Update cy-codex-loop skill
- Orchestration improves prd
- Update prds
- Orch improvs prd
- Memv2 prd
- Providers model prd
- Update refacs prd
- New design proposal
- Update rules
- Update skills
- New blog posts (#173)
- Format docs
- Remove old design files
- Remove old
- Skeeper update



### 📦 Build System

- Initial structure
- Commitlint
- Frontend base structure
- Update vscode settings
- Add subagents
- Coderabbit
- Prd and tooling
- Bun lock
- Lint tooling
- Copy.md and tooling adjusts
- Add repoclone rc
- Upgrade skeeper to v0.2.0
- Update go.mod
- Adopt task artifacts into skeeper
- Sync codex plans with skeeper
- Skeeper lock
- Skeeper lock
- New skills
- Skeeper lock
- Skeeper lock
- Skeeper lock
- Update deps and go
- Regenerate daytona sidecar assets for go 1.26.3
- Fix cliff
- Ignore docs on fmt
- Build web assets before goreleaser
- Extend release dry-run timeout



### 🔧 CI/CD

- Lint errors
- Fint release pr
- Fix goreleaser
- Fix release
- Fix release process



### 🧪 Testing

- Add e2e tests (#27)
- Qa rounds (#78)
- Improve test suite (#138)
- Harden daemon-served restart reloads
- Harden daemon-served readiness waits
- Stabilize dashboard focus assertion
- Stabilize release integration gates
- Stabilize release e2e markers
- Stabilize release e2e flows
- Improve suite speed

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
pedronauck added a commit that referenced this pull request May 27, 2026
## Release v0.0.2

This PR prepares the release of version v0.0.2.

### Changelog

## 0.0.2 - 2026-05-26



### Other Changes

- Lessons learned



### ♻️ Refactoring

- Project structure (#7)
- Kb improvements (#12)
- Rename spaces to channels (#17)
- Add extensions gaps (#21)
- Improve tool calls ui (#22)
- Remove web app header
- Module improvements (#29)
- Memory improvements (#35)
- Storybook for web and ui (#38)
- Enable AGH network by default for new installs (#57)
- Hermes adjustments (#69)
- Badges design (#84)
- Storybook scenario and logos gallery
- Migrate typescript tests (#114)
- Internal go packages (#120)
- Ui patterns (#127)
- Improve e2e tests (#130)
- Ui redesign
- Workspace isolation across runtime surfaces (#145)
- Prod ready applies (#162)
- Tool card ui (#164)
- Alpha on logo
- Prod ready features (#167)
- Thread sheet (#202)



### 🎉 Features

- Implement config foundation packages
- Implement sqlite store package
- Add ACP client package
- Add session lifecycle manager
- Implement observe package
- Add daemon composition root
- Add uds api server
- Implement cli package
- Add http api server
- Add system design
- Add foundation types, schemas, and layout shell for web client
- Add daemon health polling and agent sidebar systems for web client
- Add session system CRUD, streaming core, and session store for web
client
- Add chat view, messages, and composer tests for web client
- Add tool cards and renderers for web client
- Add file-backed memory store core
- Scaffold memory session seams
- Add memory dream consolidation service
- Wire memory assembler into daemon
- Add memory api and cli
- New skills system (#1)
- Add workspace entity (#5)
- Add new skill capabilities (#8)
- Web ui v2 (#9)
- Improve hooks system (#10)
- Session resilience (#11)
- Add extensability (#13)
- Add automation (#16)
- Add channels (#14)
- Add network implementation (#15)
- Add network, bridges and automations web pages (#18)
- Ext registry (#20)
- Add core tasks (#19)
- Bridge adapters (#23)
- Add site (#26)
- Add ext refac and sandbox (#25)
- Settings ui (#37)
- Tasks ui (#36)
- Harness improvements (#44)
- Agent capabilities (#49)
- Redesign ui (#48)
- Unify capability (#53)
- Redesign network workspace (#59)
- Add task deletion and split session delete from stop (#58)
- Session provider selection (#60)
- Production grade adjustments (#66)
- Autonomous system (#75)
- Add agent session route (#80)
- Tools registry (#85)
- Agents soul (#88)
- Add network threads (#105)
- Orchestration improvements (#106)
- Memory v2 (#108)
- Agent categories (#113)
- Providers model (#118)
- Add canonical AGH bundled skill (#143)
- Onboarding and improvements (#198)
- Onboarding and improvements (#201)



### 🐛 Bug Fixes

- Review round
- Review rounds
- Resolve memory extensibility review batch
- Embed web into daemon
- Defaults agents
- Acp integration (#4)
- Lint errors
- Prd folder
- Remove orphan web actions and dead surfaces (#55)
- Qa testing and fixes (#73)
- New review rounds (#82)
- Security audit (#90)
- Release qa round (#95)
- Add missing tools (#141)
- New qa round (#147)
- Advanced qa round (#149)
- Homebrew tap
- Final review round (#151)
- Daemon healthy
- Reasoning models (#158)
- Lint errors (#160)
- Review round (#168)
- Release adjustments (#171)
- Stabilize release ci fixtures
- Stabilize release integration gate
- Stabilize release verify gates
- Stabilize release integration flows
- Stabilize release verify gates
- Stabilize main verify shutdown
- Ignore stale acpmock cancel
- Marketplace search focus and filtering (#193)
- Website video
- Workspace command select



### 📚 Documentation

- Update agents.md
- Update prd
- Update skills
- Update compozy tasks
- Update compozy
- Update compozy
- Add new skills
- Archive prd
- Update prds
- Update rfc
- Update prds
- Update prds
- Add automation prd
- Channels prd
- Update prd
- Update prd
- New prds
- Archive prds
- Bridges adapters prd
- Sandbox prd
- Update
- Archive prd
- Update
- Add new prd
- New design
- Update prd
- Archive prds
- Update prds
- Tasks-ui prd tasks
- Update prd
- Update design docs
- Agent capabilities prd
- Improve site docs
- Remove old design references
- Udpate
- Autonomous prd
- Update skills
- Blog design
- Agent sould prd
- Final qa plan
- Update
- Remove codex ledgers from gitignore
- Remove not needed files
- Udpate ledger
- Update cy-codex-loop skill
- Orchestration improves prd
- Update prds
- Orch improvs prd
- Memv2 prd
- Providers model prd
- Update refacs prd
- New design proposal
- Update rules
- Update skills
- New blog posts (#173)
- Format docs
- Remove old design files
- Remove old
- Skeeper update



### 📦 Build System

- Initial structure
- Commitlint
- Frontend base structure
- Update vscode settings
- Add subagents
- Coderabbit
- Prd and tooling
- Bun lock
- Lint tooling
- Copy.md and tooling adjusts
- Add repoclone rc
- Upgrade skeeper to v0.2.0
- Update go.mod
- Adopt task artifacts into skeeper
- Sync codex plans with skeeper
- Skeeper lock
- Skeeper lock
- New skills
- Skeeper lock
- Skeeper lock
- Skeeper lock
- Update deps and go
- Regenerate daytona sidecar assets for go 1.26.3
- Fix cliff
- Ignore docs on fmt
- Build web assets before goreleaser
- Extend release dry-run timeout



### 🔧 CI/CD

- Lint errors
- Fint release pr
- Fix goreleaser
- Fix release
- Fix release process
- Fix release sync
- Decouple release dry-run npm auth
- Persist web assets git auth



### 🧪 Testing

- Add e2e tests (#27)
- Qa rounds (#78)
- Improve test suite (#138)
- Harden daemon-served restart reloads
- Harden daemon-served readiness waits
- Stabilize dashboard focus assertion
- Stabilize release integration gates
- Stabilize release e2e markers
- Stabilize release e2e flows
- Improve suite speed


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Chores**
* Updated web assets dependency to a newer version for improved
stability and performance.

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/compozy/agh/pull/211?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)

<!-- review_stack_entry_end -->

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
pedronauck added a commit that referenced this pull request May 27, 2026
## Release v0.0.2

This PR prepares the release of version v0.0.2.

### Changelog

## 0.0.2 - 2026-05-27



### Other Changes

- Lessons learned



### ♻️ Refactoring

- Project structure (#7)
- Kb improvements (#12)
- Rename spaces to channels (#17)
- Add extensions gaps (#21)
- Improve tool calls ui (#22)
- Remove web app header
- Module improvements (#29)
- Memory improvements (#35)
- Storybook for web and ui (#38)
- Enable AGH network by default for new installs (#57)
- Hermes adjustments (#69)
- Badges design (#84)
- Storybook scenario and logos gallery
- Migrate typescript tests (#114)
- Internal go packages (#120)
- Ui patterns (#127)
- Improve e2e tests (#130)
- Ui redesign
- Workspace isolation across runtime surfaces (#145)
- Prod ready applies (#162)
- Tool card ui (#164)
- Alpha on logo
- Prod ready features (#167)
- Thread sheet (#202)



### 🎉 Features

- Implement config foundation packages
- Implement sqlite store package
- Add ACP client package
- Add session lifecycle manager
- Implement observe package
- Add daemon composition root
- Add uds api server
- Implement cli package
- Add http api server
- Add system design
- Add foundation types, schemas, and layout shell for web client
- Add daemon health polling and agent sidebar systems for web client
- Add session system CRUD, streaming core, and session store for web
client
- Add chat view, messages, and composer tests for web client
- Add tool cards and renderers for web client
- Add file-backed memory store core
- Scaffold memory session seams
- Add memory dream consolidation service
- Wire memory assembler into daemon
- Add memory api and cli
- New skills system (#1)
- Add workspace entity (#5)
- Add new skill capabilities (#8)
- Web ui v2 (#9)
- Improve hooks system (#10)
- Session resilience (#11)
- Add extensability (#13)
- Add automation (#16)
- Add channels (#14)
- Add network implementation (#15)
- Add network, bridges and automations web pages (#18)
- Ext registry (#20)
- Add core tasks (#19)
- Bridge adapters (#23)
- Add site (#26)
- Add ext refac and sandbox (#25)
- Settings ui (#37)
- Tasks ui (#36)
- Harness improvements (#44)
- Agent capabilities (#49)
- Redesign ui (#48)
- Unify capability (#53)
- Redesign network workspace (#59)
- Add task deletion and split session delete from stop (#58)
- Session provider selection (#60)
- Production grade adjustments (#66)
- Autonomous system (#75)
- Add agent session route (#80)
- Tools registry (#85)
- Agents soul (#88)
- Add network threads (#105)
- Orchestration improvements (#106)
- Memory v2 (#108)
- Agent categories (#113)
- Providers model (#118)
- Add canonical AGH bundled skill (#143)
- Onboarding and improvements (#198)
- Onboarding and improvements (#201)



### 🐛 Bug Fixes

- Review round
- Review rounds
- Resolve memory extensibility review batch
- Embed web into daemon
- Defaults agents
- Acp integration (#4)
- Lint errors
- Prd folder
- Remove orphan web actions and dead surfaces (#55)
- Qa testing and fixes (#73)
- New review rounds (#82)
- Security audit (#90)
- Release qa round (#95)
- Add missing tools (#141)
- New qa round (#147)
- Advanced qa round (#149)
- Homebrew tap
- Final review round (#151)
- Daemon healthy
- Reasoning models (#158)
- Lint errors (#160)
- Review round (#168)
- Release adjustments (#171)
- Stabilize release ci fixtures
- Stabilize release integration gate
- Stabilize release verify gates
- Stabilize release integration flows
- Stabilize release verify gates
- Stabilize main verify shutdown
- Ignore stale acpmock cancel
- Marketplace search focus and filtering (#193)
- Website video
- Workspace command select



### 📚 Documentation

- Update agents.md
- Update prd
- Update skills
- Update compozy tasks
- Update compozy
- Update compozy
- Add new skills
- Archive prd
- Update prds
- Update rfc
- Update prds
- Update prds
- Add automation prd
- Channels prd
- Update prd
- Update prd
- New prds
- Archive prds
- Bridges adapters prd
- Sandbox prd
- Update
- Archive prd
- Update
- Add new prd
- New design
- Update prd
- Archive prds
- Update prds
- Tasks-ui prd tasks
- Update prd
- Update design docs
- Agent capabilities prd
- Improve site docs
- Remove old design references
- Udpate
- Autonomous prd
- Update skills
- Blog design
- Agent sould prd
- Final qa plan
- Update
- Remove codex ledgers from gitignore
- Remove not needed files
- Udpate ledger
- Update cy-codex-loop skill
- Orchestration improves prd
- Update prds
- Orch improvs prd
- Memv2 prd
- Providers model prd
- Update refacs prd
- New design proposal
- Update rules
- Update skills
- New blog posts (#173)
- Format docs
- Remove old design files
- Remove old
- Skeeper update



### 📦 Build System

- Initial structure
- Commitlint
- Frontend base structure
- Update vscode settings
- Add subagents
- Coderabbit
- Prd and tooling
- Bun lock
- Lint tooling
- Copy.md and tooling adjusts
- Add repoclone rc
- Upgrade skeeper to v0.2.0
- Update go.mod
- Adopt task artifacts into skeeper
- Sync codex plans with skeeper
- Skeeper lock
- Skeeper lock
- New skills
- Skeeper lock
- Skeeper lock
- Skeeper lock
- Update deps and go
- Regenerate daytona sidecar assets for go 1.26.3
- Fix cliff
- Ignore docs on fmt
- Build web assets before goreleaser
- Extend release dry-run timeout
- Fix release dry-run token contract



### 🔧 CI/CD

- Lint errors
- Fint release pr
- Fix goreleaser
- Fix release
- Fix release process
- Fix release sync
- Decouple release dry-run npm auth
- Persist web assets git auth
- Require npm auth before release merge



### 🧪 Testing

- Add e2e tests (#27)
- Qa rounds (#78)
- Improve test suite (#138)
- Harden daemon-served restart reloads
- Harden daemon-served readiness waits
- Stabilize dashboard focus assertion
- Stabilize release integration gates
- Stabilize release e2e markers
- Stabilize release e2e flows
- Improve suite speed


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Chores**
  * Updated dependencies to latest versions.

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/compozy/agh/pull/214?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)

<!-- review_stack_entry_end -->

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
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.

1 participant