← ClaudeAtlas

add-annotationlisted

Add a new @AI... guardrail annotation to VibeTags — wire it through AnnotationCollector, every platform renderer, GranularRenderer, BuildFingerprint, and AnnotationValidator, then update all four docs. Use when the user says "add annotation", "new @AI annotation", "add a new guardrail annotation", or wants VibeTags to support a new kind of AI instruction on Java code.
PIsberg/vibetags · ★ 4 · AI & Automation · score 70
Install: claude install-skill PIsberg/vibetags
# Add an Annotation to VibeTags Paths and class names below were derived from the codebase at v1.0.0-RC3 (the `NewAnnotationsV5` wave — `@AIIdempotent`, `@AIFeatureFlag`, `@AISecure` — plus commit `df01cb8`, which fixed `BuildFingerprint` silently ignoring 12 annotation buckets and is why Step 5 below is not optional). If a path 404s, `grep -rln "AISecure" vibetags/src/main/java` from the repo root will re-locate every dispatch point this skill lists — `@AISecure` is the newest full annotation and touches every one of them. ## Step 1 — Design the annotation New file: `vibetags-annotations/src/main/java/se/deversity/vibetags/annotations/AIYourName.java`. - `@Retention(RetentionPolicy.SOURCE)` always — zero runtime cost is a hard invariant of this library; nothing about the annotation may require `CLASS` or `RUNTIME` retention. - `@Target({...})` — pick from `TYPE`, `METHOD`, `FIELD`, `PARAMETER` to match the semantic (e.g. `@AIInputSanitized`/`@AISecureLogging` target `PARAMETER, FIELD`, not `TYPE`). - String attributes default to `""`, never `null` — every consumption site checks `.isBlank()`/`.isEmpty()`, never a null-check. - Enum-valued attributes get a nested `enum` inside the `@interface` with a sensible default constant (see `AIThreadSafe.Strategy`, `AIExtensible.Strategy`, `AISecureLogging.MaskingPolicy`). - Class-valued attributes (`AISunset.replacement`) must be read via `MirroredTypeException` at every consumption site — copy the try/catch pattern from