Skip to content

v0.1.0 — Initial release

Choose a tag to compare

@bluejayA bluejayA released this 21 Apr 07:47
c718051

v0.1.0 Release Notes — devflow-k8s-deploy

Release Date: 2026-04-21
PR: #2
HEAD commit (feature branch): 608209f
Base commit (INCEPTION 종료): 558d8e8


요약

JVM(Kotlin + Java Spring Boot) 백엔드 프로젝트를 분석하여 Dockerfile + Kubernetes manifest를 자동 생성하는 Claude Code 플러그인 v0.1.0 초기 릴리즈. AIDLC devflow 워크플로우로 INCEPTION → CONSTRUCTION 전체 사이클을 거쳐 구축.

지표
개발 기간 2026-04-15 ~ 2026-04-21 (7일)
총 커밋 INCEPTION 종료 558d8e8 → PR HEAD 608209f (30+ 커밋)
Units 16개 완성 (6 phase)
Tests 613 passed, ruff/mypy strict clean
리뷰 사이클 Claude 내부 3-Stage × 16 unit + Codex 외부 1회
Critical 이슈 해결 5건 (Path Traversal, YAML injection, Redact, CLI entry, F-43 매트릭스)
기타 이슈 반영 Important 60+ 건

INCEPTION (2026-04-15 ~ 2026-04-17)

7단계 스테이지 흐름

스테이지 Depth 결과물
workspace-detection Greenfield 확정 (스캐폴딩만 존재: README / plugin.json / LICENSE / .gitignore)
brainstorming (side-skill) v0.1.0 scope lock: JVM 전용, 13 design axes 결정. Codex 독립 리뷰 반영
requirements-analysis Comprehensive 71 F-* (F-09 reserved) + 17 NFR + 13 assumptions + 8 risks
user-stories Comprehensive 22 stories (Must 17 / Should 4 / Could 1), 4 actors, 8 tech requirements
nfr-requirements GENERATE 17 NFR (개발자 도구/CLI + MVP 프로파일), 2건 조정 + NFR-SEC-05 신규
workflow-planning 3 접근법 생성 → A안 (설계 우선) 선택
application-design Comprehensive DETAIL 12개 컴포넌트 상세 설계 + 5-STEP 시퀀스 다이어그램 + 보조 산출물 7종

외부 검토 2회 (8건 반영)

  • 1차 LIST: 3-페르소나 + Codex 리뷰 → 컴포넌트 15→12 (NamespaceResolver/AutoFixLoop/ContainerBuildRunner 인라인 흡수)
  • 2차 DETAIL: spec-reviewer GO-WITH-CHANGES + Codex No-Go → NFR-SEC-05 픽스처 강화, 시그니처 정합, retry.py FixOutcome 구조체, F-56 pass-through, types.py 카탈로그, 서브유닛 매핑, F-* 카운트 정정(73→71) 등 전부 반영 후 양쪽 모두 GO 상태로 해소

핵심 결정 (CONSTRUCTION에서 변경 금지)

  • JVM 단독 스택 (Go/Python/React는 v0.2~v0.4)
  • generate-only 경계, NFR-SEC-05 CI allowlist 테스트로 회귀 방지 (런타임 가드 없음)
  • build opt-in (기본 skip)
  • Jinja2 템플릿 + Atomic write (SIGINT/SIGTERM 핸들러 + 7일 고아 GC)
  • 비개발자 친화: F-02a 한국어 의도 질문 + F-02b "? 도움말" + NFR-17 전 STEP 한국어 요약 + 원어 병기
  • summary.json validation.skipped[] 안전 계약 (CI degraded success 오인 방지)
  • Spring Boot /tmp + /var/log 자동 emptyDir (운영 503 방지)

CONSTRUCTION (2026-04-17 ~ 2026-04-21)

Phase 전환

  • 2026-04-17: INCEPTION → CONSTRUCTION 전환. -construction worktree 분리 유지.

units-generation (Standard depth)

  • 16 units / 6 phases 분해 (application-design §E 권장 SkillPipeline 서브유닛 분해 포함)
  • 각 unit의 책임 / 의존성 / 인터페이스 / 테스트 경계 정의

code-generation (SDD 모드, Standard depth, TDD)

  • Unit별 순차 TDD (RED-GREEN-REFACTOR) + 각 unit 3-Stage 리뷰(Spec/Quality/Security 병렬)
  • Critical/Important 이슈 반영 후 다음 unit 진입

Phase 1: 기반

# Unit Tests 커밋 Stage별 Verdict 요약
1 shared 35 → 96 cumulative (fileio/image_ref/text_safety 보강으로 후속 증가) 865ba2c Stage 1 PASS / 2&3 CONDITIONAL → Critical 3 + Important 3 반영

