원클릭으로
project-core
Always-on repository baseline for boundaries, precedence, verification, and AI knowledge maintenance.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Always-on repository baseline for boundaries, precedence, verification, and AI knowledge maintenance.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Use when changing Axum solver routes, HTTP contracts, limits, scan sessions, or the matching web solver client.
Use when changing Rust puzzle state, moves, notation, scrambles, or validation.
Use when extracting React components, changing shared primitives, composing pages, or adding Storybook surfaces.
Use when changing solve inputs, limits, validation, scanner review controls, or form submission behavior.
Use when changing routes, locales, SEO metadata, static generation, hydration, public SEO assets, or language routing.
Use when changing React state, hooks, stores, async workflow ownership, or visualization synchronization.
| name | project-core |
| description | Always-on repository baseline for boundaries, precedence, verification, and AI knowledge maintenance. |
Generated from ai/registry.json. Do not edit manually.
Canonical skill: ../../../ai/skills/project-core.md.
Referenced context:
../../../ai/rules/repository-rules.md../../../ai/rules/testing-rules.md../../../ai/rules/ai-rules.md../../../ai/architecture/project-architecture.md../../../ai/architecture/ai-knowledge-system.md../../../ai/glossary/cube-terms.mdThis file is compiled from canonical AI knowledge files. Edit canonical files under ai, then run npm run ai:sync.
ai/skills/project-core.mdUse this skill as the always-on repository baseline for AI-assisted changes anywhere in the Rubik's Cube solver.
Keep every change aligned with Rust engine boundaries, cube domain language, current project priorities, verification flow, and AI knowledge maintenance rules.
ai/rules/repository-rules.mdai/rules/testing-rules.mdai/rules/ai-rules.mdai/architecture/project-architecture.mdai/architecture/ai-knowledge-system.mdai/glossary/cube-terms.mddocs/project-plan.md, nearby code, tests, and source docs before changing behavior.main.npm run ai:check after AI knowledge changes.cargo test -p cube-engine after engine changes when Rust is installed.ai/rules/repository-rules.mdGlobal rules for changes anywhere in this repository.
docs/project-plan.md, nearby code, and current tests before changing behavior.docs/project-plan.md and the capabilities already present in code.npm run ai:check, npm run api:test, npm run build, and cargo test so paths and workspaces resolve consistently.main for task changes.web, use Biome through workspace scripts for linting and formatting; do not add ESLint or Prettier configs unless explicitly requested.cargo clippy --all-targets --all-features -- -D warnings from the repository root when the Rust toolchain is available.ai.npm run dev for the default Docker development runtime, live:deploy for production Docker deploys after main changes, live:restart only when the checkout is already current, and live:start when the Cloudflare tunnel should be started after a production deploy.BaseMove, BaseState, BasePuzzle, or inheritance-style puzzle abstraction..env files, raw secrets, API tokens, model artifacts with private data, or local solver output that is not intended for source control.main; create a task branch first and do not bypass branch-protection hooks with --no-verify..agents/skills, .opencode/skills, .cursor/rules, or .github/instructions AI route files manually.if/return, a named helper, or a small lookup table instead.docker restart or start an old production container to deploy code changes; production code changes require a Docker rebuild through live:deploy, live:restart, prod:deploy, prod:restart, or the lower-level docker:up wrapper.dev, dev:start, dev:restart, dev:stop, dev:status, dev:logs, and dev:health: default Docker development runtime on ports 5173, 8788, and 8791.dev:local:prepare, dev:local, dev:local:status, and dev:local:stop: non-Docker fallback runtime for development/debugging on ports 5173, 8788, and 8791.live:deploy: preferred production update command after PRs merge; switches to main, pulls origin/main, rebuilds/recreates Docker production, waits for http://127.0.0.1:8787/health, and prints status.live:restart: rebuilds/recreates Docker production without pulling Git; use when the checkout is already current.live:health, live:status, live:logs, and live:stop: production health/status/log/stop helpers.live:start: deploys production with live:deploy, then starts cloudflared tunnel run --token "$CLOUDFLARED_TUNNEL_TOKEN" for speedcube.com.br.live:tunnel: starts only the Cloudflare tunnel and assumes production Docker is already healthy.prod:*, docker:up, docker:down, docker:restart, docker:status, and docker:logs: lower-level rubiks-prod Compose wrappers; prefer live:* unless you specifically need raw Compose behavior.docker:dev and docker:dev:down: compatibility wrappers for Docker dev; prefer dev:*.docker:train and docker:train-gpu: scanner training containers, separate from normal runtime.npm run ai:check.cargo test first, then cargo test -p cube-engine or cargo test when Rust is installed.npm run api:test or the relevant cargo test -p rubiks-cube-solver-api target.npm run build and npm run lint -w @rubiks-cube-solver/web when dependencies are installed.cargo clippy --all-targets --all-features -- -D warnings before committing, pushing, or opening/updating the PR, or report the environment blocker if it cannot run.ai/rules/testing-rules.mdTesting rules for this repository.
crates/api behavior changes.describe, it, expect, vi.fn, and vi.spyOn for web unit and component tests.web tests in __tests__/ folders beside the source area they cover.__tests__ directory, including the established root, client, and domain-level locations; use shared helpers under apps/web/src/test.apps/web/src/core tests under apps/web/src/core/<category>/__tests__/<name>.test.ts.web coverage thresholds at 90% for statements, branches, functions, and lines..only in committed test files.jest.mock patterns in Vitest tests.web tests as loose sibling *.test.ts(x) files when a nearby __tests__/ folder is available.apps/web/src/test/render.tsx or apps/web/src/test/api.ts already covers the setup.selectOption() or locator('option') for Radix Select controls; use helpers under tests/e2e/select-helpers.ts.cargo test -p cube-engine.npm run api:test or cargo test -p rubiks-cube-solver-api.cargo test.npm run build and npm run lint -w @rubiks-cube-solver/web.npm run test -w @rubiks-cube-solver/web.npm run test:coverage -w @rubiks-cube-solver/web.npm run storybook:build -w @rubiks-cube-solver/web.npm run test:e2e after the API, web app, and pruning-table prerequisites are available.npm run test:e2e:smoke for product/responsive/timer smoke, npm run test:e2e:scan for serial manual scan coverage, and npm run test:e2e:full for the complete non-heavy suite.npm run product:gate for release-level or cross-boundary validation.npm run ai:check.ai/rules/ai-rules.mdRules for maintaining the AI knowledge base itself.
ai as the source of truth for AI guidance.rules, architecture, and glossary.skills task-oriented: each skill should orchestrate references instead of duplicating them.ai/registry.json.references in ai/registry.json for every rule, architecture, or glossary file a skill depends on.## Read First list identical to its registry.json references list.npm run ai:sync after changing canonical skills, registry entries, or referenced knowledge files.npm run ai:check before finishing AI knowledge changes.architecture.rules.alwaysApply: true outside the explicitly global project-core skill.npm run ai:sync.npm run ai:sync.ai/architecture/project-architecture.mdThe target is a Rubik's Cube solver with a Rust engine, search algorithms, heuristics, pattern databases, a native HTTP API, optional scanner support, and a modern web visualization.
crates/cube-engine: Rust crate for cube representation, moves, notation, scramble handling, search, and heuristics.crates/api: Axum HTTP API around the Rust engine and generated pruning-table artifacts.apps/web: Vite React app built as static HTML for indexable routes, hydrated with React, then operated as an SPA.apps/wca-data: independent NestJS/Fastify workspace with a PostgreSQL-backed public WCA reference API and a separate import worker.packages/rubiks-cube: active private workspace for puzzle-specific Three.js visualization and playback adapters.scanner: Python scanner contracts, FastAPI runtime, and offline scanner training/evaluation tooling.ai: canonical AI knowledge base and route generation system.docs/project-plan.md: current technical direction, implementation rules, and puzzle boundaries.cube-engine binaries and loaded by crates/api.npm run dev to build/recreate the rubiks-dev Compose project, wait for health, and serve web/API/vision on ports 5173, 8788, and 8791.dev:local:prepare and dev:local for development/debugging when Docker is not desired.rubiks-prod Compose project. Use live:deploy after merges to pull origin/main, rebuild/recreate containers, wait for app health, and print status.live:restart only when the checkout is already current and containers need to be rebuilt/recreated.live:start runs production deploy first and then starts the Cloudflare tunnel for speedcube.com.br with cloudflared tunnel run --token "$CLOUDFLARED_TUNNEL_TOKEN". live:tunnel runs only the tunnel command and assumes production Docker is already healthy.BaseMove, BaseState, BasePuzzle, or inheritance-style puzzle hierarchy.crates/wasm: optional future wasm-bindgen bridge around the Rust engine if browser-local solving becomes a concrete product requirement./api/wca-data/v1 contract belong to apps/wca-data, not the Rust solver API.ai/architecture/ai-knowledge-system.mdai is the canonical AI knowledge base for this repository.
rules: reusable constraints, conventions, and anti-patterns.architecture: system boundaries and integration points.glossary: cube and solver vocabulary.skills: task-oriented workflows that reference the other layers.Resolve contradictions in this order:
docs/adr, with newer decisions superseding older decisions on the same subject.ai/architecture.ai/rules.ai/skills.Executable behavior is not permission to preserve an accidental bug. When a task intentionally changes a contract, update the executable contract, affected ADR or architecture, rules, and routes in the same change. Skills only orchestrate references and verification.
Normative terms follow RFC-style strength: MUST is required, SHOULD is the default and needs a documented concrete reason to deviate, and MAY is optional. Exceptions should be narrow, identify the affected boundary, and include verification.
ai/registry.json defines routed skills.
ai/registry.schema.json documents the registry shape and the sync script enforces the same structural constraints during npm run ai:check.
Each skill entry defines the canonical skill file, its reusable references, generated route paths, and tool-specific matching metadata. The ## Read First list in the canonical skill must match the registry references list exactly and in the same order.
scripts/ai/sync-routes.mjs compiles each canonical skill and its references into tool routes:
.opencode/skills/<skill-name>/SKILL.md..agents/skills/<skill-name>/SKILL.md..cursor/rules/<skill-name>.mdc..github/instructions/<skill-name>.instructions.md.Generated routes must not be edited manually.
npm run ai:sync writes stale routes and removes orphan generated routes. npm run ai:check verifies registry shape, reference files, generated content, route collisions, Read First parity, and registered canonical skill files.
ai/glossary/cube-terms.mdA physical movable piece of the cube. The core engine tracks cubies rather than face colors as the primary model.
A cubie with three stickers. A 3x3 cube has eight corners.
A cubie with two stickers. A 3x3 cube has twelve edges.
Which cubie occupies each position.
How a cubie is twisted or flipped in its current position.
A face turn such as R, U, R', or U2.
A sequence of moves applied from the solved state to produce a valid cube state.
An estimate of distance from a cube state to the solved state.
A heuristic that never overestimates the true distance to the solved state.
A precomputed lookup table mapping partial cube states to minimum solution distances.
A facelet string format commonly used by two-phase solvers. It can be an adapter format, not the primary engine model.