---
name: NotInvalid
description: A deliberately broken fixture used by example/README.md to show what each rule's error output looks like.
secret_field: not allowed by the spec
metadata:
  internal: true
---

# Invalid example skill

This skill deliberately trips three rules so the CLI's diagnostic output
can be inspected end-to-end. One fires under defaults; two need to be
enabled to surface as errors (the spec ships them at lower severities).

1. `invalid-skill-name` *(error by default)* — the frontmatter `name:`
   is `NotInvalid`, which is not lowercase **and** does not match the
   parent directory `invalid`.
2. `disallowed-field` *(disabled by default; enable via
   `--disallowed-field` or YAML config)* — `secret_field:` is not in
   the spec's allowed field list.
3. `check-absolute-paths` *(warning by default; escalate to error via
   `--check-absolute-paths` or YAML config)* — the link below uses an
   absolute filesystem path, which is not portable across machines.

The broken link: [absolute link](/tmp/this/does/not/exist.md)

Run it with default rules:

```bash
dart run dart_skills_lint --skill ./example/invalid
```

…and again with every rule turned up to error:

```bash
dart run dart_skills_lint --skill ./example/invalid \
  --disallowed-field --check-absolute-paths
```

Expected: non-zero exit, error messages naming each rule that is enabled.
