# 0029 — Campaign — Module Triage

**Milestone:** M3
**Owner:** TBD
**Status:** planning

## Goal

Consolidates 29 legacy issues from the
`MetaDrivenPlatform4AI` repo that share the same module / area label,
so they can be triaged together by the corresponding domain IC.

Module label scope: `module/campaign`.

## Acceptance criteria

- [ ] All `ported` children below have a Story or Bug filed in pingcap-pack
- [ ] All filed Stories / Bugs have a linked test (existing or to-write task with scaffold)
- [ ] Engineering review confirms which children are still applicable under the new project's design

## Stories / Bugs (filed as GitHub issues)

29 children classified `ported`. Phase 3/4 will file each as
a Story (capability) or Bug (defect) in this repo and back-reference the
legacy issue. Initial child list:

- [ ] #TBD — legacy MetaDrivenPlatform4AI#1340 — Campaign Detail: 'Clone' action missing from header — replaced by 'Share' which is a different feature
- [ ] #TBD — legacy MetaDrivenPlatform4AI#1342 — [Edit Campaign] Form title shows generic "Edit Campaign" instead of "Edit [Record Name]"
- [ ] #TBD — legacy MetaDrivenPlatform4AI#1343 — [Edit Campaign] Owner field is editable and mislabeled; should be read-only "Campaign Owner"
- [ ] #TBD — legacy MetaDrivenPlatform4AI#1344 — [Edit Campaign] Field label "Currency ISO Code" should be "Campaign Currency"
- [ ] #TBD — legacy MetaDrivenPlatform4AI#1354 — CampaignMember edit form serializes empty fields as string "null" instead of JSON null
- [ ] #TBD — legacy MetaDrivenPlatform4AI#1365 — Campaign List View: 'New List View' modal missing List API Name field and visibility (sharing) options
- [ ] #TBD — legacy MetaDrivenPlatform4AI#1366 — Campaign List View: Gear (⚙) dropdown only shows 'New List View' — missing 7 list view management options
- [ ] #TBD — legacy MetaDrivenPlatform4AI#1374 — Filter Records panel overflows viewport on Campaign List page
- [ ] #TBD — legacy MetaDrivenPlatform4AI#1416 — Campaign delete silently swallows API error when child CampaignMemberStatus records exist
- [ ] #TBD — legacy MetaDrivenPlatform4AI#1417 — CampaignMemberStatus Default checkbox value not persisted after save
- [ ] #TBD — legacy MetaDrivenPlatform4AI#1419 — CampaignMember Status picklist shows all 187 global statuses instead of filtering by Campaign
- [ ] #TBD — legacy MetaDrivenPlatform4AI#1421 — Campaign delete should support cascade delete or provide actionable error message for child records
- [ ] #TBD — legacy MetaDrivenPlatform4AI#1422 — New Campaign does not auto-create default CampaignMemberStatus records (Sent/Responded)
- [ ] #TBD — legacy MetaDrivenPlatform4AI#1423 — CampaignMemberStatus list view Name column displays empty dashes for all records
- [ ] #TBD — legacy MetaDrivenPlatform4AI#1425 — Campaign Active checkbox may be reset when selecting picklist fields during record creation
- [ ] #TBD — legacy MetaDrivenPlatform4AI#1442 — Feature request: Campaign Members management — Add Leads; Add Contacts; Update Status; Remove
- [ ] #TBD — legacy MetaDrivenPlatform4AI#1445 — Setup → Edit Field: 'Update Field' fails with 'field label does not exist on object campaign'
- [ ] #TBD — legacy MetaDrivenPlatform4AI#1455 — Campaign Member: Lead lookup returns 'No results' for names that exist (SOSL /search returns empty)
- [ ] #TBD — legacy MetaDrivenPlatform4AI#1458 — New Campaign form: Currency ISO Code has no default — should default to 'U.S. Dollar' (USD)
- [ ] #TBD — legacy MetaDrivenPlatform4AI#1492 — Long Campaign Name overflows into Campaign Owner column and header action buttons
- [ ] #TBD — legacy MetaDrivenPlatform4AI#1495 — Campaign allows multiple CampaignMemberStatus rows with Default=true simultaneously (SFDC enforces exactly one)
- [ ] #TBD — legacy MetaDrivenPlatform4AI#1496 — New CampaignMemberStatus has empty Sort Order — should default to MAX(SortOrder)+1
- [ ] #TBD — legacy MetaDrivenPlatform4AI#1498 — Cannot add Lead to Campaign: Lead lookup in Campaign Member New form returns empty for every query
- [ ] #TBD — legacy MetaDrivenPlatform4AI#1499 — New CampaignMember records have blank Name / Campaign Name / FirstName / LastName / Company / HasResponded — formula-downgraded fields not computed on create
- [ ] #TBD — legacy MetaDrivenPlatform4AI#1519 — New Campaign does not auto-provision default Campaign Member Statuses (Sent / Responded)
- [ ] #TBD — legacy MetaDrivenPlatform4AI#1523 — Campaign Member Status picklist on CampaignMember form is not scoped to the current Campaign (shows cross-Campaign labels)
- [ ] #TBD — legacy MetaDrivenPlatform4AI#1580 — Campaign Member Statuses related list: missing 'Change Default Status' button + NAME column shows dashes instead of Label
- [ ] #TBD — legacy MetaDrivenPlatform4AI#2111 — CampaignMember.Company not auto-populated from Lead.Company on create (follow-up to #1499 / PR #1757)
- [ ] #TBD — legacy MetaDrivenPlatform4AI#2112 — REGRESSION: CampaignMember POST with Status returns INSERT_FAILED — 'validator with ID runtime_scoped_picklist not found'

## Non-goals

- Re-port legacy fixes that are no longer relevant under the new project's
  pure-platform design — engineering identifies these case-by-case
- Layer-belonging classification (L0 / L1 / L2) — engineering's job

## History

- 2026-05-03 — created during Phase 2 from clustered orphan issues.

## Stories (filed in Phase 3)

_Pending Phase 3 synthesis._
