i18n/de/skills/add-puzzle-type/SKILL.md
Einen neuen Puzzletyp ueber alle 10+ Pipeline-Integrationspunkte in jigsawR aufsetzen. Erstellt das Kern-Puzzlemodul, verdrahtet es in die einheitliche Pipeline (Generierung, Positionierung, Rendering, Adjazenz), fuegt ggpuzzle geom/stat-Layer hinzu, aktualisiert DESCRIPTION und config.yml, erweitert die Shiny-App und erstellt eine umfassende Testsuite.
npx skillsauth add pjt222/agent-almanac add-puzzle-typeInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Einen neuen Puzzletyp ueber alle Pipeline-Integrationspunkte in jigsawR aufsetzen.
"triangular")R/<type>_puzzle.R mit der internen Generierungsfunktion erstellen:
#' Generate <type> puzzle pieces (internal)
#' @noRd
generate_<type>_pieces_internal <- function(params, seed) {
# 1. RNG-Zustand initialisieren
# 2. Teilegeometrien generieren
# 3. Kantenpfade erstellen (SVG-Pfaddaten)
# 4. Adjazenz berechnen
# 5. Liste zurueckgeben: pieces, edges, adjacency, metadata
}
Dem Muster in R/voronoi_puzzle.R oder R/snic_puzzle.R fuer die Struktur folgen.
Erwartet: Funktion gibt eine Liste mit $pieces, $edges, $adjacency, $metadata zurueck.
Bei Fehler: Die Rueckgabestruktur mit generate_voronoi_pieces_internal() vergleichen, um fehlende Listenelemente oder falsche Typen zu identifizieren.
R/jigsawR_clean.R bearbeiten:
"<type>" zum valid_types-Vektor hinzufuegen"<type>" -> "<type>_")# In valid_types
valid_types <- c("rectangular", "hexagonal", "concentric", "voronoi", "snic", "<type>")
Erwartet: generate_puzzle(type = "<type>") wird ohne "unknown type"-Fehler akzeptiert.
Bei Fehler: Sicherstellen, dass der Typ-String exakt wie geschrieben zu valid_types hinzugefuegt wurde und dass die Parameterextraktion alle erforderlichen typspezifischen Argumente abdeckt.
R/unified_piece_generation.R bearbeiten:
generate_pieces_internal() hinzufuegen# Im switch/dispatch
"<type>" = generate_<type>_pieces_internal(params, seed)
Erwartet: Teile werden generiert, wenn der Typ dispatcht wird.
Bei Fehler: Bestaetigen, dass der Dispatch-Fall-String exakt mit dem Typnamen uebereinstimmt und dass generate_<type>_pieces_internal definiert und aus dem Puzzlemodul exportiert ist.
R/piece_positioning.R bearbeiten:
Positionierungs-Dispatch fuer den neuen Typ hinzufuegen. Die meisten Typen verwenden gemeinsame Positionierungslogik, aber einige benoetigen benutzerdefinierte Behandlung.
Erwartet: apply_piece_positioning() behandelt den neuen Typ ohne Fehler und Teile werden an korrekten Koordinaten platziert.
Bei Fehler: Pruefen, ob der neue Typ benutzerdefinierte Positionierungslogik benoetigt oder den gemeinsamen Positionierungspfad wiederverwenden kann. Einen Dispatch-Fall hinzufuegen, falls der Standardpfad nicht gilt.
R/unified_renderer.R bearbeiten:
render_puzzle_svg() hinzufuegenget_<type>_edge_paths()get_<type>_piece_name()Erwartet: SVG-Ausgabe wird fuer den neuen Typ mit korrekten Teileumrissen und Kantenpfaden generiert.
Bei Fehler: Sicherstellen, dass get_<type>_edge_paths() gueltige SVG-Pfaddaten zurueckgibt und get_<type>_piece_name() eindeutige Bezeichner fuer jedes Teil erzeugt.
R/adjacency_api.R bearbeiten:
Nachbar-Dispatch hinzufuegen, damit get_neighbors() und get_adjacency() fuer den neuen Typ funktionieren.
Erwartet: get_neighbors(result, piece_id) gibt korrekte Nachbarn fuer jedes Teil im Puzzle zurueck.
Bei Fehler: Pruefen, ob der Adjazenz-Dispatch die korrekte Datenstruktur zurueckgibt. Mit einem kleinen Raster testen und Nachbarschaftsbeziehungen manuell gegen die Geometrie verifizieren.
R/geom_puzzle.R bearbeiten:
geom_puzzle_<type>() unter Verwendung der make_puzzle_layer()-Factory erstellen:
#' @export
geom_puzzle_<type> <- function(mapping = NULL, data = NULL, ...) {
make_puzzle_layer(type = "<type>", mapping = mapping, data = data, ...)
}
Erwartet: ggplot() + geom_puzzle_<type>(aes(...)) rendert ohne Fehler.
Bei Fehler: Sicherstellen, dass make_puzzle_layer() den korrekten Typ-String erhaelt und dass die Geom-Funktion im NAMESPACE ueber @export exportiert wird.
R/stat_puzzle.R bearbeiten:
compute_panel() hinzufuegenErwartet: Der Stat-Layer berechnet die Puzzlegeometrie korrekt und erzeugt die erwartete Anzahl von Polygonen.
Bei Fehler: Pruefen, ob der compute_panel()-Dispatch-Fall einen Data Frame mit den erforderlichen Spalten (x, y, group, piece_id) zurueckgibt und ob die Standardparameter fuer den neuen Typ sinnvoll sind.
DESCRIPTION bearbeiten:
Suggests: hinzufuegen (falls externe Abhaengigkeit)Collate: aktualisieren, um die neue R-Datei einzuschliessen (alphabetische Reihenfolge)Erwartet: devtools::document() ist erfolgreich. Kein NOTE ueber nicht aufgelistete Dateien.
Bei Fehler: Pruefen, ob die neue R-Datei im Collate:-Feld in alphabetischer Reihenfolge aufgefuehrt ist und ob neue Suggests-Pakete korrekt mit Versionsbeschraenkungen geschrieben sind.
inst/config.yml bearbeiten:
Standards und Beschraenkungen fuer den neuen Typ hinzufuegen:
<type>:
grid:
default: [3, 3]
min: [2, 2]
max: [20, 20]
size:
default: [300, 300]
min: [100, 100]
max: [2000, 2000]
tabsize:
default: 20
min: 5
max: 50
# Typspezifische Parameter hier hinzufuegen
Erwartet: Konfiguration ist gueltiges YAML. Standardwerte erzeugen ein funktionierendes Puzzle bei Verwendung durch generate_puzzle().
Bei Fehler: YAML mit yaml::yaml.load_file("inst/config.yml") validieren. Sicherstellen, dass Standard-Grid- und Size-Werte ein sinnvolles Puzzle erzeugen (nicht zu klein oder zu gross).
inst/shiny-app/app.R bearbeiten:
Erwartet: Shiny-App zeigt den neuen Typ im Dropdown an und generiert Puzzles bei Auswahl.
Bei Fehler: Pruefen, ob der Typ zum choices-Argument des UI-Selektors hinzugefuegt wurde, ob das bedingte Panel fuer typspezifische Parameter conditionalPanel(condition = "input.type == '<type>'") verwendet und ob der serverseitige Handler die korrekten Parameter uebergibt.
tests/testthat/test-<type>-puzzles.R erstellen:
test_that("<type> puzzle generates correct piece count", { ... })
test_that("<type> puzzle respects seed reproducibility", { ... })
test_that("<type> adjacency returns valid neighbors", { ... })
test_that("<type> fusion merges pieces correctly", { ... })
test_that("<type> geom layer renders without error", { ... })
test_that("<type> SVG output is well-formed", { ... })
test_that("<type> config constraints are enforced", { ... })
Falls der Typ ein externes Paket benoetigt, Tests mit skip_if_not_installed() umschliessen.
Erwartet: Alle Tests bestehen. Keine Skips, es sei denn, eine externe Abhaengigkeit fehlt.
Bei Fehler: Jeden Integrationspunkt einzeln pruefen. Das haeufigste Problem sind fehlende Dispatch-Faelle -- grep -rn "switch\|valid_types" R/ ausfuehren, um alle Dispatch-Stellen zu finden.
generate_puzzle(type = "<type>") erzeugt gueltige Ausgabedevtools::test() besteht mit neuen Testsdevtools::check() gibt 0 Fehler, 0 Warnungen zurueckdevtools::document() ist erfolgreich (NAMESPACE aktualisiert)paste(a, b, sep = "-") erzeugen negative Teile-Labels Schluessel wie "1--1". Stattdessen "|" als Trennzeichen verwenden und mit "\\|" splitten.cat() fuer Ausgabe: Immer cli-Paket-Logging-Wrapper verwenden (log_info, log_warn, etc.)yaml::yaml.load_file("inst/config.yml") testengenerate-puzzle -- Den neuen Typ nach dem Aufsetzen testenrun-puzzle-tests -- Die vollstaendige Testsuite zur Verifizierung der Integration ausfuehrenvalidate-piles-notation -- Fusion mit dem neuen Typ testenwrite-testthat-tests -- Allgemeine Muster zum Schreiben von Testswrite-roxygen-docs -- Die neue Geom-Funktion dokumentierentesting
Launch all available agents in parallel waves for open-ended hypothesis generation on problems where the correct domain is unknown. Use when facing a cross-domain problem with no clear starting point, when single-agent approaches have stalled, or when diverse perspectives are more valuable than deep expertise. Produces a ranked hypothesis set with convergence analysis and adversarial refinement.
tools
Write integration tests for a Node.js CLI application using the built-in node:test module. Covers the exec helper pattern, output assertions, filesystem state verification, cleanup hooks, JSON output parsing, error case testing, and state restoration after destructive tests. Use when adding tests to an existing CLI, testing a new command, verifying adapter behavior across frameworks, or setting up CI for a CLI tool.
development
Screen a proposed trademark for conflicts and distinctiveness before filing. Covers trademark database searches (TMview, WIPO Global Brand Database, USPTO TESS), distinctiveness analysis using the Abercrombie spectrum, likelihood of confusion assessment using DuPont factors and EUIPO relative grounds, common law rights evaluation, and goods/services overlap analysis. Produces a conflict report with a risk matrix. Use before adopting a new brand name, logo, or slogan — distinct from patent prior art search, which uses different databases, legal frameworks, and analysis methods.
tools
Scaffold a new CLI command using Commander.js with options, action handler, three output modes (human-readable, quiet, JSON), and optional ceremony variant. Covers command naming, option design, shared context patterns, error handling, and integration testing. Use when adding a command to an existing Commander.js CLI, designing a new CLI tool from scratch, or standardizing command structure across a multi-command CLI.