Phase 2: 독립 컴포넌트 (shared만 의존)

# Unit Tests 커밋 Stage별 Verdict 요약
2 stack_module 96 (61 신규) 22a1215 Stage 1 CONDITIONAL / 2 CONDITIONAL / 3 CONDITIONAL → Critical 1 + Important 7 + Minor 8 + ValueError 대칭 2 반영. StackDetectResult에 build_system/actuator_enabled 필드 추가. defusedxml + fileio 헬퍼 도입
3 template_renderer 122 (26 신규) 06b9e81 Stage 1 PASS / 2&3 CONDITIONAL → Important 4 반영 (StrictUndefined + sanitization boundary docstring)
4 config_loader 156 (34 신규) 95e9b60 Stage 1 PASS / 2&3 CONDITIONAL → Important 5 반영. ResolvedConfig.layer_raws 필드 추가(shared 보강). YAML bomb 방어 + symlink escape + OSError 구분
5 atomic_writer 177 (21 신규) 868ac9c Stage 1 PASS / 2 CONDITIONAL / 3 Critical 1 (symlink GC) → Critical 1 + Important 5 반영
6 k8s_validator 272 (95 신규) b91b841 init → Stage 1 FAIL (F-43 매트릭스 전면 불일치 — 내 prompt 실수) → ebcb0a9 재작업 → 4676e8b Important 6 F-43 매트릭스 정합 복구. CLI(--json/--skipped CSV) + 3단계 exit code. check_yaml_refs fileio 공용화. int 예외/None-chain 방어
7 kubectl_dry_runner 298 (26 신규) 84a31dd Stage 1 PASS(98) / 2 CONDITIONAL / 3 Issues Found → Important 5 반영. --dry-run=client allowlist + degraded skip + timeout 10s + manifest_dir 방어 + UnicodeDecodeError 방어

Phase 3: 통합 컴포넌트

# Unit Tests 커밋 Stage별 Verdict 요약
8 project_analyzer 348 (50 신규) 50f4b46 init + 612ec6a + 9697950 Kotlin DSL colon Stage 3 Critical 1 (Path Traversal via multi-module include '..') → Critical 1 + Important 9 반영
9 dockerfile_generator 372 (24 신규) 7073155 init + 030933c Important 5 multi-stage(JDK builder→JRE runner) + non-root + 캐시 레이어 + OCI image regex allowlist + 개행 인젝션 방어 + build_system 토큰 분해
10 manifest_generator 421 (49 신규) 32e6e91 init + baff9b2/0bd08ab/edb6352 Stage 3 Critical 2 (Service/SA 입력 검증 누락 + exposure whitelist 부재) → Critical 2 + Important 6 반영. _validate_image_tagscripts/_shared/image_ref.py 공용화 + TemplateRenderer trim_blocks/lstrip_blocks 추가
11 output_packager 476 (55 신규) 3c51dff init + 88d52c3/a86898c Stage 3 Critical 1 (BailOutContext redact 미적용 — types.py:290 명세 위반) → Critical 1 + Important 6 반영. redact_sensitive(Bearer/JWT/kubeconfig/token) + _shared/text_safety.py 공용화(Unit 9/10/11 공유)
12 pipeline_build_runner 506 (30 신규) d84896d init + ab08f73 Important 5 F-102 timeout 주입(+0=무제한) + BuildResult.stdout/stderr/exit_code 확장 + detect_engine Literal 좁힘 + fileio.is_within 재사용 + engine whitelist assert
13 pipeline_retry_loop 525 (19 신규) b01acbc init + 76c20a4 Minor 3 Stage 1 PASS(95) / 2 Approved(9) / 3 Secure — Critical/Important 0 (최초). Minor 3: application-design drift 교정 (exit_code <=2!= 1, F-42 정합) + _empty_report() factory

Phase 4: 오케스트레이터 (최대 unit)

# Unit Tests 커밋 Stage별 Verdict 요약
14 pipeline_orchestrator 559 (34 신규) 58281bf init + 4d3ce60 Important 6 5-STEP 전체 + PipelineDependencies DI + HelpCatalog 10 term + MessagePolicy + retry_loop + BailOutError 처리. _safe_section(config None-chain 방어) + prompt 응답 검증 + image_tag 검증 + _raise_bailout 공통화 + cast + _coerce_literal_or_default

Phase 5: SKILL + 문서

# Unit Tests 커밋 Stage별 Verdict 요약
15 skill_md_and_readme 564 (5 신규) 970308e init + 6f92ccc/6c9fd9d/eec406b Stage 2 Requires Changes(72, Critical 2) → Critical 2 + Important 5 반영. orchestrator.py CLI 진입점 추가 (main + argparse + _build_default_dependencies) + F-83 summary.json 스키마 정합 + 경로 모델 통일 + CI set -uo pipefail + registry.example.com

