Fix 77 markdown lint errors across agent skill docs
Add .markdownlint-cli2.jsonc to suppress MD013 (line-length) and MD041 (first-line-heading) which are inappropriate for agent skill files with YAML frontmatter and code examples. Fix genuine structural issues in all affected files: - Add blank lines around headings (MD022) - Add blank lines around fenced code blocks (MD031) - Add blank lines around lists (MD032) - Add language specifiers to bare code fences (MD040) Resolves: PRI-93 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -40,6 +40,7 @@ owners:
|
|||||||
```
|
```
|
||||||
|
|
||||||
**How to get the repositoryID:**
|
**How to get the repositoryID:**
|
||||||
|
|
||||||
1. Log into artifacthub.io
|
1. Log into artifacthub.io
|
||||||
2. Go to Control Panel → Repositories → Add
|
2. Go to Control Panel → Repositories → Add
|
||||||
3. Select repository kind: "Headlamp plugins"
|
3. Select repository kind: "Headlamp plugins"
|
||||||
@@ -99,6 +100,7 @@ annotations: # CRITICAL — Headlamp-specific
|
|||||||
These annotations in `artifacthub-pkg.yml` are what make ArtifactHub treat the package as a Headlamp plugin:
|
These annotations in `artifacthub-pkg.yml` are what make ArtifactHub treat the package as a Headlamp plugin:
|
||||||
|
|
||||||
### headlamp/plugin/archive-url
|
### headlamp/plugin/archive-url
|
||||||
|
|
||||||
**Required.** Direct download URL to the plugin tarball on GitHub Releases.
|
**Required.** Direct download URL to the plugin tarball on GitHub Releases.
|
||||||
|
|
||||||
Format: `https://github.com/<owner>/<repo>/releases/download/v<VERSION>/<pkgname>-<VERSION>.tar.gz`
|
Format: `https://github.com/<owner>/<repo>/releases/download/v<VERSION>/<pkgname>-<VERSION>.tar.gz`
|
||||||
@@ -108,6 +110,7 @@ Format: `https://github.com/<owner>/<repo>/releases/download/v<VERSION>/<pkgname
|
|||||||
- The tarball is uploaded as a GitHub Release asset — NOT to ArtifactHub
|
- The tarball is uploaded as a GitHub Release asset — NOT to ArtifactHub
|
||||||
|
|
||||||
### headlamp/plugin/archive-checksum
|
### headlamp/plugin/archive-checksum
|
||||||
|
|
||||||
**Recommended.** SHA256 checksum of the tarball.
|
**Recommended.** SHA256 checksum of the tarball.
|
||||||
|
|
||||||
Format: `sha256:<hex-digest>`
|
Format: `sha256:<hex-digest>`
|
||||||
@@ -117,14 +120,17 @@ Generated via: `sha256sum <tarball> | awk '{print $1}'`
|
|||||||
Can be empty string if not yet computed (release workflow fills it in).
|
Can be empty string if not yet computed (release workflow fills it in).
|
||||||
|
|
||||||
### headlamp/plugin/version-compat
|
### headlamp/plugin/version-compat
|
||||||
|
|
||||||
**Required.** Minimum Headlamp version the plugin works with.
|
**Required.** Minimum Headlamp version the plugin works with.
|
||||||
|
|
||||||
Format: `>=X.Y.Z` (e.g., `>=0.20.0`, `>=0.26`)
|
Format: `>=X.Y.Z` (e.g., `>=0.20.0`, `>=0.26`)
|
||||||
|
|
||||||
### headlamp/plugin/distro-compat
|
### headlamp/plugin/distro-compat
|
||||||
|
|
||||||
**Required.** Comma-separated list of supported Headlamp deployment targets.
|
**Required.** Comma-separated list of supported Headlamp deployment targets.
|
||||||
|
|
||||||
Valid values:
|
Valid values:
|
||||||
|
|
||||||
- `in-cluster` — Headlamp running inside a Kubernetes cluster
|
- `in-cluster` — Headlamp running inside a Kubernetes cluster
|
||||||
- `web` — Web-based Headlamp deployment
|
- `web` — Web-based Headlamp deployment
|
||||||
- `app` — Headlamp desktop application (Electron)
|
- `app` — Headlamp desktop application (Electron)
|
||||||
@@ -138,6 +144,7 @@ Example: `"in-cluster,web,app"`
|
|||||||
## ArtifactHub Categories
|
## ArtifactHub Categories
|
||||||
|
|
||||||
Valid `category` values for Headlamp plugins:
|
Valid `category` values for Headlamp plugins:
|
||||||
|
|
||||||
- `security` — Secrets, RBAC, policy enforcement
|
- `security` — Secrets, RBAC, policy enforcement
|
||||||
- `storage` — CSI drivers, persistent volumes, Ceph/Rook
|
- `storage` — CSI drivers, persistent volumes, Ceph/Rook
|
||||||
- `monitoring-logging` — Metrics, GPU monitoring, observability
|
- `monitoring-logging` — Metrics, GPU monitoring, observability
|
||||||
@@ -148,7 +155,9 @@ Valid `category` values for Headlamp plugins:
|
|||||||
## Optional Fields
|
## Optional Fields
|
||||||
|
|
||||||
### containersImages
|
### containersImages
|
||||||
|
|
||||||
For plugins associated with a specific container/operator:
|
For plugins associated with a specific container/operator:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
containersImages:
|
containersImages:
|
||||||
- name: <component-name>
|
- name: <component-name>
|
||||||
@@ -156,14 +165,18 @@ containersImages:
|
|||||||
```
|
```
|
||||||
|
|
||||||
### recommendations
|
### recommendations
|
||||||
|
|
||||||
Link to related ArtifactHub packages:
|
Link to related ArtifactHub packages:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
recommendations:
|
recommendations:
|
||||||
- url: https://artifacthub.io/packages/helm/<repo>/<chart>
|
- url: https://artifacthub.io/packages/helm/<repo>/<chart>
|
||||||
```
|
```
|
||||||
|
|
||||||
### install
|
### install
|
||||||
|
|
||||||
Custom installation instructions (markdown):
|
Custom installation instructions (markdown):
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
install: |
|
install: |
|
||||||
## Install via Headlamp Plugin Manager
|
## Install via Headlamp Plugin Manager
|
||||||
@@ -171,6 +184,7 @@ install: |
|
|||||||
```
|
```
|
||||||
|
|
||||||
### logoPath
|
### logoPath
|
||||||
|
|
||||||
Path to a logo image file in the repo (relative to root).
|
Path to a logo image file in the repo (relative to root).
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -179,7 +193,7 @@ Path to a logo image file in the repo (relative to root).
|
|||||||
|
|
||||||
This is the actual flow. There is NO other way to publish:
|
This is the actual flow. There is NO other way to publish:
|
||||||
|
|
||||||
```
|
```text
|
||||||
1. Developer triggers release workflow (workflow_dispatch with version)
|
1. Developer triggers release workflow (workflow_dispatch with version)
|
||||||
2. CI runs tests
|
2. CI runs tests
|
||||||
3. Workflow updates:
|
3. Workflow updates:
|
||||||
@@ -196,6 +210,7 @@ This is the actual flow. There is NO other way to publish:
|
|||||||
```
|
```
|
||||||
|
|
||||||
**Key points:**
|
**Key points:**
|
||||||
|
|
||||||
- Steps 1-9 happen in your GitHub Actions workflow
|
- Steps 1-9 happen in your GitHub Actions workflow
|
||||||
- Step 10 is entirely controlled by ArtifactHub — you cannot trigger it
|
- Step 10 is entirely controlled by ArtifactHub — you cannot trigger it
|
||||||
- The tarball lives on GitHub Releases, not ArtifactHub
|
- The tarball lives on GitHub Releases, not ArtifactHub
|
||||||
@@ -220,7 +235,7 @@ This is the actual flow. There is NO other way to publish:
|
|||||||
|
|
||||||
The plugin tarball built by `@kinvolk/headlamp-plugin` contains:
|
The plugin tarball built by `@kinvolk/headlamp-plugin` contains:
|
||||||
|
|
||||||
```
|
```text
|
||||||
<pkgname>/
|
<pkgname>/
|
||||||
main.js # Bundled plugin code
|
main.js # Bundled plugin code
|
||||||
package.json # Plugin metadata
|
package.json # Plugin metadata
|
||||||
@@ -233,6 +248,7 @@ The `<pkgname>` directory inside the tarball matches the `name` field from `pack
|
|||||||
## Validating Metadata
|
## Validating Metadata
|
||||||
|
|
||||||
Before committing, check:
|
Before committing, check:
|
||||||
|
|
||||||
1. `version` matches across `package.json` and `artifacthub-pkg.yml`
|
1. `version` matches across `package.json` and `artifacthub-pkg.yml`
|
||||||
2. `archive-url` version tag matches the `version` field
|
2. `archive-url` version tag matches the `version` field
|
||||||
3. `name` in `artifacthub-pkg.yml` matches `package.json` `name`
|
3. `name` in `artifacthub-pkg.yml` matches `package.json` `name`
|
||||||
|
|||||||
@@ -99,6 +99,7 @@ class KubeObject<T extends KubeObjectInterface> {
|
|||||||
### ResourceClasses
|
### ResourceClasses
|
||||||
|
|
||||||
All standard K8s resource types available (Secret, Namespace, Pod, etc.):
|
All standard K8s resource types available (Secret, Namespace, Pod, etc.):
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
const [secrets, error, loading] = K8s.ResourceClasses.Secret.useList({ namespace: 'default' });
|
const [secrets, error, loading] = K8s.ResourceClasses.Secret.useList({ namespace: 'default' });
|
||||||
const [secret, error] = K8s.ResourceClasses.Secret.useGet('my-secret', 'default');
|
const [secret, error] = K8s.ResourceClasses.Secret.useGet('my-secret', 'default');
|
||||||
@@ -127,7 +128,8 @@ ApiProxy.apiFactory(group, version, resource): ApiClient
|
|||||||
```
|
```
|
||||||
|
|
||||||
**Service proxy URL** (accessing in-cluster services):
|
**Service proxy URL** (accessing in-cluster services):
|
||||||
```
|
|
||||||
|
```text
|
||||||
/api/v1/namespaces/${ns}/services/http:${name}:${port}/proxy${path}
|
/api/v1/namespaces/${ns}/services/http:${name}:${port}/proxy${path}
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -146,6 +148,7 @@ From `@kinvolk/headlamp-plugin/lib/CommonComponents`:
|
|||||||
`PercentageBar` — bar chart with `data` array of `{ name, value, fill }`
|
`PercentageBar` — bar chart with `data` array of `{ name, value, fill }`
|
||||||
|
|
||||||
### SimpleTable (non-obvious props)
|
### SimpleTable (non-obvious props)
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
<SimpleTable
|
<SimpleTable
|
||||||
data={items}
|
data={items}
|
||||||
@@ -158,6 +161,7 @@ From `@kinvolk/headlamp-plugin/lib/CommonComponents`:
|
|||||||
```
|
```
|
||||||
|
|
||||||
### NameValueTable (non-obvious props)
|
### NameValueTable (non-obvious props)
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
<NameValueTable
|
<NameValueTable
|
||||||
rows={[
|
rows={[
|
||||||
@@ -168,6 +172,7 @@ From `@kinvolk/headlamp-plugin/lib/CommonComponents`:
|
|||||||
```
|
```
|
||||||
|
|
||||||
### ConfigStore
|
### ConfigStore
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
import { ConfigStore } from '@kinvolk/headlamp-plugin/lib';
|
import { ConfigStore } from '@kinvolk/headlamp-plugin/lib';
|
||||||
const store = new ConfigStore<MyConfig>('plugin-name');
|
const store = new ConfigStore<MyConfig>('plugin-name');
|
||||||
@@ -177,6 +182,7 @@ store.useConfig(): () => MyConfig;
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Pre-bundled (no package.json entry needed)
|
### Pre-bundled (no package.json entry needed)
|
||||||
|
|
||||||
react, react-dom, react-router-dom, @iconify/react, react-redux, @material-ui/core, @material-ui/styles, lodash, notistack, recharts, monaco-editor
|
react, react-dom, react-router-dom, @iconify/react, react-redux, @material-ui/core, @material-ui/styles, lodash, notistack, recharts, monaco-editor
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -264,6 +270,7 @@ vi.mock('@kinvolk/headlamp-plugin/lib/CommonComponents', () => ({
|
|||||||
Headlamp supports light and dark themes. **Never hardcode colors.** Use CSS custom properties with light-mode fallbacks:
|
Headlamp supports light and dark themes. **Never hardcode colors.** Use CSS custom properties with light-mode fallbacks:
|
||||||
|
|
||||||
### Required CSS variables for inline styles
|
### Required CSS variables for inline styles
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
// Text
|
// Text
|
||||||
color: 'var(--mui-palette-text-primary)'
|
color: 'var(--mui-palette-text-primary)'
|
||||||
@@ -289,6 +296,7 @@ color: 'var(--link-color, #1976d2)'
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Common mistakes to avoid
|
### Common mistakes to avoid
|
||||||
|
|
||||||
- **NEVER** use raw `#fff`, `#000`, `#333`, `#666` etc. without wrapping in `var(--mui-palette-*)`
|
- **NEVER** use raw `#fff`, `#000`, `#333`, `#666` etc. without wrapping in `var(--mui-palette-*)`
|
||||||
- **NEVER** use `rgba(0,0,0,0.5)` for overlays without a variable — this is the one exception where raw rgba is acceptable (backdrop overlays)
|
- **NEVER** use `rgba(0,0,0,0.5)` for overlays without a variable — this is the one exception where raw rgba is acceptable (backdrop overlays)
|
||||||
- **NEVER** assume white backgrounds or dark text — always use `background-paper`/`text-primary`
|
- **NEVER** assume white backgrounds or dark text — always use `background-paper`/`text-primary`
|
||||||
@@ -296,6 +304,7 @@ color: 'var(--link-color, #1976d2)'
|
|||||||
- Fallback values after the comma are for environments where the variable isn't set — always use the light-mode default
|
- Fallback values after the comma are for environments where the variable isn't set — always use the light-mode default
|
||||||
|
|
||||||
### Form inputs in custom components
|
### Form inputs in custom components
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
const inputStyle = {
|
const inputStyle = {
|
||||||
border: '1px solid var(--mui-palette-divider, #ccc)',
|
border: '1px solid var(--mui-palette-divider, #ccc)',
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"config": {
|
||||||
|
// Line length — not enforced for agent skill docs with code examples
|
||||||
|
"MD013": false,
|
||||||
|
// First line heading — files use YAML frontmatter, not headings
|
||||||
|
"MD041": false
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,7 +4,7 @@ This repository is the home for developing and maintaining Claude Code agent ski
|
|||||||
|
|
||||||
## Repository Structure
|
## Repository Structure
|
||||||
|
|
||||||
```
|
```text
|
||||||
.claude/agents/ # Agent skill definitions (markdown with YAML frontmatter)
|
.claude/agents/ # Agent skill definitions (markdown with YAML frontmatter)
|
||||||
README.md # Project documentation
|
README.md # Project documentation
|
||||||
```
|
```
|
||||||
|
|||||||
Reference in New Issue
Block a user