Skip to content

Qa to main#8

Merged
tusharmane-tm merged 2 commits intomainfrom
qa
Feb 6, 2026
Merged

Qa to main#8
tusharmane-tm merged 2 commits intomainfrom
qa

Conversation

@tusharmane-tm
Copy link
Contributor

Please always provide the GitHub issue(s) your PR is for, as well as test URLs where your change can be observed (before and after):

Fix #

Test URLs:

- Created unit-testing.md to provide guidelines on when and how to write unit tests, including examples and best practices.
- Added vitest-setup.md for one-time Vitest configuration instructions, including installation, configuration, and usage.
- Updated .gitignore to exclude unnecessary files and directories.
- Introduced AGENTS.md to outline the skills available for development tasks and the process for using them.
- Added CLAUDE.md to provide an overview of the project, key technologies, setup commands, and development workflow.
- Created SETUP-AEM-EDS.md to explain the setup of AEM EDS projects with multiple authoring options.
- Enhanced README.md to reflect the new project structure, authoring environments, and development workflow.
@aem-code-sync
Copy link

aem-code-sync bot commented Feb 6, 2026

Hello, I'm the AEM Code Sync Bot and I will run some actions to deploy your branch and validate page speed.
In case there are problems, just click a checkbox below to rerun the respective action.

  • Re-run PSI checks
  • Re-sync branch
Commits

@tusharmane-tm tusharmane-tm merged commit 0771e3e into main Feb 6, 2026
2 of 3 checks passed
@gemini-code-assist
Copy link

Summary of Changes

Hello @tusharmane-tm, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request represents a significant architectural and operational shift, integrating a robust set of AI agent skills to streamline development and content migration processes for AEM Edge Delivery Services. It formalizes workflows for building and reviewing code, managing content, and importing pages, all while introducing new UI components tailored for event-based websites. The changes aim to enhance efficiency, maintainability, and author experience across the project.

