- Code\rebar_pipeline, review_pipeline, pier-program을 정션에서 실제 폴더로 전환 - Code\rhino_mcp 및 CLAUDE_rhino배경.md 추가, .mcp.json은 PYTHONPATH로 새 위치 사용 - pier-program 내부 .git 제거(이력은 backup\pier-program_20261028.bundle에 보관) - worktree 가이드 반영(CLAUDE.local.md, HANDOFF.md) - D:\Rhino-MCP 경로 참조를 새 위치로 치환 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
18 KiB
template, version, description, variables
| template | version | description | variables | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| design | 1.3 | PDCA Design phase document template with Context Anchor, Session Guide, and Clean Architecture support |
|
{feature} Design Document
Summary: {One-line description}
Project: {project} Version: {version} Author: {author} Date: {date} Status: Draft Planning Doc: {feature}.plan.md
Pipeline References (if applicable)
| Phase | Document | Status |
|---|---|---|
| Phase 1 | Schema Definition | ✅/❌/N/A |
| Phase 2 | Coding Conventions | ✅/❌/N/A |
| Phase 3 | Mockup | ✅/❌/N/A |
| Phase 4 | API Spec | ✅/❌/N/A |
Note
: If Pipeline documents exist, reference them in the relevant sections below.
Context Anchor
Copied from Plan document. Ensures strategic context survives Design→Do handoff.
| Key | Value |
|---|---|
| WHY | {copied from Plan Context Anchor} |
| WHO | {copied from Plan Context Anchor} |
| RISK | {copied from Plan Context Anchor} |
| SUCCESS | {copied from Plan Context Anchor} |
| SCOPE | {copied from Plan Context Anchor} |
Design Anchor (if Pencil MCP used)
Locked design tokens from initial concept pages. Enforced on every new page. Capture with:
/design-anchor capture {feature}File:docs/02-design/styles/{feature}.design-anchor.md
| Category | Tokens |
|---|---|
| Colors | primary: {value}, bg: {value}, text: {value} |
| Typography | {font-family}, sizes: {scale} |
| Spacing | {base-unit} grid, card: {value}, section: {value} |
| Radius | default: {value} |
| Tone | {design tone description} |
| Layout | {layout pattern description} |
Remove this section if not using Pencil MCP for this feature.
1. Overview
1.1 Design Goals
{Technical goals this design aims to achieve}
1.2 Design Principles
- {Principle 1: e.g., Single Responsibility Principle}
- {Principle 2: e.g., Extensible architecture}
- {Principle 3}
2. Architecture Options (v1.7.0)
2.0 Architecture Comparison
Three architecture options are evaluated before detailed design. User selects one via Checkpoint 3.
| Criteria | Option A: Minimal | Option B: Clean | Option C: Pragmatic |
|---|---|---|---|
| Approach | Least change, max reuse | Best separation, most maintainable | Good boundaries, balanced |
| New Files | {N} | {N} | {N} |
| Modified Files | {N} | {N} | {N} |
| Complexity | Low | High | Medium |
| Maintainability | Medium | High | High |
| Effort | Low | High | Medium |
| Risk | Low (coupled) | Low (clean) | Low (balanced) |
| Recommendation | Quick wins, hotfixes | Long-term projects | Default choice |
Selected: {Option A/B/C} — Rationale: {why this was chosen}
The detailed design below follows the selected architecture option.
2.1 Component Diagram
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Client │────▶│ Server │────▶│ Database │
│ (Browser) │ │ (API) │ │ (Storage) │
└─────────────┘ └─────────────┘ └─────────────┘
BaaS Architecture (Dynamic Level)
Client (Next.js) -> bkend.ai Service API (REST) -> MongoDB
<-> MCP (schema management)
Antigravity Platform
2.2 Data Flow
User Input → Validation → Business Logic → Data Storage → Response
2.3 Dependencies
| Component | Depends On | Purpose |
|---|---|---|
| {Component A} | {Component B} | {Purpose} |
3. Data Model
3.1 Entity Definition
// {Entity name}
interface {Entity} {
id: string; // Unique identifier
createdAt: Date; // Creation timestamp
updatedAt: Date; // Last update timestamp
// Additional fields...
}
3.2 Entity Relationships
[User] 1 ──── N [Post]
│
└── 1 ──── N [Comment]
3.3 Database Schema (if applicable)
CREATE TABLE {table_name} (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
MongoDB Collection Schema (Dynamic Level - bkend.ai)
| Field | Type | Required | Unique | Description |
|---|---|---|---|---|
| _id | ObjectId | auto | auto | System generated |
| createdBy | String | auto | - | Creator user ID |
| createdAt | Date | auto | - | Creation timestamp |
| updatedAt | Date | auto | - | Update timestamp |
4. API Specification
BaaS API (Dynamic Level)
Dynamic level uses bkend.ai auto-generated REST API.
CRUD endpoints are auto-generated when tables are created (no separate API implementation needed).
Reference: MCP tool 4_howto_implement_data_crud
4.1 Endpoint List
| Method | Path | Description | Auth |
|---|---|---|---|
| GET | /api/{resource} | List all | Required |
| GET | /api/{resource}/:id | Get detail | Required |
| POST | /api/{resource} | Create | Required |
| PUT | /api/{resource}/:id | Update | Required |
| DELETE | /api/{resource}/:id | Delete | Required |
4.2 Detailed Specification
POST /api/{resource}
Request:
{
"field1": "string",
"field2": "number"
}
Response (201 Created):
{
"id": "string",
"field1": "string",
"field2": "number",
"createdAt": "2024-01-01T00:00:00Z"
}
Error Responses:
400 Bad Request: Input validation failed401 Unauthorized: Authentication required409 Conflict: Duplicate data
5. UI/UX Design (if applicable)
5.1 Screen Layout
┌────────────────────────────────────┐
│ Header │
├────────────────────────────────────┤
│ │
│ Main Content Area │
│ │
├────────────────────────────────────┤
│ Footer │
└────────────────────────────────────┘
5.2 User Flow
Home → Login → Dashboard → Use Feature → View Results
5.3 Component List
| Component | Location | Responsibility |
|---|---|---|
| {ComponentA} | src/components/ | {Role} |
5.4 Page UI Checklist (v2.1.0)
CRITICAL: List EVERY required UI element per page. Gap Detector verifies each item. Without this checklist, gap analysis only checks file existence (structural), not content (functional).
How to fill: For each page, list all interactive elements (forms, buttons, filters, dropdowns, badges, toggles) and data display elements (cards, lists, scores, charts) that MUST be present. Include specific field names, option values, and data types.
{Page Name 1}
- {Element type}: {Description} ({specific details: options, fields, values})
- {Element type}: {Description}
{Page Name 2}
- {Element type}: {Description}
Example (remove in actual document):
Search Page
- Filter: Property Type dropdown (6 options: Officetel, Apartment, House, Share House, Serviced Apt, Hotel)
- Filter: Price range slider (weekly rent, min/max KRW inputs)
- Filter: ARC Registration Available checkbox
- Filter: Pet Allowed checkbox
- Button: Save Search
- Card: Weekly rent display (₩{amount}/week)
- Card: Area display ({N}평)
- Card: ARC badge (green, conditional)
- Card: Pet badge (conditional)
- Toggle: List / Map view
- Sort: Recommended, Price ASC, Price DESC, Newest
6. Error Handling
6.1 Error Code Definition
| Code | Message | Cause | Handling |
|---|---|---|---|
| 400 | Invalid input | Input error | Request re-entry from client |
| 401 | Unauthorized | Auth failure | Redirect to login page |
| 404 | Not found | Resource missing | Show 404 page |
| 500 | Internal error | Server error | Log error and notify user |
6.2 Error Response Format
{
"error": {
"code": "ERROR_CODE",
"message": "User-friendly message",
"details": {}
}
}
7. Security Considerations
- Input validation (XSS, SQL Injection prevention)
- Authentication/Authorization handling
- Sensitive data encryption
- HTTPS enforcement
- Rate Limiting
8. Test Plan (v2.3.0)
CRITICAL: Define WHAT to test here. Test CODE is written during Do phase alongside implementation. Do phase rule: code + test = 1 set. No module is "done" without its tests passing. Check phase: runs all tests, doesn't create new ones.
8.1 Test Scope
| Type | Target | Tool | Phase |
|---|---|---|---|
| L1: API Tests | Endpoints — status, params, response shape | curl / Playwright request | Do |
| L2: UI Action Tests | Page elements — forms, buttons, data display | Playwright | Do |
| L3: E2E Scenario Tests | User journeys — multi-page flows | Playwright | Do |
8.2 L1: API Test Scenarios
Define expected behavior for each endpoint. Do phase writes the actual test code.
| # | Endpoint | Method | Test Description | Expected Status | Expected Response |
|---|---|---|---|---|---|
| 1 | /api/{resource} | GET | Returns list with data | 200 | .data is array, .pagination.total > 0 |
| 2 | /api/{resource}/:id | GET | Returns detail with relations | 200 | .data.id exists, nested relations loaded |
| 3 | /api/{resource} | POST | Creates with valid data | 201 | .data.id exists |
| 4 | /api/{resource} | POST | Rejects invalid data | 400 | .error.code = "VALIDATION_ERROR", .error.details.fieldErrors present |
| 5 | /api/{protected} | GET | Blocks unauthenticated | 401 | .error.code = "UNAUTHORIZED" |
| 6 | /api/{resource}?filter=X | GET | Filter reduces results | 200 | filtered.data.length < all.data.length |
8.3 L2: UI Action Test Scenarios
Define per-page: what action → what result. Reference §5.4 Page UI Checklist.
| # | Page | Action | Expected Result | Data Verification |
|---|---|---|---|---|
| 1 | {page} | Load page | All §5.4 checklist elements visible | DB data renders (not skeleton) |
| 2 | {page} | Click filter | Results change | Count decreases |
| 3 | {page} | Submit form | Success state shown | API returns 201 |
| 4 | {page} | Invalid submit | Error message shown | Validation errors display |
8.4 L3: E2E Scenario Test Scenarios
Define complete user journeys. Each scenario chains multiple pages.
| # | Scenario | Steps | Success Criteria |
|---|---|---|---|
| 1 | Guest browsing | Home → Search(data>0) → Filter → Detail(title+host+price) | All data renders from DB |
| 2 | Auth flow | Register → Login → Access protected page | No 401 errors |
| 3 | Form submission | Navigate → Fill all fields → Submit → Verify success | Confirmation UI shown |
| 4 | i18n | Switch language → Verify text changes | UI text matches locale |
| 5 | Error handling | Wrong credentials → Error shown, Invalid form → Validation shown | User gets feedback |
8.5 Seed Data Requirements
Tests need data. Define minimum seed data for tests to be meaningful.
| Entity | Minimum Count | Key Fields Required |
|---|---|---|
| {entity} | {N} | {fields that must have values} |
Do phase: implement
src/lib/db/seed.tsbefore writing tests. Check phase: run seed before test execution.
9. Clean Architecture
Reference:
docs/01-plan/conventions.mdor Phase 2 Pipeline output
9.1 Layer Structure
| Layer | Responsibility | Location |
|---|---|---|
| Presentation | UI components, hooks, pages | src/components/, src/hooks/, src/app/ |
| Application | Use cases, services, business logic orchestration | src/services/, src/features/*/hooks/ |
| Domain | Entities, types, core business rules | src/types/, src/domain/ |
| Infrastructure | API clients, DB, external services | src/lib/, src/api/ |
9.2 Dependency Rules
┌─────────────────────────────────────────────────────────────┐
│ Dependency Direction │
├─────────────────────────────────────────────────────────────┤
│ │
│ Presentation ──→ Application ──→ Domain ←── Infrastructure│
│ │ │
│ └──→ Infrastructure │
│ │
│ Rule: Inner layers MUST NOT depend on outer layers │
│ Domain is independent (no external dependencies) │
│ │
└─────────────────────────────────────────────────────────────┘
9.3 File Import Rules
| From | Can Import | Cannot Import |
|---|---|---|
| Presentation | Application, Domain | Infrastructure directly |
| Application | Domain, Infrastructure | Presentation |
| Domain | Nothing external (pure types/logic) | All external layers |
| Infrastructure | Domain only | Application, Presentation |
9.4 This Feature's Layer Assignment
| Component | Layer | Location |
|---|---|---|
| {ComponentA} | Presentation | src/components/{feature}/ |
| {ServiceA} | Application | src/services/{feature}.ts |
| {TypeA} | Domain | src/types/{feature}.ts |
| {ApiClient} | Infrastructure | src/lib/api/{feature}.ts |
10. Coding Convention Reference
Reference:
docs/01-plan/conventions.mdor Phase 2 Pipeline output
10.1 Naming Conventions
| Target | Rule | Example |
|---|---|---|
| Components | PascalCase | UserProfile, LoginForm |
| Functions | camelCase | getUserById(), handleSubmit() |
| Constants | UPPER_SNAKE_CASE | MAX_RETRY_COUNT, API_BASE_URL |
| Types/Interfaces | PascalCase | UserProfile, ApiResponse |
| Files (component) | PascalCase.tsx | UserProfile.tsx |
| Files (utility) | camelCase.ts | formatDate.ts |
| Folders | kebab-case | user-profile/, auth-provider/ |
10.2 Import Order
// 1. External libraries
import { useState } from 'react'
import { useQuery } from '@tanstack/react-query'
// 2. Internal absolute imports
import { Button } from '@/components/ui'
import { userService } from '@/services/user'
// 3. Relative imports
import { useLocalState } from './hooks'
// 4. Type imports
import type { User } from '@/types'
// 5. Styles
import './styles.css'
10.3 Environment Variables
| Prefix | Purpose | Scope | Example |
|---|---|---|---|
NEXT_PUBLIC_ |
Client-side accessible | Browser | NEXT_PUBLIC_API_URL |
DB_ |
Database connections | Server only | DB_HOST, DB_PASSWORD |
API_ |
External API keys | Server only | API_STRIPE_SECRET |
AUTH_ |
Authentication secrets | Server only | AUTH_SECRET, AUTH_GOOGLE_ID |
10.4 This Feature's Conventions
| Item | Convention Applied |
|---|---|
| Component naming | {convention used} |
| File organization | {convention used} |
| State management | {convention used} |
| Error handling | {convention used} |
11. Implementation Guide
11.1 File Structure
src/
├── features/{feature}/
│ ├── components/
│ ├── hooks/
│ ├── api/
│ └── types/
11.2 Implementation Order
- Define data model
- Implement API
- Implement UI components
- Integration and testing
11.3 Session Guide
Auto-generated from Design structure. Session split is recommended, not required. Use
/pdca do {feature} --scope module-Nto implement one module per session.
Module Map
| Module | Scope Key | Description | Estimated Turns |
|---|---|---|---|
| {module name} | module-1 |
{description} | {turns} |
| {module name} | module-2 |
{description} | {turns} |
Recommended Session Plan
| Session | Phase | Scope | Turns |
|---|---|---|---|
| Session 1 | Plan + Design | 전체 | 30-35 |
| Session 2 | Do | --scope module-1 |
40-50 |
| Session 3 | Do | --scope module-2 |
40-50 |
| Session 4 | Check + Report | 전체 | 30-40 |
Version History
| Version | Date | Changes | Author |
|---|---|---|---|
| 0.1 | {date} | Initial draft | {author} |