CCM
Last updated: 2026-03-01
System Map
10 diagrams showing how CCM fits together: architecture, dependencies, data flows, state machines, timeline, and risk.
1. System Context
2. Module Hierarchy
3. Stage Dependency Flow
4. Creative Upload Data Flow
5. Campaign Status Transitions
6. IsSynced State Machine
7. Tracking Link Lifecycle
8. Integration Contract Map
9. Q1 Development Timeline
10. Risk & Critical Path
IsSynced: The Critical Flag
IsSynced controls whether a client can edit anything. It cuts across all modules. Its trigger timing (Decision-02) must be resolved before Stage 4.
| IsSynced | Campaign Status | Client Can Do |
|---|---|---|
| False | Incomplete / Ready | Full edit |
| False | Updated / In Progress | Edit allowed (not yet synced) |
| True | Updated / In Progress / Completed | Locked -- must contact AM |
Master Plan
10 Modules, 5 Stages, 71 Acceptance Criteria, 6 Integration Contracts, 14 Open Decisions. This is the complete system breakdown.
Core Functions to Stages
10 Module TDD Cards
Click a module to expand its acceptance criteria.
PRD Source: Part 3 > Section 1-2
- AC-01: CCM menu item appears in Ad Cloud Portal sidebar when user has access
- AC-02: App ID dropdown populated from user's permitted applications
- AC-03: 4 tabs visible after App ID selection: Campaigns, Creative Groups, Tracking Links, Creatives
- AC-04: Selecting a new App ID reloads all module data for that context
- AC-05: Tab navigation state persists during switching (no data loss)
PRD Source: Part 1 > Campaign Package Management
- AC-06: Package creation form includes Entity, App ID, Ad Solution, Region fields
- AC-07: "Enable CCM" toggle present in package creation flow
- AC-08: External Campaign Name field correctly mapped and stored
- AC-09: Package links to Entity with all required metadata
- AC-10: Created package visible in CCM campaign table after creation
- AC-11: Multiple packages per App ID supported without conflict
PRD Source: Part 3 > Creative Module (entire section + Spec Matrix). Largest module.
- AC-12: File upload supports drag-and-drop and file picker
- AC-13: Banner format validation (dimensions, file size, file type per Spec Matrix)
- AC-14: Video format validation (dimensions, duration, codec, file size)
- AC-15: Native Image format validation per Spec Matrix
- AC-16: Native Video format validation per Spec Matrix
- AC-17: Auto-categorization assigns creative type based on file properties
- AC-18: Sub-component entry UI for each creative type (CTA text, title, description)
- AC-19: Combinatorial output correctly generates all variant combinations
- AC-20: Upload progress indicator with cancel capability
- AC-21: Invalid file rejection with clear error message and reason
- AC-22: Creative preview renders after successful upload
- AC-23: Bulk upload (multiple files at once) supported
PRD Source: Part 3 > Creative Group, Sections 1-9
- AC-24: Creative Group table displays all groups with status, count, campaign link
- AC-25: Creative Group detail view (drill-down) shows all creatives in group
- AC-26: Create single Creative Group with name and metadata
- AC-27: Add Creatives to an existing Group (multi-select)
- AC-28: Remove Creatives from Group with confirmation
- AC-29: Delete Creative Group with dependency check
- AC-30: "Add to Campaign" assigns group to selected campaign within App ID
- AC-31: "Remove from Campaign" detaches group with IsSynced validation
- AC-32: Group status definitions enforced (Incomplete, Ready, Updated, etc.)
PRD Source: Part 3 > Tracking Links. Blocked by Decision-01.
- AC-33: Tracking Link table displays links with status, campaign, group assignment
- AC-34: Status lifecycle enforced (Active, Paused, Archived transitions)
- AC-35: Add Tracking Link via Entry Point A (standalone creation from TL tab)
- AC-36: TGM Create API field mapping completed and validated
- AC-37: Edit Tracking Link URL only when workflow rules permit
- AC-38: Workflow status impact rules enforced on edit
- AC-39: Tracker group associated with correct App ID
- AC-40: External Campaign Name & ID fields handled correctly
PRD Source: Part 3 > Tracking Links (Sec 3 B/C) + Campaigns + Creative Group
- AC-41: Entry Point B -- assign tracking link from Campaign detail view
- AC-42: Entry Point C -- assign tracking link from Creative Group detail view
- AC-43: Auto-assign default tracking link when campaign package created
- AC-44: Group-level tracker assignment overrides campaign-level default
- AC-45: Assignment visible and editable in Campaign detail panel
- AC-46: Assignment visible and editable in Creative Group detail panel
- AC-47: Batch assignment operations for multiple groups
PRD Source: Part 3 > Campaigns, Sections 1-2. Needs Decision-07.
- AC-48: Campaign table displays all campaigns with status, creative count, tracking links
- AC-49: Status transition: Incomplete → Ready (all required fields filled)
- AC-50: Status transition: Ready → In Progress (campaign activated)
- AC-51: Status transition: In Progress → Completed (campaign ended)
- AC-52: Status transition: any → Updated (edit triggers re-validation)
- AC-53: "Notify AM" action available at appropriate lifecycle points
- AC-54: Setup status auto-calculated from component completeness
- AC-55: Campaign table supports sort, pagination, status filtering
Cross-module (all IsSynced references). Blocked by Decision-02.
- AC-56: IsSynced flag stored per creative-campaign association (not global)
- AC-57: IsSynced=True locks all editing across Campaign, Group, Creative, TL modules
- AC-58: IsSynced=False permits editing based on module-specific rules
- AC-59: Cross-module permission matrix enforced consistently
- AC-60: Mixed-selection batch ops handle synced + unsynced items correctly
- AC-61: Locked UI indicator visible to client with "Contact AM" guidance
PRD Source: Part 2 (NOT READY -- spec in progress)
- AC-62: Internal user has full access to all CCM features
- AC-63: External user access restricted by permission grant
- AC-64: Binary permission model enforced (Internal vs External)
- AC-65: Grant/revoke permission flow for entity-level access
- AC-66: App ID filtering limits external user to permitted apps only
Cross-cutting concern. Depends on Decision-07.
- AC-67: "Notify AM" trigger fires from campaign lifecycle events
- AC-68: Notification delivered via resolved channel (email/Slack/in-app TBD)
- AC-69: Notification payload includes campaign ID, App ID, action context
- AC-70: AM receives actionable notification with link back to campaign
- AC-71: Notification event logged for audit trail
6 Integration Contracts
| ID | System | Direction | Data Exchanged | Depends On |
|---|---|---|---|---|
| IC-01 | TGM API | CCM → TGM | Create tracker group, get link URL, field mapping | Decision-01 |
| IC-02 | CPM API | CPM → CCM | Package creation, "Enable CCM" toggle, entity/app metadata | -- |
| IC-03 | COD | COD ↔ CCM | Onboarding flag, package linkage, COD ID reference | -- |
| IC-04 | Ad Cloud Portal | Portal ↔ CCM | Navigation injection, session/permission context, App ID list | -- |
| IC-05 | GCR MMP Survey | CCM → GCR | Survey form embed in tracking link flow | IC-01 |
| IC-06 | TS Tool | TS → CCM | External Campaign ID generation, tracker verification | IC-01 |
14 Open Decisions
3 critical decisions block development stages. 11 are lower priority and can be resolved in parallel.
| ID | Decision | Status | Impact |
|---|---|---|---|
| Decision-01 | TGM Create API Field Mapping | OPEN | Blocks S3.1 |
| Decision-02 | IsSynced Flag Trigger Timing | OPEN | Blocks S4.2 |
| Decision-07 | "Notify AM" Channel & Method | OPEN | Blocks S4.1 |
| Decision-03 | Creative Duplicate Detection Strategy | DEFERRED | Affects S2.1 |
| Decision-04 | Browser vs Server Timezone for Schedules | CLOSED | S2.2 -- use browser timezone |
| Decision-05 | Batch Operations Maximum Items | DEFERRED | All modules |
| Decision-06 | Cross-App Creative Duplication Rules | DEFERRED | S2.2 -- out of scope |
| Decision-08 | KR Creative Types Inclusion Timeline | DEFERRED | S2.1 -- out of scope |
| Decision-09 | Filter Implementation Priority | DEFERRED | All modules -- post-launch |
| Decision-10 | Archived Status Visibility Rules | DEFERRED | S4.1 -- internal only |
| Decision-11 | Permission Role Granularity | CLOSED | S5.1 -- binary model for now |
| Decision-12 | Asset Library Import Support | DEFERRED | S2.1 -- upload only for now |
| Decision-13 | COD vs CPM Package Entry Point | CLOSED | S1.2 -- CPM only for now |
| Decision-14 | Sub-Component Auto-Generation Scope | DEFERRED | S2.1 -- manual only for now |
Q1 Weekly Cadence
Weekly rhythm for Q1: spec delivery on Friday, review on Monday. Decision escalation runs parallel.
| Day | Activity | Owner |
|---|---|---|
| Monday | Review last week's deliverables, update Decision Tracker | Lead + Spec Owner |
| Tuesday-Thursday | Spec writing per weekly plan, flag blockers immediately | Spec Owner |
| Thursday | Decision escalation check -- push pending decisions | Lead |
| Friday | Deliver week's specs, update playbook status | Spec Owner |
Release Checklist
5 Stages, 68 must-have items, 3 Decision Blockers. Stages are sequential -- each stage builds on the previous.
Stage Must-Haves
S1.1 -- Navigation & App Context
- CCM sidebar menu entry in Ad Cloud Portal
- App ID dropdown with user's permitted apps
- 4-tab module structure (Campaigns, Creative Groups, Tracking Links, Creatives)
- App ID context reload on selection change
- Tab state preservation during navigation
- Empty state for each tab when no data exists
S1.2 -- Campaign Package (CPM)
- Package creation with Entity, App ID, Ad Solution, Region
- "Enable CCM" toggle in creation flow
- External Campaign Name field mapping
- Package-to-Entity linkage validation
- Created package reflected in CCM campaign table
- Multiple packages per App ID
S2.1 -- Creative Upload & Categorization
- Drag-and-drop + file picker upload
- Banner validation (dimension, size, type)
- Video validation (dimension, duration, codec, size)
- Native Image validation per Spec Matrix
- Native Video validation per Spec Matrix
- Auto-categorization by file properties
- Sub-component entry (CTA text, title, description)
- Combinatorial output generation
- Upload progress + cancel
- Invalid file error with reason
- Creative preview post-upload
- Bulk upload support
S2.2 -- Creative Group CRUD
- Group table with status, count, campaign link
- Group detail drill-down view
- Create single group
- Add/remove creatives (multi-select)
- Delete group with dependency check
- "Add to Campaign" within App ID
- "Remove from Campaign" with IsSynced check
- Status definitions enforced
S3.1 -- TGM API & Tracking Link [Decision-01 required]
- Tracking Link table with status columns
- Status lifecycle (Active / Paused / Archived)
- Add via Entry Point A (standalone)
- TGM API field mapping validated
- Edit link URL (when workflow permits)
- Workflow & status impact rules
- App ID association for tracker groups
- External Campaign Name/ID handling
S3.2 -- Link Assignment
- Entry Point B (from Campaign)
- Entry Point C (from Creative Group)
- Auto-assign default link
- Group-level overrides campaign-level
- Assignment visible in Campaign detail
- Assignment visible in Creative Group detail
- Batch assignment operations
S4.1 -- Campaign Lifecycle [Decision-07 required]
- Campaign table with status, creative count, links
- Incomplete → Ready transition
- Ready → In Progress transition
- In Progress → Completed transition
- Edit triggers → Updated transition
- "Notify AM" action
- Setup status auto-calculation
- Sort, pagination, status filtering
S4.2 -- IsSynced Control [Decision-02 required]
- Per-association IsSynced flag
- IsSynced=True locks all editing
- IsSynced=False permits editing
- Cross-module permission matrix
- Mixed-selection batch logic
- Locked UI indicator
S5.1 -- Permission Control (PRD Part 2 -- NOT READY)
- Internal user full access
- External user restricted access
- Binary permission model (Internal vs External)
- Grant/revoke permission flow
- App ID filtering for external users
- Permission change audit log
- Graceful error when access denied
Decision Blockers
Scope Boundaries
In Scope
| Area | Included |
|---|---|
| Creative Types | Banner, Video, Native Image, Native Video |
| Sub-Component Source | Upload only |
| Permission Model | Internal vs External (binary) |
| Schedule Timezone | Browser timezone |
| Package Creation | Via CPM only |
Out of Scope (Deferred)
| Feature | Reason |
|---|---|
| KR creative types (Kakao/Naver) | Region-specific |
| Cross-app duplicate | High complexity |
| Batch create groups | PRD marks as TBC |
| Automation tools (end card/thumbnail) | Manual upload sufficient |
| Filters (all modules) | Low data volume at launch |
| Archived status | Internal only |
| 6-role granular permissions | Binary model sufficient |
| Import from Asset Library | Upload only |
| COD package entry | CPM only |
March Action Plan
Goal: by end of March, all 9 stage specs delivered as functional specs. UI wireframes are not required. When blocked, flag it and move to the next item.
Done Criteria
| Must | Nice | Out of Scope |
|---|---|---|
|
All 9 stage specs delivered Decision-01, 02, 07 closed All flagged items concluded |
UI wireframe for S1-S2 Permission (Part 2) initial spec |
Pixel-perfect mockups Full UI interaction details Engineering estimates |
Focus: S1.1 + S1.2 -- the simplest specs, well-defined in PRD.
- S1.1 Navigation & App Context
Read: PRD Part 3, Section 1-2. Spec: sidebar rules, App ID dropdown, 4 tabs, context reload. - S1.2 Campaign Package (CPM Minimum)
Read: PRD Part 1. Spec: every field in the package creation table.
Parallel: Lead pushes Decision-01, 02, 07 with relevant teams.
Focus: S2.1 -- the largest single spec. Take the full week.
- S2.1 Creative Upload & Auto-Categorization
Read: PRD Part 3 > Creative module (entire section + Spec Matrix). - Build the Supported Formats Table (Banner, Video, Native, Native Video only)
- Document: upload flow, validation rules, auto-categorization logic, sub-component requirements, combinatorial output
- KR types (Kakao/Naver) = out of scope, note and skip
Focus: S2.2 + S3.1 (begin tracking spec if Decision-01 is closed).
- S2.2 Creative Group CRUD
Read: PRD Part 3 > Creative Group, Sections 1-9. Spec: table, detail view, create/add/remove/delete. - IsSynced checks in Creative Group = mark as "added in Stage 4", do not spec now
- Schedule timezone issue = use browser timezone, note the open question
Focus: remaining stages. Scope depends on which decisions are closed.
- S3.1 (if not completed in Week 3) -- finish TGM API + Tracking Link spec
- S3.2 Tracking Link Assignment -- entry points B/C, auto-assign, override logic
- S4.1 Campaign Lifecycle -- status transitions, Notify AM
If Decision-07 open: spec everything except notification channel. - S4.2 IsSynced Permission -- cross-module behavior matrix
If Decision-02 open: spec per-module impact, mark trigger timing as TBD. - S5.1 Permission Control -- minimum scope (Internal vs External binary)
PRD Part 2 is NOT READY. Document what exists, list all unknowns.
Checkpoints
| Checkpoint | When | Gate Criteria |
|---|---|---|
| CP-1 | End of Week 2 (Mar 14) | S1.1 + S1.2 + S2.1 specs delivered. Can enter CCM, select App ID, see Campaign list, upload creatives. |
| CP-2 | End of Week 4 (Mar 28) | All 9 stage specs delivered. Decision-01/02/07 resolved or TBD items clearly marked. Full lifecycle spec complete. |
Weekly Check-in Template
| # | Question |
|---|---|
| 1 | Which specs were completed this week? |
| 2 | What items are flagged as TBD or unresolved? |
| 3 | Which decisions need to close this week? Are they on track? |
| 4 | Is anything blocked that was not expected? |
Decision Blocker
| Decision | Needed By | Stakeholders |
|---|---|---|
| Decision-01 | Week 3 (Mar 17) | TGM team, TS team |
| Decision-02 | Week 4 (Mar 24) | Backend team, Product |
| Decision-07 | Week 4 (Mar 24) | AM team, Product |