executing-plans
executing-plans
Use when executing an implementation plan in the current session as the implementer yourself — your human partner chose inline execution, or no subagent tool is available
add-puzzle-typeCrear la estructura para un nuevo tipo de rompecabezas en los mas de 10 puntos de integracion del pipeline en jigsawR. Crea el modulo central del rompecabezas, lo conecta al pipeline unificado (generacion, posicionamiento, renderizado, adyacencia), agrega capas geom/stat de ggpuzzle, actualiza DESCRIPTION y config.yml, extiende la aplicacion Shiny y crea un…
Independent GitHub snapshot · Automated classification · Original documentation governs
Crear la estructura para un nuevo tipo de rompecabezas en todos los puntos de integracion del pipeline en jigsawR.
"triangular")Crear R/<type>_puzzle.R con la funcion interna de generacion:
#' Generate <type> puzzle pieces (internal)
#' @noRd
generate_<type>_pieces_internal <- function(params, seed) {
# 1. Initialize RNG state
# 2. Generate piece geometries
# 3. Build edge paths (SVG path data)
# 4. Compute adjacency
# 5. Return list: pieces, edges, adjacency, metadata
}
Seguir el patron en R/voronoi_puzzle.R o R/snic_puzzle.R para la estructura.
Esperado: La funcion retorna una lista con $pieces, $edges, $adjacency, $metadata.
En caso de fallo: Comparar la estructura de retorno contra generate_voronoi_pieces_internal() para identificar elementos de lista faltantes o tipos incorrectos.
Editar R/jigsawR_clean.R:
"<type>" al vector valid_types"<type>" -> "<type>_")# In valid_types
valid_types <- c("rectangular", "hexagonal", "concentric", "voronoi", "snic", "<type>")
Esperado: generate_puzzle(type = "<type>") es aceptado sin error de "tipo desconocido".
En caso de fallo: Verificar que la cadena del tipo se agrego a valid_types exactamente como se escribe, y que la extraccion de parametros cubre todos los argumentos requeridos especificos del tipo.
Editar R/unified_piece_generation.R:
generate_pieces_internal()# In the switch/dispatch
"<type>" = generate_<type>_pieces_internal(params, seed)
Esperado: Las piezas se generan cuando se despacha el tipo.
En caso de fallo: Confirmar que la cadena del caso de despacho coincide exactamente con el nombre del tipo y que generate_<type>_pieces_internal esta definida y exportada desde el modulo del rompecabezas.
Editar R/piece_positioning.R:
Agregar despacho de posicionamiento para el nuevo tipo. La mayoria de los tipos usan logica de posicionamiento compartida, pero algunos necesitan manejo personalizado.
Esperado: apply_piece_positioning() maneja el nuevo tipo sin errores y las piezas se colocan en las coordenadas correctas.
En caso de fallo: Verificar si el nuevo tipo necesita logica de posicionamiento personalizada o puede reutilizar la ruta de posicionamiento compartida. Agregar un caso de despacho si la ruta predeterminada no aplica.
Editar R/unified_renderer.R:
render_puzzle_svg()get_<type>_edge_paths()get_<type>_piece_name()Esperado: Se genera salida SVG para el nuevo tipo con contornos de piezas y rutas de bordes correctos.
En caso de fallo: Verificar que get_<type>_edge_paths() retorna datos de ruta SVG validos y get_<type>_piece_name() produce identificadores unicos para cada pieza.
Editar R/adjacency_api.R:
Agregar despacho de vecinos para que get_neighbors() y get_adjacency() funcionen para el nuevo tipo.
Esperado: get_neighbors(result, piece_id) retorna los vecinos correctos para cualquier pieza del rompecabezas.
En caso de fallo: Verificar que el despacho de adyacencia retorna la estructura de datos correcta. Probar con una cuadricula pequena y verificar manualmente las relaciones de vecindad contra la geometria.
Editar R/geom_puzzle.R:
Crear geom_puzzle_<type>() usando la fabrica make_puzzle_layer():
#' @export
geom_puzzle_<type> <- function(mapping = NULL, data = NULL, ...) {
make_puzzle_layer(type = "<type>", mapping = mapping, data = data, ...)
}
Esperado: ggplot() + geom_puzzle_<type>(aes(...)) se renderiza sin error.
En caso de fallo: Verificar que make_puzzle_layer() recibe la cadena de tipo correcta y que la funcion geom esta exportada en el NAMESPACE via @export.
Editar R/stat_puzzle.R:
compute_panel()Esperado: La capa stat calcula la geometria del rompecabezas correctamente y produce el numero esperado de poligonos.
En caso de fallo: Verificar que el caso de despacho de compute_panel() retorna un data frame con las columnas requeridas (x, y, group, piece_id) y que los parametros predeterminados son razonables para el nuevo tipo.
Editar DESCRIPTION:
Suggests: (si es dependencia externa)Collate: para incluir el nuevo archivo R (orden alfabetico)Esperado: devtools::document() tiene exito. Sin NOTE sobre archivos no listados.
En caso de fallo: Verificar que el nuevo archivo R esta listado en el campo Collate: en orden alfabetico y que cualquier nuevo paquete en Suggests esta escrito correctamente con restricciones de version.
Editar inst/config.yml:
Agregar valores predeterminados y restricciones para el nuevo tipo:
<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
# Add type-specific params here
Esperado: La configuracion es YAML valido. Los valores predeterminados producen un rompecabezas funcional cuando son usados por generate_puzzle().
En caso de fallo: Validar YAML con yaml::yaml.load_file("inst/config.yml"). Asegurar que los valores predeterminados de grid y size producen un rompecabezas razonable (ni demasiado pequeno ni demasiado grande).
Editar inst/shiny-app/app.R:
Esperado: La aplicacion Shiny muestra el nuevo tipo en el desplegable y genera rompecabezas cuando se selecciona.
En caso de fallo: Verificar que el tipo se agrego al argumento choices del selector UI, que el panel condicional para parametros especificos del tipo usa conditionalPanel(condition = "input.type == '<type>'"), y que el manejador del servidor pasa los parametros correctos.
Crear tests/testthat/test-<type>-puzzles.R:
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", { ... })
Si el tipo requiere un paquete externo, envolver las pruebas con skip_if_not_installed().
Esperado: Todas las pruebas pasan. Sin omisiones a menos que falte una dependencia externa.
En caso de fallo: Verificar cada punto de integracion individualmente. El problema mas comun es la falta de casos de despacho -- ejecutar grep -rn "switch\|valid_types" R/ para encontrar todas las ubicaciones de despacho.
generate_puzzle(type = "<type>") produce salida validadevtools::test() pasa con las nuevas pruebasdevtools::check() retorna 0 errores, 0 advertenciasdevtools::document() tiene exito (NAMESPACE actualizado)paste(a, b, sep = "-"), las etiquetas de pieza negativas producen claves como "1--1". Usar separador "|" y dividir con "\\|".cat() para salida: Siempre usar envoltorios de registro del paquete cli (log_info, log_warn, etc.)yaml::yaml.load_file("inst/config.yml")generate-puzzle -- probar el nuevo tipo despues de crearlorun-puzzle-tests -- ejecutar la suite completa de pruebas para verificar la integracionvalidate-piles-notation -- probar fusion con el nuevo tipowrite-testthat-tests -- patrones generales de escritura de pruebaswrite-roxygen-docs -- documentar la nueva funcion geom