Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
c0fb11e
Update availability information for AI-Generated Runbooks
brmdias Apr 15, 2026
ade7d3e
Update docs/manual/jobs/ai-generated-runbooks.md
brmdias Apr 15, 2026
48ca4bb
Add AI scaffolding for Claude Code and Cursor
smartinellibenedetti Apr 22, 2026
8a643a4
Address Copilot review comments on PR #1793
smartinellibenedetti Apr 22, 2026
90d0594
Address second round of Copilot review comments on PR #1793
smartinellibenedetti Apr 22, 2026
889b137
Fix typo in script file step description
froque Apr 23, 2026
2a2f3d1
Merge pull request #1795 from froque/patch-1
fdevans Apr 23, 2026
9c13aeb
Fix node filter description wording
Copilot Apr 23, 2026
d90b143
Merge pull request #1796 from rundeck/copilot/fix-include-nodes-descr…
fdevans Apr 23, 2026
1f9567d
Merge pull request #1791 from brmdias/patch-21
fdevans Apr 23, 2026
0f9c4bb
Update SKILL.md
smartinellibenedetti Apr 23, 2026
096b8f9
Add performance tuning section for high-throughput Runners
ltamaster Apr 27, 2026
2408478
Standardize jar filename to pd-runner.jar across runner-config.md
Copilot Apr 28, 2026
a4ee6ac
Merge pull request #1793 from rundeck/ai-scaffolding
fdevans May 1, 2026
d1ad616
Merge pull request #1797 from rundeck/docs/runner-performance-tuning
fdevans May 1, 2026
8abbdfe
Update encryptable-properties docs for AES-256-GCM encryption
Jesus-Osuna-M May 5, 2026
350e2c5
Address review feedback: clarify Jasypt CLI name, fix code blocks
Jesus-Osuna-M May 5, 2026
96dec1b
Update all Jasypt references to AES-GCM encryption across docs
Jesus-Osuna-M May 5, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
172 changes: 172 additions & 0 deletions .claude/CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
# Contributing to the AI Setup

Guide for maintaining and extending the Claude Code configuration in this repository.

---

## Directory Structure

```
.claude/
├── docs/ # Reference documentation (human-authored)
├── rules/ # Context-aware rules (auto-loaded by glob patterns)
├── skills/ # Workflow automation skills
└── settings.json # Permissions and hooks
```

Additional directories (`hooks/`, `commands/`, `artifacts/`, `specs/`, `plans/`) may be added as the setup grows. Create them only when populating them with content.

---

## Writing Documentation

### Doc Structure

Docs live in `.claude/docs/` and are referenced from `CLAUDE.md`:

```markdown
# Topic Name

## Overview
Brief description

## Section 1
Content

---

## Related Documentation
- Links to related files
```

### Guidelines

- **One topic per file** — do not mix release-notes workflow with infrastructure.
- **Reference other docs** — link instead of duplicating.
- **Keep it actionable** — docs should help the agent do something.
- **Update `CLAUDE.md`** — add new docs to the Documentation table with a clear "when to read" trigger.

### Naming Conventions

- Use kebab-case: `pr-feed.md`, `release-notes.md`, `local-development.md`.
- Names should describe the topic, not the tool.
- When migrating from `dev-docs/`, preserve the original path as a symlink into `.claude/docs/` so external links keep working.

---

## Creating New Rules

### Rule Structure

Rules live in `.claude/rules/` and auto-load based on file patterns:

```markdown
---
description: Rule description
globs:
- "docs/history/**/version-*.md"
- "**/CHANGELOG.md"
alwaysApply: false
---

# Rule Name

## Mandatory
1. Rule 1
2. Rule 2

## Before Completing
Verification steps
```

### Guidelines

- **Rules enforce constraints** — use for things that MUST be followed (not suggestions).
- **Keep rules short** — reference docs files for detailed guidance.
- **Use specific globs** — only load when relevant files are touched.
- **Do not duplicate docs** — rules point to docs; docs contain the details.

### When to Create a Rule vs. a Doc

| Use a Rule | Use a Doc |
|---|---|
| Must be enforced every time | Reference material |
| Short (under 50 lines) | Detailed guidance |
| Applies to specific file types | Applies broadly |
| Contains DO / DON'T constraints | Contains how-to instructions |

---

## Creating New Skills

### Skill Structure

Each skill lives in `.claude/skills/<skill-name>/` with a `SKILL.md` file:

```
.claude/skills/my-skill/
├── SKILL.md # Main skill definition (required)
├── checklist.md # Verification checklist (optional)
└── examples/ # Example files (optional)
```