Highlights

  • New AI Agent Skills and Documentation: A comprehensive suite of new AI agent skills has been introduced, covering various aspects of AEM Edge Delivery Services development, including content modeling, block building, code review, page import, and documentation search. This significantly enhances the project's AI-assisted development capabilities.
  • Project Documentation Overhaul: The project's core documentation, including README.md, AGENTS.md, CLAUDE.md, and SETUP-AEM-EDS.md, has been updated or added to reflect the new AI-driven development approach and the project's focus as a Conference/Event Website Solution. This provides clear guidelines for both human and AI contributors.
  • New UI Blocks for Conference/Event Websites: Several new UI blocks have been added to support the Conference/Event Website Solution, such as agenda, countdown, cta-banner, faq, location, session-list, speakers, and sponsors. These blocks are designed for author-friendliness and performance.
  • Content Fragment Integration: The speakers block now supports Content Fragment integration, and the Universal Editor model has been updated to include this. New documentation (docs/content-fragment-usage.md, docs/content-fragments.md) details how to leverage AEM Content Fragments for managing reusable content like speaker profiles.
  • Development Workflow Standardization: The introduction of skills like content-driven-development and page-import establishes standardized workflows for all development tasks, ensuring consistency, best practices, and a content-first approach to AEM Edge Delivery Services projects.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • .agents/discover-skills
    • Added new bash script to discover and list available skills.
  • .claude/.skills/authoring-analysis/SKILL.md
    • Added new skill for analyzing content sequences and determining authoring approach.
  • .claude/.skills/block-collection-and-party/SKILL.md
    • Added new skill for searching and utilizing blocks from Block Collection and Block Party.
  • .claude/.skills/block-collection-and-party/scripts/get-block-structure.js
    • Added script to fetch and parse block structure examples.
  • .claude/.skills/block-collection-and-party/scripts/package.json
    • Added package.json for block-collection-and-party scripts.
  • .claude/.skills/block-collection-and-party/scripts/search-block-collection-github.js
    • Added script to search Block Collection via GitHub API.
  • .claude/.skills/block-collection-and-party/scripts/search-block-collection.js
    • Added script to search Block Collection via navigation page.
  • .claude/.skills/block-collection-and-party/scripts/search-block-party.js
    • Added script to search AEM Block Party index.
  • .claude/.skills/block-inventory/SKILL.md
    • Added new skill to survey and catalog available blocks.
  • .claude/.skills/building-blocks/SKILL.md
    • Added new skill for creating and modifying AEM Edge Delivery blocks.
  • .claude/.skills/building-blocks/resources/css-guidelines.md
    • Added CSS guidelines for AEM blocks.
  • .claude/.skills/building-blocks/resources/js-guidelines.md
    • Added JavaScript guidelines for AEM blocks.
  • .claude/.skills/code-review/SKILL.md
    • Added new skill for reviewing code in AEM Edge Delivery Services projects.
  • .claude/.skills/code-review/resources/review-checklist.md
    • Added PR review checklist.
  • .claude/.skills/code-review/scripts/capture-screenshots.js
    • Added script for capturing screenshots for visual validation.
  • .claude/.skills/code-review/scripts/package.json
    • Added package.json for code-review scripts.
  • .claude/.skills/content-driven-development/SKILL.md
    • Added new skill orchestrating the Content Driven Development process.
  • .claude/.skills/content-driven-development/resources/html-structure.md
    • Added HTML file structure guide for test content.
  • .claude/.skills/content-driven-development/scripts/find-block-content.js
    • Added script to find pages containing a specific block.
  • .claude/.skills/content-driven-development/scripts/package.json
    • Added package.json for content-driven-development scripts.
  • .claude/.skills/content-modeling/SKILL.md
    • Added new skill for designing content models for AEM Edge Delivery blocks.
  • .claude/.skills/content-modeling/resources/advanced-scenarios.md
    • Added advanced content modeling scenarios documentation.
  • .claude/.skills/content-modeling/resources/canonical-models.md
    • Added documentation for the 4 canonical block models.
  • .claude/.skills/docs-search/SKILL.md
    • Added new skill for searching AEM documentation.
  • .claude/.skills/docs-search/scripts/package.json
    • Added package.json for docs-search scripts.
  • .claude/.skills/docs-search/scripts/search.js
    • Added script for searching AEM documentation.
  • .claude/.skills/generate-import-html/SKILL.md
    • Added new skill to generate structured HTML from authoring analysis.
  • .claude/.skills/generate-import-html/resources/metadata-extraction.md
    • Added metadata extraction documentation.
  • .claude/.skills/generate-import-html/resources/metadata-mapping.md
    • Added metadata mapping reference documentation.
  • .claude/.skills/identify-page-structure/SKILL.md
    • Added new skill to identify section boundaries and content sequences.
  • .claude/.skills/page-decomposition/SKILL.md
    • Added new skill to analyze content sequences within a section.
  • .claude/.skills/page-import/SKILL.md
    • Added new skill as an orchestrator for webpage import/migration.
  • .claude/.skills/preview-import/SKILL.md
    • Added new skill to preview and verify imported content.
  • .claude/.skills/scrape-webpage/SKILL.md
    • Added new skill to scrape webpage content, metadata, and images.
  • .claude/.skills/scrape-webpage/resources/web-page-analysis.md
    • Added web page analysis documentation.
  • .claude/.skills/scrape-webpage/scripts/analyze-webpage.js
    • Added script to analyze webpages for migration.
  • .claude/.skills/scrape-webpage/scripts/generate-path.js
    • Added script to generate document paths from URLs.
  • .claude/.skills/scrape-webpage/scripts/image-capture.js
    • Added image capture utilities for page migration.
  • .claude/.skills/scrape-webpage/scripts/package.json
    • Added package.json for scrape-webpage scripts.
  • .claude/.skills/testing-blocks/SKILL.md
    • Added new skill for testing code changes in AEM Edge Delivery projects.
  • .claude/.skills/testing-blocks/resources/browser-testing.md
    • Added browser testing guide.
  • .claude/.skills/testing-blocks/resources/testing-workflow.md
    • Added complete testing workflow guide.
  • .claude/.skills/testing-blocks/resources/troubleshooting.md
    • Added testing troubleshooting guide.
  • .claude/.skills/testing-blocks/resources/unit-testing.md
    • Added unit testing guide.
  • .claude/.skills/testing-blocks/resources/vitest-setup.md
    • Added Vitest setup guide.
  • .gitignore
    • Removed entries for .agents/*, .skills/*, AGENTS.md, and SKILLS.md.
  • AGENTS.md
    • Added new documentation outlining the structure and usage of AI agent skills.
  • CLAUDE.md
    • Added new instructions for AI agents working on the project.
  • README.md
    • Updated project overview to reflect new Conference/Event Website Solution focus and AI-driven development.
  • SETUP-AEM-EDS.md
    • Added new documentation for setting up AEM EDS project with multiple authoring options.
  • blocks/agenda/agenda.css
    • Added CSS for the new agenda block.
  • blocks/agenda/agenda.js
    • Added JavaScript for the new agenda block to display event schedules.
  • blocks/countdown/countdown.css
    • Added CSS for the new countdown block.
  • blocks/countdown/countdown.js
    • Added JavaScript for the new countdown block to display event countdowns.
  • blocks/cta-banner/cta-banner.css
    • Added CSS for the new CTA banner block.
  • blocks/cta-banner/cta-banner.js
    • Added JavaScript for the new CTA banner block to promote actions.
  • blocks/faq/faq.css
    • Added CSS for the new FAQ block.
  • blocks/faq/faq.js
    • Added JavaScript for the new FAQ block to display expandable questions.
  • blocks/hero/hero.js
    • Modified to add specific CSS classes (hero, hero-image, hero-content) to elements within the hero block for better styling control.
  • blocks/location/location.css
    • Added CSS for the new location block.
  • blocks/location/location.js
    • Added JavaScript for the new location block to display event location and map.
  • blocks/session-list/session-list.css
    • Added CSS for the new session list block.
  • blocks/session-list/session-list.js
    • Added JavaScript for the new session list block to display session details.
  • blocks/speakers/speakers.css
    • Added CSS for the new speakers block.
  • blocks/speakers/speakers.js
    • Added JavaScript for the new speakers block to display speaker profiles, supporting Content Fragments.
  • blocks/sponsors/sponsors.css
    • Added CSS for the new sponsors block.
  • blocks/sponsors/sponsors.js
    • Added JavaScript for the new sponsors block to display sponsor information.
  • docs/authoring-model.md
    • Added documentation for the conference website authoring model.
  • docs/content-fragment-usage.md
    • Added guide for using AEM Content Fragments with the conference solution.
  • docs/content-fragments.md
    • Added documentation outlining Content Fragment integration for speakers, sessions, and sponsors.
  • ue/models/_section.json
    • Modified to include 'speaker' as an allowed component within sections.
  • ue/models/speaker.json
    • Added new Universal Editor model for the speaker block, enabling Content Fragment integration.
Activity
  • The pull request was created by tusharmane-tm.
  • The pull request description includes placeholders for GitHub issues and test URLs, indicating it's a new feature or a significant update.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request introduces a new "skills" framework for an AI agent, including documentation, discovery scripts, and various helper scripts for interacting with AEM documentation and block repositories. It also adds several new blocks for a conference website solution and updates the project's README and other documentation to reflect these changes. My review focuses on improving the robustness and efficiency of the new scripts and fixing a bug in the speakers block implementation. Overall, the changes are extensive and add significant new functionality.

}
} catch (error) {
// Fallback to default behavior
processTableBasedSpeakers(null, container);

Choose a reason for hiding this comment

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

critical

This fallback logic will cause a runtime error. The processTableBasedSpeakers function expects a DOM element as its first argument and will attempt to access its children property. Calling it with null will result in a TypeError: Cannot read properties of null (reading 'children'). The catch block should instead log the error and gracefully fail, as there is no table-based content to fall back to in this code path.

Suggested change
processTableBasedSpeakers(null, container);
console.error(`Failed to load speakers from fragment ${fragmentPath}:`, error);

Comment on lines +52 to +53
name=$(printf '%s\n' "$frontmatter" | awk -F': *' '/^name:/ {sub(/^name: */,"",$0); print substr($0, index($0,$2))}' 2>/dev/null)
description=$(printf '%s\n' "$frontmatter" | awk -F': *' '/^description:/ {sub(/^description: */,"",$0); print substr($0, index($0,$2))}' 2>/dev/null)

