Skip to content

Commit 8ce4f5c

Browse files
committed
docs: DevLogUI 아키텍쳐 하네스 반영
1 parent 4ac3c70 commit 8ce4f5c

4 files changed

Lines changed: 23 additions & 11 deletions

File tree

.hermes/skills/devlog-architecture-harness/SKILL.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,9 @@ Ask the user before editing when:
7474
- Core vs Domain ownership is unclear.
7575
- A shared type is being moved only because multiple modules need access.
7676
- Firebase/Auth/Firestore/Functions/Messaging-specific logic would leave Infra.
77-
- WidgetCore would depend on Domain, Data, Infra, Persistence, Presentation, or App.
78-
- Presentation would depend on Data, Infra, Persistence, or App.
77+
- WidgetCore would depend on Domain, Data, Infra, Persistence, Presentation, UI, or App.
78+
- Presentation would depend on UI, Data, Infra, Persistence, or App.
79+
- UI would depend on Domain, Core, Data, Infra, Persistence, or App.
7980
- Data would gain concrete SDK or storage implementation details.
8081
- The Presentation `Store` flow or reducer responsibility would change.
8182
- A compile fix requires relaxing the intended architecture.

.hermes/skills/devlog-architecture-harness/references/devlog-architecture-flow.md

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,8 @@ flowchart TD
7373
```mermaid
7474
flowchart TD
7575
App["DevLogApp\nComposition root\nApp lifecycle\nAssembler wiring"]
76-
Presentation["DevLogPresentation\nSwiftUI views\nViewModels\nCoordinators\nUI state"]
76+
UI["DevLogUI\nSwiftUI views\nReusable components\nView composition"]
77+
Presentation["DevLogPresentation\nStore\nViewModels\nCoordinators\nUI state"]
7778
Domain["DevLogDomain\nEntities\nRepository protocols\nUse cases"]
7879
Data["DevLogData\nRepository implementations\nDTOs\nMappers\nService/store protocols"]
7980
Infra["DevLogInfra\nFirebase\nSocial login\nNetwork\nLink metadata\nMessaging"]
@@ -83,13 +84,16 @@ flowchart TD
8384
WidgetExtension["DevLogWidgetExtension\nWidgetKit UI\nProviders\nTimelines"]
8485
8586
App --> Presentation
87+
App --> UI
8688
App --> Domain
8789
App --> Data
8890
App --> Infra
8991
App --> Persistence
9092
App --> Core
9193
App --> WidgetCore
9294
95+
UI --> Presentation
96+
9397
Presentation --> Domain
9498
Presentation --> Core
9599
@@ -114,13 +118,14 @@ flowchart TD
114118
| Layer | Owns | Allowed direction | Ask before |
115119
| --- | --- | --- | --- |
116120
| `DevLogCore` | DI primitives, logger, shared value/query types, widget snapshot values | No DevLog layer dependency | Moving domain entities into Core |
117-
| `DevLogDomain` | entities, repository protocols, use cases | Core only | Adding Data, Infra, Persistence, Presentation, App, Widget UI, or SDK dependency |
121+
| `DevLogDomain` | entities, repository protocols, use cases | Core only | Adding Data, Infra, Persistence, Presentation, UI, App, Widget UI, or SDK dependency |
118122
| `DevLogData` | repository implementations, DTOs, mappers, data protocols | Domain, Core | Adding concrete Firebase, WidgetKit, storage, or platform implementation details |
119123
| `DevLogInfra` | Firebase, social login, network, metadata, messaging implementations | Data, Core | Moving SDK-specific behavior out of Infra |
120124
| `DevLogPersistence` | local stores, image cache, widget snapshot persistence | Data, Core, WidgetCore | Moving domain logic or remote SDK behavior into Persistence |
121-
| `DevLogPresentation` | UI, view models, coordinators, presentation state | Domain, Core | Adding Data, Infra, Persistence, or App dependency |
125+
| `DevLogPresentation` | Store, view models, coordinators, presentation state | Domain, Core | Adding UI, Data, Infra, Persistence, or App dependency |
126+
| `DevLogUI` | SwiftUI views, reusable UI components, view composition | Presentation | Adding Domain, Core, Data, Infra, Persistence, or App dependency |
122127
| `DevLogApp` | composition root, lifecycle, assembler wiring | Concrete app layers | Moving feature logic into App |
123-
| `DevLogWidgetCore` | widget data contracts and pure snapshot logic | Core | Adding Domain, Data, Infra, Persistence, Presentation, or App dependency |
128+
| `DevLogWidgetCore` | widget data contracts and pure snapshot logic | Core | Adding Domain, Data, Infra, Persistence, Presentation, UI, or App dependency |
124129
| `DevLogWidgetExtension` | WidgetKit rendering and timeline plumbing | WidgetCore | Calling app/domain services directly |
125130

126131
## Presentation Store flow
@@ -159,6 +164,7 @@ flowchart TD
159164
Shared{"Moved only because shared?"}
160165
NewDependency{"New module dependency?"}
161166
ExternalSDK{"External SDK crosses layer?"}
167+
UIBoundary{"UI sees Domain/Core/Data/Infra/Persistence/App?"}
162168
WidgetBoundary{"WidgetCore sees app/domain/data?"}
163169
BuildShortcut{"Build fix relaxes boundary?"}
164170
ScopeDrift{"Outside current task scope?"}
@@ -173,7 +179,9 @@ flowchart TD
173179
NewDependency -->|Yes| Ask
174180
NewDependency -->|No| ExternalSDK
175181
ExternalSDK -->|Yes| Ask
176-
ExternalSDK -->|No| WidgetBoundary
182+
ExternalSDK -->|No| UIBoundary
183+
UIBoundary -->|Yes| Ask
184+
UIBoundary -->|No| WidgetBoundary
177185
WidgetBoundary -->|Yes| Ask
178186
WidgetBoundary -->|No| BuildShortcut
179187
BuildShortcut -->|Yes| Ask

AGENTS.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,14 @@ Treat this repository as an Xcode workspace-based modular iOS app. There is no r
4343
### Current layer map
4444

4545
- `Application/DevLogCore`: shared app primitives such as DI, logging, query/value types, display options, and widget snapshot value types. Core is shared, but shared access alone is not enough reason to move domain entities into Core.
46-
- `Application/DevLogDomain`: entities, repository protocols, use case protocols, and use case implementations. Domain may depend on Core. Domain must not depend on Data, Infra, Persistence, Presentation, App, Widget extension UI, Firebase SDKs, or storage implementations.
46+
- `Application/DevLogDomain`: entities, repository protocols, use case protocols, and use case implementations. Domain may depend on Core. Domain must not depend on Data, Infra, Persistence, Presentation, UI, App, Widget extension UI, Firebase SDKs, or storage implementations.
4747
- `Application/DevLogData`: repository implementations, DTOs, mappers, data-layer protocols for external services/stores, and widget sync coordination. Data may depend on Domain and Core. Data should not gain direct Firebase, GoogleSignIn, WidgetKit, or concrete storage implementation details unless the user explicitly approves the boundary change.
4848
- `Application/DevLogInfra`: Firebase, social login, network, link metadata, messaging, and platform service implementations. Infra may depend on Data and Core. Firebase/Auth/Firestore/Functions/Messaging-specific behavior belongs here unless the user approves another boundary.
4949
- `Application/DevLogPersistence`: local persistence, user defaults, image store, and widget snapshot persistence/updating. Persistence may depend on Data, Core, and WidgetCore when needed for snapshot persistence.
50-
- `Application/DevLogPresentation`: SwiftUI views, view models, coordinators, UI state structures, and presentation-only helpers. Presentation may depend on Domain and Core. It must not depend on Data, Infra, Persistence, or App.
50+
- `Application/DevLogPresentation`: Store, view models, coordinators, UI state structures, and presentation-only helpers. Presentation may depend on Domain and Core. It must not depend on UI, Data, Infra, Persistence, or App.
51+
- `Application/DevLogUI`: SwiftUI views, reusable UI components, and view composition. UI may depend on Presentation. It must not depend on Domain, Core, Data, Infra, Persistence, or App.
5152
- `Application/DevLogApp`: composition root, app lifecycle, app delegate, app-level routing, and assembler wiring. App may import concrete layers to assemble the dependency graph.
52-
- `Widget/DevLogWidgetCore`: widget snapshot models, factories, keys, app-group constants, and widget-only pure helpers. WidgetCore may depend on Core. It must not depend on Domain, Data, Infra, Persistence, Presentation, or App without explicit user approval.
53+
- `Widget/DevLogWidgetCore`: widget snapshot models, factories, keys, app-group constants, and widget-only pure helpers. WidgetCore may depend on Core. It must not depend on Domain, Data, Infra, Persistence, Presentation, UI, or App without explicit user approval.
5354
- `Widget/DevLogWidgetExtension`: WidgetKit UI, widget providers, entries, timelines, and extension resources. It should consume WidgetCore outputs rather than app/domain services directly.
5455
- `Firebase/functions`: TypeScript Cloud Functions. Deploy updated functions one by one separately.
5556

@@ -68,6 +69,7 @@ Ask the user before editing when any of these are true:
6869
- A type could plausibly live in both Core and Domain.
6970
- A shared type is being moved only because multiple modules need access to it.
7071
- A new target dependency would make a lower-level module know a higher-level module.
72+
- UI would start depending on Domain, Core, Data, Infra, Persistence, or App.
7173
- A build fix would be achieved by loosening an architecture boundary.
7274
- Firebase, GoogleSignIn, AuthenticationServices, UserNotifications, LinkPresentation, Network, WidgetKit, or storage implementation details would move to another layer.
7375
- A repository protocol, service protocol, assembler, or DI ownership boundary would change.

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,8 @@ SwiftUI_DevLog/
181181
│ ├── DevLogData/ # Repository 구현, DTO, Mapper, Data 계층 Protocol
182182
│ ├── DevLogInfra/ # Firebase, 소셜 로그인, 네트워크, 메타데이터 서비스 구현
183183
│ ├── DevLogPersistence/ # UserDefaults, 이미지 저장소, 위젯 스냅샷 영속성 처리
184-
│ └── DevLogPresentation/ # SwiftUI 화면, ViewModel, Store, Coordinator
184+
│ ├── DevLogPresentation/ # ViewModel, Store, Coordinator, 화면 상태
185+
│ └── DevLogUI/ # SwiftUI 화면, 재사용 UI 컴포넌트
185186
├── Widget/
186187
│ ├── DevLogWidgetCore/ # 위젯 스냅샷 모델, Factory, App Group 상수
187188
│ └── DevLogWidgetExtension/ # WidgetKit UI, Provider, Timeline

0 commit comments

Comments
 (0)