Phase 6: CI 보안

# Unit Tests 커밋 Stage별 Verdict 요약
16 security_tests 597 (33 신규) 5c7b5fc init + 6ad9b90/33036e2 Stage 3 CONDITIONAL(스펙 준수도 70%) → Important 5 반영 후 100%. autouse conftest + 글로벌 subprocess.run 패치 + 인젝션 토큰 14종(+\n/\r/\x00) + kubectl 7 forbidden verbs + 픽스처 자체 검증

build-and-test (Standard depth)

  • pytest 597 → 602 → 607 → 613 (E2E + Codex 수정 누적)
  • ruff / mypy strict clean
  • CLI smoke test: 실제 Spring Boot 샘플 프로젝트로 파이프라인 실행 → 6 파일 생성 성공

E2E smoke test 통합 버그 3건 (2026-04-21)

unit 단위 테스트(MagicMock 기반)가 catch하지 못한 통합 이슈:

버그 증상 커밋 해결
A ValueError: k8s DNS-1123 label 위반: namespace='None' 2cd4439 orchestrator 자동 모드가 config_loader.resolve_namespace() 미호출 → 4단계 조회(project→org→user_input→project_dir) 정식 사용. app_name None도 project_dir.name으로 DNS-1123 정규화 fallback
B BailOut 시 troubleshoot.md 생성됐지만 AtomicWriter cleanup으로 삭제됨 49db1ed AtomicWriter.bailout_commit() 추가 — staging_dir를 {output_dir}-failed-{timestamp}/로 atomic rename. 실패 상태의 Dockerfile + manifest + troubleshoot 전체 보존
C kubectl apply --dry-run=client가 OpenAPI 스키마 fetch 시도 (connection refused) 34578ad/47b5145/35cd057/cb1a7ad --validate=false 추가(6-tuple allowlist) + kubectl 1.35에서 unable to recognize 에러는 connection refused 패턴 감지로 graceful skip (F-56 degraded 확장)

Codex 외부 리뷰 (2026-04-21, /codex:review --scope branch)

Claude 내부 리뷰가 놓친 3건 추가 발견:

버그 Severity 커밋 해결
P1 Critical — Dockerfile builder image에 Maven/Gradle 없어 빌드 실패 7c2ff9e gradle:jdk21-alpine / maven:3.9-eclipse-temurin-21-alpine 공식 이미지로 교체. runner는 eclipse-temurin:21-jre-alpine 유지
P2 Important — TimeoutExpired text-mode에서 str.decode() 크래시 abcd8ae _maybe_decode() 헬퍼 (bytes/str/None 방어)
P3 Important — UserInputs.output_dir 무시 (prompt 모드) f9f95cf prompt 모드에서 inputs.output_dir 우선, 자동 모드는 method arg fallback

aidlc-finishing-a-development-branch

  • 옵션 B 선택: PR 생성
  • git push -u origin feature/v0.1.0-construction
  • gh pr create --base mainPR #2 생성
  • state: complete + Finishing Choice: B (PR pending) + PR URL 기록

주요 이슈 해결 전체 타임라인

시점 이슈 심각도 해결 위치
Unit 6 Stage 1 F-43 Rule ID 매트릭스 전면 불일치 FAIL 전면 재작업 (prompt 실수 복구)
Unit 8 Stage 3 Path Traversal via multi-module include '..' Critical 이름 validation + is_within(project_root)
Unit 10 Stage 3 YAML 인젝션 (Service/SA/exposure) Critical 2 공통 입력 검증 + exposure whitelist
Unit 11 Stage 3 BailOutContext redact 미적용 (Bearer/JWT/kubeconfig 누출) Critical redact_sensitive + text_safety 공용화
Unit 15 Stage 2 orchestrator.py CLI 진입점 부재 Critical main() + argparse + _build_default_dependencies
E2E A namespace='None' 문자열 통합 Critical config_loader.resolve_namespace() 정식 호출
E2E B BailOut troubleshoot 소실 통합 Critical AtomicWriter.bailout_commit()
E2E C kubectl --dry-run=client cluster 연결 시도 통합 Critical --validate=false + connection refused skip
Codex P1 Builder image 도구 부재 외부 Critical 공식 Gradle/Maven 이미지
Codex P2 TimeoutExpired decode 크래시 외부 Important _maybe_decode 방어
Codex P3 UserInputs.output_dir 무시 외부 Important prompt 모드 inputs 우선

application-design drift 교정 2회

