selfish-pipeline 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,63 @@
1
+ #!/bin/bash
2
+ # Session Start Hook: 세션 시작 시 파이프라인 상태 복원
3
+ # resume/compact 후에도 진행 상태를 잃지 않도록 컨텍스트 주입
4
+ #
5
+ # Gap 해결: OMC의 세션 연속성 → 물리적 스크립트로 강제
6
+
7
+ PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(pwd)}"
8
+ # Auto-memory 디렉토리를 프로젝트 경로에서 동적 파생
9
+ PROJECT_PATH=$(cd "$PROJECT_DIR" 2>/dev/null && pwd || echo "$PROJECT_DIR")
10
+ ENCODED_PATH=$(echo "$PROJECT_PATH" | sed 's|/|-|g')
11
+ MEMORY_DIR="$HOME/.claude/projects/$ENCODED_PATH/memory"
12
+ CHECKPOINT="$MEMORY_DIR/checkpoint.md"
13
+ PIPELINE_FLAG="$PROJECT_DIR/.claude/.selfish-active"
14
+
15
+ OUTPUT=""
16
+
17
+ # 1. 활성 파이프라인 확인
18
+ if [ -f "$PIPELINE_FLAG" ]; then
19
+ FEATURE=$(cat "$PIPELINE_FLAG")
20
+ OUTPUT="[SELFISH PIPELINE ACTIVE] Feature: $FEATURE"
21
+
22
+ # tasks.md 진행 상태
23
+ TASKS_FILE="$PROJECT_DIR/specs/$FEATURE/tasks.md"
24
+ if [ -f "$TASKS_FILE" ]; then
25
+ DONE=$(grep -cE '\[x\]' "$TASKS_FILE" 2>/dev/null || echo 0)
26
+ TOTAL=$(grep -cE '\[(x| )\]' "$TASKS_FILE" 2>/dev/null || echo 0)
27
+ OUTPUT="$OUTPUT | Tasks: $DONE/$TOTAL"
28
+ fi
29
+
30
+ # CI 통과 여부
31
+ CI_FLAG="$PROJECT_DIR/.claude/.selfish-ci-passed"
32
+ if [ -f "$CI_FLAG" ]; then
33
+ OUTPUT="$OUTPUT | Last CI: PASSED ($(cat "$CI_FLAG"))"
34
+ fi
35
+ fi
36
+
37
+ # 2. 체크포인트 존재 확인
38
+ if [ -f "$CHECKPOINT" ]; then
39
+ CHECKPOINT_DATE=$(grep '자동 생성:' "$CHECKPOINT" 2>/dev/null | head -1 | sed 's/.*자동 생성: //')
40
+ if [ -n "$CHECKPOINT_DATE" ]; then
41
+ if [ -n "$OUTPUT" ]; then
42
+ OUTPUT="$OUTPUT | Checkpoint: $CHECKPOINT_DATE"
43
+ else
44
+ OUTPUT="[CHECKPOINT EXISTS] Date: $CHECKPOINT_DATE — Run /selfish.resume to restore"
45
+ fi
46
+ fi
47
+ fi
48
+
49
+ # 3. Safety tag 확인
50
+ BRANCH=$(cd "$PROJECT_DIR" 2>/dev/null && git branch --show-current 2>/dev/null)
51
+ HAS_SAFETY_TAG=$(cd "$PROJECT_DIR" 2>/dev/null && git tag -l 'selfish/pre-*' 2>/dev/null | head -1)
52
+ if [ -n "$HAS_SAFETY_TAG" ]; then
53
+ if [ -n "$OUTPUT" ]; then
54
+ OUTPUT="$OUTPUT | Safety tag: $HAS_SAFETY_TAG"
55
+ fi
56
+ fi
57
+
58
+ # 출력 (stdout → Claude 컨텍스트에 주입됨)
59
+ if [ -n "$OUTPUT" ]; then
60
+ echo "$OUTPUT"
61
+ fi
62
+
63
+ exit 0
@@ -0,0 +1,34 @@
1
+ #!/bin/bash
2
+ # PostToolUse Hook: 파일 변경 추적
3
+ # Edit/Write 도구 사용 후 변경된 파일을 기록
4
+ # CI 게이트에서 어떤 파일이 변경되었는지 추적
5
+
6
+ PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(pwd)}"
7
+ PIPELINE_FLAG="$PROJECT_DIR/.claude/.selfish-active"
8
+
9
+ # jq 필수 의존성 확인
10
+ if ! command -v jq &> /dev/null; then
11
+ exit 0
12
+ fi
13
+ CHANGES_LOG="$PROJECT_DIR/.claude/.selfish-changes.log"
14
+ CI_FLAG="$PROJECT_DIR/.claude/.selfish-ci-passed"
15
+
16
+ # 파이프라인 비활성이면 → 스킵
17
+ if [ ! -f "$PIPELINE_FLAG" ]; then
18
+ exit 0
19
+ fi
20
+
21
+ # stdin에서 tool input 파싱
22
+ INPUT=$(cat)
23
+ FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty' 2>/dev/null)
24
+
25
+ if [ -n "$FILE_PATH" ]; then
26
+ # 변경 로그에 추가 (중복 제거)
27
+ echo "$FILE_PATH" >> "$CHANGES_LOG"
28
+ sort -u -o "$CHANGES_LOG" "$CHANGES_LOG"
29
+
30
+ # 파일이 변경되었으므로 CI 결과 무효화
31
+ rm -f "$CI_FLAG"
32
+ fi
33
+
34
+ exit 0
@@ -0,0 +1,107 @@
1
+ # Selfish Configuration
2
+
3
+ > 이 파일은 selfish 커맨드 시스템의 프로젝트별 설정을 정의한다.
4
+ > 모든 selfish 커맨드는 이 파일을 참조하여 프로젝트별 동작을 결정한다.
5
+
6
+ ## CI Commands
7
+
8
+ ```yaml
9
+ ci: "yarn ci" # 전체 CI (lint + typecheck + build)
10
+ typecheck: "yarn typecheck" # 타입 체크만
11
+ lint: "yarn lint" # 린트만
12
+ lint_fix: "yarn lint:fix" # 린트 자동 수정
13
+ gate: "yarn typecheck && yarn lint" # Phase 게이트 (implement 중 반복 실행)
14
+ test: "yarn test" # 테스트
15
+ ```
16
+
17
+ ## Architecture
18
+
19
+ ```yaml
20
+ style: "FSD" # Feature-Sliced Design
21
+ layers: # 상위 → 하위 순서
22
+ - app
23
+ - views
24
+ - widgets
25
+ - features
26
+ - entities
27
+ - shared
28
+ - core
29
+ import_rule: "상위 계층은 하위 계층만 import 가능 (역방향 불가)"
30
+ segments:
31
+ - api # API 관련 로직 (React Query hooks)
32
+ - model # 상태 관리 및 타입 정의
33
+ - ui # UI 컴포넌트
34
+ - lib # 유틸리티 함수
35
+ - config # 설정 및 상수
36
+ - hooks # 커스텀 훅
37
+ path_alias: "@/* → ./src/*"
38
+ ```
39
+
40
+ ## Framework
41
+
42
+ ```yaml
43
+ name: "Next.js 14"
44
+ runtime: "App Router"
45
+ client_directive: "'use client'"
46
+ client_directive_rule: >
47
+ useState/useEffect/useRef 등 클라이언트 훅을 사용하는 파일은
48
+ 반드시 'use client' 선언 필요. barrel export(index.ts)를 통해
49
+ 서버 컴포넌트에서 간접 import 되는 경우 특히 주의.
50
+ server_client_boundary: true # 서버/클라이언트 경계가 존재
51
+ ```
52
+
53
+ ## Code Style
54
+
55
+ ```yaml
56
+ language: "TypeScript"
57
+ strict_mode: true
58
+ type_keyword: "type" # interface 대신 type 사용
59
+ import_type: true # import type { ... } 사용
60
+ component_style: "PascalCase"
61
+ props_position: "above component" # Props 타입은 컴포넌트 위에 정의
62
+ handler_naming: "handle[Event]"
63
+ boolean_naming: "is/has/can[State]"
64
+ constant_naming: "UPPER_SNAKE_CASE"
65
+ any_policy: "최소화 (strict mode 준수)"
66
+ ```
67
+
68
+ ## State Management
69
+
70
+ ```yaml
71
+ global_state: "Zustand"
72
+ server_state: "React Query v5"
73
+ local_state: "Context API (use-context-selector)"
74
+ store_location: "model/ 세그먼트"
75
+ query_location: "api/ 세그먼트"
76
+ ```
77
+
78
+ ## Styling
79
+
80
+ ```yaml
81
+ framework: "Tailwind CSS v3"
82
+ ```
83
+
84
+ ## Testing
85
+
86
+ ```yaml
87
+ framework: "Jest + React Testing Library"
88
+ ```
89
+
90
+ ## Project-Specific Risks
91
+
92
+ > Plan의 RISK Critic에서 반드시 점검할 프로젝트 고유 위험 패턴
93
+
94
+ 1. barrel export 체인에서 `'use client'` 누락 → build 실패
95
+ 2. import 순서 위반 (ESLint FSD import order)
96
+ 3. 순환 참조 (shared/ui 내부에서 barrel import 사용 시)
97
+ 4. FSD 계층 역방향 import
98
+ 5. `as any` 잔류 → typecheck 우회
99
+
100
+ ## Mini-Review Checklist
101
+
102
+ > Implement Phase 게이트의 Mini-Review에서 각 파일에 대해 점검할 항목
103
+
104
+ 1. `'use client'` 필요 여부 (클라이언트 훅 사용 시 필수)
105
+ 2. FSD 계층 위반 (import 경로 N개 중 위반 M개)
106
+ 3. 프로젝트 패턴 (`type` vs `interface`, naming, import order)
107
+ 4. 미사용 코드 (미사용 import, 빈 export, dead code)
@@ -0,0 +1,90 @@
1
+ # Selfish Configuration
2
+
3
+ > 이 파일은 selfish 커맨드 시스템의 프로젝트별 설정을 정의한다.
4
+ > 모든 selfish 커맨드는 이 파일을 참조하여 프로젝트별 동작을 결정한다.
5
+ > 각 섹션을 프로젝트에 맞게 수정하세요.
6
+
7
+ ## CI Commands
8
+
9
+ ```yaml
10
+ ci: "npm run ci" # 전체 CI (lint + typecheck + build)
11
+ typecheck: "npm run typecheck" # 타입 체크만
12
+ lint: "npm run lint" # 린트만
13
+ lint_fix: "npm run lint:fix" # 린트 자동 수정
14
+ gate: "npm run typecheck && npm run lint" # Phase 게이트 (implement 중 반복 실행)
15
+ test: "npm test" # 테스트
16
+ ```
17
+
18
+ ## Architecture
19
+
20
+ ```yaml
21
+ style: "Layered" # 예: FSD, Clean Architecture, Modular Monolith, Layered
22
+ layers: [] # 상위 → 하위 순서로 나열
23
+ import_rule: "" # import 방향 규칙 (예: "상위→하위만 허용")
24
+ segments: [] # 각 계층의 하위 세그먼트
25
+ path_alias: "" # 예: "@/* → ./src/*"
26
+ ```
27
+
28
+ ## Framework
29
+
30
+ ```yaml
31
+ name: "" # 예: Next.js 14, Vite, CRA
32
+ runtime: "" # 예: App Router, Pages Router
33
+ client_directive: "" # 예: 'use client' (없으면 비워두기)
34
+ client_directive_rule: "" # 클라이언트 디렉티브 적용 규칙
35
+ server_client_boundary: false # 서버/클라이언트 경계 존재 여부
36
+ ```
37
+
38
+ ## Code Style
39
+
40
+ ```yaml
41
+ language: "TypeScript"
42
+ strict_mode: true
43
+ type_keyword: "type" # type vs interface
44
+ import_type: true # import type 사용 여부
45
+ component_style: "PascalCase"
46
+ props_position: "above component"
47
+ handler_naming: "handle[Event]"
48
+ boolean_naming: "is/has/can[State]"
49
+ constant_naming: "UPPER_SNAKE_CASE"
50
+ any_policy: "최소화"
51
+ ```
52
+
53
+ ## State Management
54
+
55
+ ```yaml
56
+ global_state: "" # 예: Zustand, Redux, Pinia
57
+ server_state: "" # 예: React Query, SWR, Apollo
58
+ local_state: "" # 예: Context API, useState
59
+ store_location: "" # store 파일 위치 패턴
60
+ query_location: "" # query 파일 위치 패턴
61
+ ```
62
+
63
+ ## Styling
64
+
65
+ ```yaml
66
+ framework: "" # 예: Tailwind CSS, styled-components, CSS Modules
67
+ ```
68
+
69
+ ## Testing
70
+
71
+ ```yaml
72
+ framework: "" # 예: Jest, Vitest, Playwright
73
+ ```
74
+
75
+ ## Project-Specific Risks
76
+
77
+ > Plan의 RISK Critic에서 반드시 점검할 프로젝트 고유 위험 패턴
78
+ > 프로젝트에 맞게 수정하세요.
79
+
80
+ 1. (예시) import 순서 위반
81
+ 2. (예시) 순환 참조
82
+ 3. (예시) 타입 안전성 우회 (as any)
83
+
84
+ ## Mini-Review Checklist
85
+
86
+ > Implement Phase 게이트의 Mini-Review에서 각 파일에 대해 점검할 항목
87
+
88
+ 1. 아키텍처 규칙 위반 여부
89
+ 2. 코드 스타일 패턴 준수
90
+ 3. 미사용 코드 (미사용 import, 빈 export, dead code)