Choose a reason for hiding this comment

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

high

These awk commands for parsing the YAML frontmatter are complex and potentially fragile. For example, they might fail if the name or description values themselves contain colons. Also, redirecting stderr to /dev/null (2>/dev/null) hides potential parsing errors, making debugging harder. For more robust parsing, consider a tool that understands YAML, or simplify the awk script to be more resilient and to not suppress errors.

Comment on lines +13 to +71
process_skills_directory() {
local skills_dir="$1"
local location_label="$2"

if [[ ! -d "$skills_dir" ]]; then
return 0
fi

local count=0
# Count skills first
while IFS= read -r -d '' skill_file; do
count=$((count + 1))
done < <(find "$skills_dir" -type f -name 'SKILL.md' -print0)

if [[ $count -eq 0 ]]; then
return 0
fi

echo "$location_label ($count skill(s)):"
# Generate underline matching label length
local len=${#location_label}
if [[ $len -gt 0 ]]; then
local underline=""
for ((i=0; i<len; i++)); do
underline+="="
done
echo "$underline"
fi
echo ""

# Iterate SKILL.md files robustly (handles spaces)
while IFS= read -r -d '' skill_file; do
skill_dir=$(dirname "$skill_file")
skill_name=$(basename "$skill_dir")

# Check for YAML frontmatter
if head -n 1 "$skill_file" | grep -q "^---$"; then
# Extract lines between first pair of --- delimiters
frontmatter=$(awk 'BEGIN{inside=0; c=0} /^---$/ {inside=!inside; if(++c==3) exit} inside==1 {print}' "$skill_file")
name=$(printf '%s\n' "$frontmatter" | awk -F': *' '/^name:/ {sub(/^name: */,"",$0); print substr($0, index($0,$2))}' 2>/dev/null)
description=$(printf '%s\n' "$frontmatter" | awk -F': *' '/^description:/ {sub(/^description: */,"",$0); print substr($0, index($0,$2))}' 2>/dev/null)

echo "Skill: ${name:-$skill_name}"
echo "Path: $skill_file"
if [[ -n "$description" ]]; then
echo "Description: $description"
fi
else
echo "Skill: $skill_name"
echo "Path: $skill_file"
echo "Description:"
head -n 5 "$skill_file"
fi

echo ""
echo "---"
echo ""
done < <(find "$skills_dir" -type f -name 'SKILL.md' -print0)
}

Choose a reason for hiding this comment

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

medium

This function executes the find command twice with the same arguments, which is inefficient. First to count the files, and second to process them. You can refactor this to run find only once, store the results in an array, and then process the array. This makes the script faster, especially if there are many files to search. The suggested implementation also uses a more idiomatic way to generate the underline.

process_skills_directory() {
  local skills_dir="$1"
  local location_label="$2"

  if [[ ! -d "$skills_dir" ]]; then
    return 0
  fi

  local skill_files=()
  while IFS= read -r -d '' file; do
    skill_files+=("$file")
  done < <(find "$skills_dir" -type f -name 'SKILL.md' -print0)

  local count=${#skill_files[@]}
  if [[ $count -eq 0 ]]; then
    return 0
  fi

  echo "$location_label ($count skill(s))"
  # Generate underline matching label length
  local len=${#location_label}
  if [[ $len -gt 0 ]]; then
    printf '=%.0s' $(seq 1 $len)
    echo
  fi
  echo ""

  # Iterate SKILL.md files robustly (handles spaces)
  for skill_file in "${skill_files[@]}"; do
    skill_dir=$(dirname "$skill_file")
    skill_name=$(basename "$skill_dir")

    # Check for YAML frontmatter
    if head -n 1 "$skill_file" | grep -q "^---$"; then
      # Extract lines between first pair of --- delimiters
      frontmatter=$(awk 'BEGIN{inside=0; c=0} /^---$/ {inside=!inside; if(++c==3) exit} inside==1 {print}' "$skill_file")
      name=$(printf '%s\n' "$frontmatter" | awk -F': *' '/^name:/ {sub(/^name: */,"",$0); print substr($0, index($0,$2))}' 2>/dev/null)
      description=$(printf '%s\n' "$frontmatter" | awk -F': *' '/^description:/ {sub(/^description: */,"",$0); print substr($0, index($0,$2))}' 2>/dev/null)

      echo "Skill: ${name:-$skill_name}"
      echo "Path: $skill_file"
      if [[ -n "$description" ]]; then
        echo "Description: $description"
      fi
    else
      echo "Skill: $skill_name"
      echo "Path: $skill_file"
      echo "Description:"
      head -n 5 "$skill_file"
    fi

    echo ""
    echo "---"
    echo ""
  done
}

Comment on lines +279 to +281
const approvedEntries = allEntries.filter(entry =>
entry.approved === 'Yes' || entry.approved === true || entry.approved === 'true'
);

Choose a reason for hiding this comment

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

medium

The check for the approved status is a bit fragile as it checks for multiple specific values ('Yes', true, 'true'). This can be made more robust by converting the value to a lowercase string and checking against 'yes' and 'true'. This handles variations in capitalization and data type more gracefully.

Suggested change
const approvedEntries = allEntries.filter(entry =>
entry.approved === 'Yes' || entry.approved === true || entry.approved === 'true'
);
const approvedEntries = allEntries.filter(entry => {
const approved = String(entry.approved || '').toLowerCase();
return approved === 'yes' || approved === 'true';
});

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