개발 중 실제 구현과 spec 간 불일치 발견 → 문서 보정:

  1. Unit 13 리뷰 (2026-04-19) — commit 76c20a4

    • §1 / §B의 success_predicate=lambda r: r.exit_code <= 2r.exit_code != 1
    • F-42(0=PASS, 1=FAIL, 2=WARN) 기준으로 <= 2는 항상 True → retry 루프 무력화. 버그 수정.
  2. E2E 버그 C (2026-04-21) — commit 35cd057

    • §10 kubectl allowlist: 5-tuple → 6-tuple (--validate=false 추가)
    • cluster-less 환경에서 실제 동작하도록

공용 유틸 추출 (shared 보강 3회)

개발 중 여러 unit이 유사 로직을 반복 → 공용 유틸 승격:

유틸 파일 소유 unit 공유 unit
OCI image regex allowlist scripts/_shared/image_ref.py 신규 (Unit 10 리뷰 때) Unit 9 + Unit 10 + Unit 11 + Unit 12
reject_unsafe_chars + redact_sensitive scripts/_shared/text_safety.py 신규 (Unit 11 리뷰 때) Unit 9/10/11
read_text_limited + is_within + check_yaml_refs scripts/_shared/fileio.py 신규 (Unit 2 리뷰 때) + 공용화 (Unit 6) Unit 2/4/6/8/10/12

최종 산출물

devflow 산출물

  • devflow-docs/inception/ — requirements / user-stories / nfr-requirements / workflow-plan / application-design / units / brainstorming / workspace / references
  • devflow-docs/construction/build-and-test/ — build-instructions.md / test-instructions.md
  • devflow-docs/release/v0.1.0-release-notes.md (이 파일)
  • devflow-docs/devflow-state.md / session-summary.md / devflow-audit.md

코드 산출물

  • skills/devflow-k8s-deploy/SKILL.md — Claude 프롬프트 본문 + 도움말 카탈로그 10 term
  • README.md — 사용법 / 설정 스키마 / exit code / CI 통합 패턴
  • scripts/ (18 파일):
    • _shared/ (8): types.py / errors.py / retry.py / defaults.py / fileio.py / image_ref.py / text_safety.py / __init__.py
    • stacks/ (3): base.py / jvm.py / __init__.py
    • 단일 (6): template_renderer.py / config_loader.py / atomic_writer.py / validate_k8s.py / kubectl_dry_runner.py / dockerfile_generator.py / manifest_generator.py / project_analyzer.py / output_packager.py
    • pipeline/ (4): orchestrator.py / retry_loop.py / build_runner.py / __init__.py
  • templates/:
    • dockerfile/jvm.tmpl
    • manifest/{deployment,service,serviceaccount}.tmpl
  • tests/ (613 tests):
    • _shared/ / stacks/ / 개별 unit 테스트 / integration/ (conftest + boundary allowlist + E2E smoke)
  • pyproject.toml / .python-version / uv.lock

v0.1.0 제약 (Known Limitations)

  • JVM 스택 전용 (Kotlin + Spring Boot). Go/Python/React는 v0.2~v0.4 로드맵
  • Deployment만 생성 (StatefulSet 미지원 — stateful 앱 감지 시 경고만)
  • auto-fix 루프 v0.2+ 예정 — 현재는 수동 개입 안내
  • kubeconform 같은 offline validator 미도입 (v0.2+ 로드맵) — 현재는 --validate=false + connection refused graceful skip으로 우회
  • BuildPlan 일반화(JDK/JRE 2단계 가정 완화) — v0.2+ Go 추가 직전
  • 도움말 카탈로그 외부 파일(help/{lang}.yml) 분리 — v0.2+
  • NetworkPolicy / PodDisruptionBudget / PVC 미생성 — v0.2+

v0.2+ 백로그

devflow-docs/inception/application-design.md의 "v0.2+ 백로그" 섹션 통합 기록:

  • NetworkPolicy / PDB / Stateful 신뢰도 개선 / LB 비용 경고
  • BuildPlan 일반화 (Go/Python/React 확장 대비)
  • 도움말 카탈로그 외부화
  • StackModule validate_compat (호환성 검증 API)
  • auto-fix 루프 (retry_loop + fix_attempt 구현체)
  • F-91 시그니처 정합 (build_plan(detect_result)) requirements.md 동기화

다음 단계

  1. PR #2 리뷰 + 머지
  2. 머지 후 "devflow 재개해줘" 세션 시작 → using-devflow가 PR 머지 상태 자동 확인 → Phase completefinished 전환 + -construction worktree 제거 안내
  3. v0.1.0 Git tag (옵션)
  4. v0.2+ 로드맵 INCEPTION 착수 (Go 스택 추가가 1순위)

참고 문서