Files
networkSetup/.claude/skills/project-model-change/SKILL.md
T
jychoi4andClaude Opus 5.5 905e6d4eaa chore: add Claude Code guidelines, rules and skills
- CLAUDE.md: product principles, crate layering, common commands, commits.
- .claude/rules: common, Rust, frontend, Tauri IPC, docs and security rules.
- .claude/skills: check, add-tauri-command, project-model-change,
  change-record, msix-integration-test, backlog-status.

Refs #16

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 11:09:05 +09:00

3.3 KiB

name, description
name description
project-model-change .isproj(JSON v2) 프로젝트 모델이나 local 설정 모델을 바꿀 때 package-domain DTO, 검증, manifest, JSON Schema 파일, TypeScript 타입, fixture·예제 파일, 설계 문서 13번을 빠짐없이 동기화한다. "필드 추가", "프로젝트 형식", "schema", "DTO 변경", "local.json 필드"에 사용한다.

프로젝트 모델 변경

Project(.isproj)와 LocalConfig(.isproj.local.json)는 src/crates/package-domain/src/lib.rs에 정의되며 deny_unknown_fields로 엄격하게 읽는다. 호환 정책: 필드 추가는 #[serde(default)]로 기존 파일을 열 수 있게, 필드 제거는 자동 변환 없이 거부. schemaVersion은 2를 유지한다.

먼저 판단할 것

  • 이 값이 공유 가능한 제품 설정(→ Project)인가, 이 PC에만 있는 경로·인증서(→ LocalConfig)인가. 절대 경로, 지문, SDK 위치는 local로.
  • 비밀(개인 키, 비밀번호, 토큰)이면 어디에도 저장하지 않는다.
  • 1차 MSIX 범위 밖(EXE, Store, bundle)이면 필드를 추가하지 않고 거부 오류를 유지한다.

동기화 체크리스트

  1. DTO — lib.rs. 단순 구조체는 model!, 기본값이 필요하면 직접 선언 + #[serde(default)]. JsonSchema derive 유지.
  2. 검증 — package_domain::validate()에 check(valid, "Code", "field.path", "메시지") 추가. 오류 코드는 PascalCase 한 단어. 의미 검증(경로 안전성·버전 형식·대상)도 여기.
  3. manifest — package_domain::manifest()가 영향을 받으면 XML 이스케이프를 거쳐 출력. inspect_manifest(infra)에서 역추출 검증도 추가.
  4. 계획 고정 — 빌드 결과에 영향을 주는 값이면 Plan에 포함되어 자동 고정된다(project 전체가 들어감). local 값이면 Plan에 명시 필드 추가 + pack() 전 재검사.
  5. JSON Schema 파일 — src/에서:
cargo run -q -p package-builder -- schema | Out-File -Encoding utf8 schemas/package-project.schema.json

생성 후 git diff schemas/로 의도한 변경만 있는지 확인한다. 줄 끝은 LF.

  1. TypeScript 타입 — src/apps/desktop/src/main.ts의 Project/Document type. 선택 필드는 field?: T | null.
  2. UI — 편집 가능한 값이면 해당 탭의 field()/select() 추가. JSON 편집기만으로 다루는 값이면 README에 그렇게 적는다.
  3. fixture·예제 — src/fixtures/InstallerProject.isproj, docs/code-design/examples/msix.isproj, src/scripts/New-Fixtures.ps1, src/crates/package-infra/tests/workflow.rs의 fixture(). create_project()의 기본값도 확인.
  4. 테스트 — project_format.rs에 (a) 필드 없는 기존 파일이 열림, (b) 라운드트립 저장, (c) 잘못된 값 거부 세 가지. 제거한 필드는 "unknown field" 거부 테스트.
  5. 문서 — docs/code-design/13-isproj-project-format.md(형식), 02-project-model.md(모델 표), src/README.md(사용자 절차). change-record 스킬로 변경 기록.
  6. check 스킬.

금지

  • #[serde(alias)]나 마이그레이션 코드로 옛 이름을 조용히 받아들이기.
  • deny_unknown_fields 제거.
  • 스키마 파일을 손으로 편집하기.
  • schemaVersion을 올리기(사용자 결정 필요).