### SKILL.md Format

```markdown
---
name: my-skill
description: One-line description of what the skill does
---

# Skill Name

## When to Use
- Describe when this skill should be invoked

## Process
### Phase 1: ...
### Phase 2: ...

## Checklist
- [ ] Verification items
```

### Guidelines

- **Keep skills under 500 lines** — move checklists and examples to separate files.
- **One skill, one responsibility** — split complex workflows into multiple skills.
- **Reference docs, do not duplicate** — point to `.claude/docs/` files instead of repeating content.
- **Include verification** — every skill should have a way to verify its output.
- **Test with the agent** — invoke the skill and verify it produces correct results.

### Naming Conventions

- Use kebab-case: `write-release-notes`, `generate-pr-feed`.
- Prefix with an action verb: `write-`, `generate-`, `create-`, `validate-`.

---

## Updating CLAUDE.md

`CLAUDE.md` is what the agent reads at the start of every session. When making changes:

- **Add new docs** to the Documentation table with a "when to read" trigger.
- **Add new rules** to the Rules section.
- **Add new skills** to the Skills section with a one-line description.
- **Keep it concise** — `CLAUDE.md` is an index, not a manual.

---

## Checklist for AI Setup Changes

Before submitting changes to `.claude/`:

- [ ] New docs added to `CLAUDE.md` Documentation table
- [ ] New rules added to `CLAUDE.md` Rules section
- [ ] New skills added to `CLAUDE.md` Skills section
- [ ] Skills under 500 lines (move checklists to separate files)
- [ ] No content duplicated between docs
- [ ] Rules reference docs (not duplicate them)
- [ ] File names follow kebab-case convention
- [ ] Internal links verified (relative paths resolve correctly)
- [ ] Tested with the agent (invoke skill, verify output)
87 changes: 87 additions & 0 deletions .claude/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
# .claude Directory Structure

This directory contains Claude Code configuration, documentation, skills, and rules for the Rundeck documentation project (VuePress 2 site published to `docs.rundeck.com`).

## Directory Contents

```
.claude/
├── README.md # This file
├── CONTRIBUTING.md # Guide for extending this setup
├── settings.json # Claude Code settings (permissions, hooks)
├── .sdlc-setup-done # sdlc-workflow setup marker (gitignored)
├── docs/ # Human-authored reference documentation
│ ├── writing-style.md
│ ├── infrastructure.md
│ ├── local-development.md
│ ├── docsearch-filters.md
│ └── pr-feed.md
├── rules/ # Context-aware rules (auto-loaded by glob)
│ └── release-notes-pr.md
└── skills/ # Workflow automation skills
├── write-release-notes/
└── generate-pr-feed/
```

All directories are created only when they hold concrete content. Additional directories (`hooks/`, `commands/`, `artifacts/`, `specs/`, `plans/`) may be added as the setup grows.

---

## Documentation (`docs/`)

Human-authored reference material consulted by the agent and developers alike.

| File | When to read |
|---|---|
| `docs/writing-style.md` | Authoring or editing any page under `docs/` — voice, markdown, DocSearch, content structure |
| `docs/local-development.md` | Setting up locally, running the dev server, generating release notes |
| `docs/infrastructure.md` | Touching CI workflows, deployment branches, secrets, or the NPM registry config |
| `docs/pr-feed.md` | Working on the SaaS PR feed generator (`npm run pr-feed`) or `pr-feed.mjs` |
| `docs/docsearch-filters.md` | Modifying the DocSearch filter component or `.vuepress/plugins/docsearch-filters.ts` |

Legacy paths at `dev-docs/DOCSEARCH_FILTERS_README.md` and `dev-docs/PR-FEED-README.md` are symlinks into `.claude/docs/` — the canonical copies live here.

---

## Rules (`rules/`)

Context-aware rules auto-load based on file patterns via frontmatter globs:

```markdown
---
description: Rule description
globs:
- "docs/history/**/version-*.md"
alwaysApply: false
---
```

| Rule | Applies to |
|---|---|
| `rules/release-notes-pr.md` | PR descriptions and generated release-notes files |

---

## Skills (`skills/`)

Workflow automation skills invoked by the agent on demand:

| Skill | Purpose |
|---|---|
| `write-release-notes` | Guide the full release-notes workflow (`npm run notes:draft` → tag → `npm run notes`) with verification steps |
| `generate-pr-feed` | Guide the weekly SaaS PR-feed update (`npm run pr-feed`) including `pr-feed-config.json` maintenance |

