validate-piles-notation
Acerca de
Esta habilidad analiza y valida cadenas de notación PILES utilizadas para definir grupos de fusión de piezas en jigsawR. Realiza validación sintáctica, convierte cadenas en listas de grupos estructuradas, y puede verificar adyacencias contra resultados de rompecabezas. Úsela para validar entradas de usuario antes de `generate_puzzle()`, depurar grupos de fusión, o probar serialización de ida y vuelta.
Instalación rápida
Claude Code
Recomendadonpx skills add pjt222/agent-almanac -a claude-code/plugin add https://github.com/pjt222/agent-almanacgit clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/validate-piles-notationCopia y pega este comando en Claude Code para instalar esta habilidad
Documentación
Validate PILES Notation
Parse + validate PILES strings → puzzle piece fusion groups.
Use When
- Validate user PILES → before
generate_puzzle() - Debug fusion issues (wrong pieces merged, unexpected results)
- Explain PILES → user plain language
- Test round-trip: parse → groups → serialize → parse
In
- Required: PILES string (e.g.,
"1-2-3,4-5") - Optional: Puzzle result obj (adjacency valid + keyword resolution)
- Optional: Puzzle type (keyword support
"center","ring1","R1")
Do
Step 1: Syntax Valid
library(jigsawR)
result <- validate_piles_syntax("1-2-3,4-5")
# Returns TRUE if valid, error message if invalid
Common syntax errs:
- Unmatched parens:
"1-2(-3)-4"w/ mismatched() - Invalid chars: only digits,
-,,,:,(,)+ keywords - Empty groups:
"1-2,,3-4"(double comma)
Got: TRUE for valid syntax, descriptive err for invalid.
If err: Print exact PILES string + valid err msg.
Step 2: Parse → Groups
groups <- parse_piles("1-2-3,4-5")
# Returns: list(c(1, 2, 3), c(4, 5))
W/ ranges:
groups <- parse_piles("1:6,7-8")
# Returns: list(c(1, 2, 3, 4, 5, 6), c(7, 8))
Got: List of int vectors, one per fusion group, correct piece IDs + boundaries.
If err: Check syntax valid passed Step 1. Unexpected groups → verify - separates pieces in group, , separates groups, : expands inclusive endpoints.
Step 3: Explain Plain Language
Per group:
"1-2-3,4-5"→ "Group 1: fuse pieces 1, 2, 3. Group 2: fuse 4, 5.""1:6"→ "Group 1: fuse pieces 1 through 6 (6 pieces).""center,ring1"→ "Group 1: center piece. Group 2: all pieces ring 1."
Got: Each group described plain w/ piece counts + IDs → understandable to non-tech.
If err: Keywords can't be explained ("ring1" no clear meaning) → notation needs puzzle result for ctx. Advise user provide puzzle type or numeric IDs.
Step 4: Validate vs Puzzle Result (Optional)
If puzzle result available, verify:
# Generate the puzzle first
puzzle <- generate_puzzle(type = "hexagonal", grid = c(3), size = c(200))
# Parse with puzzle context (resolves keywords)
groups <- parse_fusion("center,ring1", puzzle)
Check:
- All piece IDs exist in puzzle
- Keywords resolve to valid piece sets
- Fused pieces actually adjacent (warn if not)
Got: All piece IDs valid. Adjacent pieces fuse cleanly.
If err: List invalid piece IDs or non-adjacent pairs.
Step 5: Round-Trip
Verify parse/serialize fidelity:
original <- "1-2-3,4-5"
groups <- parse_piles(original)
roundtrip <- to_piles(groups)
# roundtrip should equal original (or canonical equivalent)
groups2 <- parse_piles(roundtrip)
identical(groups, groups2) # Must be TRUE
Got: Round-trip → identical group lists, confirming parse_piles() + to_piles() are inverses.
If err: Round-trip differs → check serializer normalization (sorting IDs, ranges → explicit lists). Canonical diffs OK if identical(groups, groups2) returns TRUE.
PILES Quick Reference
# Basic syntax
"1-2" # Fuse pieces 1 and 2
"1-2-3,4-5" # Two groups: (1,2,3) and (4,5)
"1:6" # Range: pieces 1 through 6
# Keywords (require puzzle_result)
"center" # Center piece (hex/concentric)
"ring1" # All pieces in ring 1
"R1" # Row 1 (rectangular)
"boundary" # All boundary pieces
# Functions
parse_piles("1-2-3,4-5") # Parse PILES string
parse_fusion("1-2-3", puzzle) # Auto-detect format
to_piles(list(c(1,2), c(3,4))) # Convert to PILES
validate_piles_syntax("1-2(-3)-4") # Validate syntax
Check
-
validate_piles_syntax()returns TRUE for valid strings -
parse_piles()returns correct group lists - Round-trip serialization preserves groups
- Keywords resolve correctly w/ puzzle ctx
- Invalid syntax → clear err msgs
Traps
- Keyword w/o puzzle ctx:
"center"requires puzzle result. Pass toparse_fusion(), notparse_piles(). - 1-indexed pieces: Piece IDs start at 1, not 0.
- Adjacent vs non-adjacent fusion: Non-adjacent fusion works but may produce unexpected visuals. Validate adjacency when possible.
- Range notation:
"1:6"includes both endpoints (1, 2, 3, 4, 5, 6).
→
generate-puzzle— generate puzzles w/ fusion groupsadd-puzzle-type— new types need PILES/fusion supportrun-puzzle-tests— test PILES parsing w/ full suite
Repositorio GitHub
Habilidades relacionadas
content-collections
MetaEsta habilidad proporciona una configuración probada en producción para Content Collections, una herramienta centrada en TypeScript que transforma archivos Markdown/MDX en colecciones de datos con tipado seguro mediante validación Zod. Úsala al construir blogs, sitios de documentación o aplicaciones Vite + React con mucho contenido para garantizar seguridad de tipos y validación automática de contenido. Abarca todo, desde la configuración del plugin de Vite y compilación MDX hasta la optimización de despliegue y validación de esquemas.
polymarket
MetaEsta habilidad permite a los desarrolladores crear aplicaciones con la plataforma de mercados de predicción Polymarket, incluyendo la integración de API para operaciones y datos de mercado. También proporciona transmisión de datos en tiempo real a través de WebSocket para monitorear operaciones en vivo y actividad del mercado. Úsela para implementar estrategias de trading o crear herramientas que procesen actualizaciones de mercado en tiempo real.
creating-opencode-plugins
MetaEsta habilidad ayuda a los desarrolladores a crear complementos de OpenCode que se conectan a más de 25 tipos de eventos, como comandos, archivos y operaciones LSP. Proporciona la estructura del complemento, las especificaciones de la API de eventos y los patrones de implementación para módulos en JavaScript/TypeScript. Úsala cuando necesites interceptar, monitorear o extender el ciclo de vida del asistente de IA de OpenCode con lógica personalizada basada en eventos.
sglang
MetaSGLang es un framework de alto rendimiento para el servicio de LLM que se especializa en generación rápida y estructurada para JSON, expresiones regulares y flujos de trabajo de agentes utilizando su caché de prefijos RadixAttention. Ofrece una inferencia significativamente más rápida, especialmente para tareas con prefijos repetidos, lo que lo hace ideal para salidas complejas y estructuradas, y conversaciones multiturno. Elige SGLang sobre alternativas como vLLM cuando necesites decodificación restringida o estés construyendo aplicaciones con uso extensivo de prefijos compartidos.