Each skill lives in `skills/<skill-name>/SKILL.md` with optional `checklist.md` / `examples/` siblings.

---

## settings.json

Claude Code configuration for permissions (and hooks if added later). Permissions allow the agent to run documented npm scripts, inspect git, edit docs files, and call Atlassian MCP for Jira/Confluence lookups.

---

## Related Files at Repo Root

- `CLAUDE.md` — canonical index of conventions, docs, rules, and skills (agent reads this first)
- `AGENTS.md` — symlink to `CLAUDE.md` (for tools that prefer the AGENTS convention)
110 changes: 110 additions & 0 deletions .claude/docs/docsearch-filters.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
# DocSearch Filters Integration

This guide explains how to integrate the section filtering component into your Rundeck documentation search.

## Components Created

### 1. DocSearchFilters.vue
- Location: `docs/.vuepress/components/DocSearchFilters.vue`
- A Vue component that provides a filter button with a dropdown panel
- Shows section checkboxes (Learning, User Guide, API, Administration, Developer, Release Notes, General)
- Persists filter selections in localStorage
- Dispatches custom events when filters change

### 2. docsearch-filters.ts Plugin
- Location: `docs/.vuepress/plugins/docsearch-filters.ts`
- Client-side plugin that integrates filters with DocSearch
- Listens for filter update events and applies them to DocSearch
- Monitors DocSearch modal for filter restoration

### 3. Client Configuration Updates
- Updated `docs/.vuepress/client.ts` to initialize the filter integration
- Imports and calls `initializeDocSearchFilters()` on app startup

## Integration in Layout

The filter button is **automatically injected** into the navbar by the client configuration. No manual component placement is needed.

The `injectDocSearchFiltersIntoNavbar()` function in `client.ts` automatically:
1. Waits for the DocSearch container to be rendered
2. Creates a wrapper element next to the search container
3. Mounts the `DocSearchFilters` component dynamically

This ensures the filter component appears right next to the search button without requiring manual template modifications.

## How It Works

1. **User clicks the filter button** (funnel icon with badge)
2. **Filter dropdown opens** showing available section tags
3. **User selects/deselects sections** via checkboxes
4. **Selections are stored** in localStorage for persistence
5. **Filter state is dispatched** via custom `docsearch-filters-updated` event
6. **Plugin intercepts Algolia requests** - The `docsearch-filters.ts` plugin patches `fetch` and `XMLHttpRequest` to intercept all Algolia API calls
7. **Facet filters are injected** - Selected sections are added to the request's `facetFilters` parameter as OR conditions (e.g., `tags:Learning OR tags:API`)
8. **Results are filtered by Algolia** - Algolia returns only results matching the selected section tags
9. **Search input is triggered** - An input event is dispatched to refresh the search results with the new filters applied

## Configuration

### Available Sections
The component currently supports these sections (from `config.json` tags):
- Learning
- User Guide
- API
- Administration
- Developer
- Release Notes
- General

To add new sections:
1. Update `.docsearch/config.json` to add new `start_urls` with tags
2. Update the `sections` array in `DocSearchFilters.vue`

### VuePress Configuration
The DocSearch configuration in `docs/.vuepress/config.ts` includes:
```typescript
searchParameters: {
hitsPerPage: 100,
facetFilters: [`version:${setup.base}`],
facets: ['tags']
}
```

The `facets: ['tags']` tells Algolia to include tags as filterable attributes.

## Styling

The component uses VuePress theme variables for styling:
- `--c-brand` - Brand color
- `--c-border` - Border color
- `--c-text-secondary` - Secondary text color
- `--c-bg`, `--c-bg-light` - Background colors

It automatically adapts to dark mode using `html.dark` selector.

## Testing

To test the filters:

1. Build/run the docs: `npm run docs:dev`
2. Click the filter button in the navbar
3. Select a section (e.g., "Learning")
4. Perform a search
5. Results should only show items tagged with the selected section
6. Refresh the page - filter selections persist via localStorage

## Troubleshooting

### Filters not appearing in results
- Ensure Algolia index has been re-scraped with new tags
- Check that `facets: ['tags']` is in the config
- Verify the section tags match what's in `config.json`

### localStorage not working
- Browser privacy mode disables localStorage
- Clear localStorage and refresh if there are issues

### Component not visible
- Check the navbar injection logic in `docs/.vuepress/client.ts` (`injectDocSearchFiltersIntoNavbar()`)
- Verify the `#docsearch-container` mount target exists in the rendered navbar DOM
- Check the browser console for client-side mount or selector errors
Loading
Loading