The PR is safe for the intended minimal scope: ingest and display legacy OTHER campaigns without affecting other campaigns.
{goal: "OTHER", kpi: "OTHER"} passes the complete snapshot persistence flow.goal=OTHER, derived_goal=OTHER, kpi=OTHER, with no invented metric or target.Other.OTHER.-.OTHER is not offered in the KPI dropdown.Other.OTHER group and returns Other without crashing.Ingestion does not create or link automation tasks. The test campaign remains automated: false with zero automation tasks/runs.
Normal budget/state/metric automations are unaffected. Only a rule explicitly using Campaign Goal KPI cares about these fields:
OTHER, the link modal cannot submit because OTHER has no supported goal mapping.OTHER campaign reaches runtime, its KPI resolves to NaN, so no recommendation fires for that campaign. Other campaign rows continue normally.A user can attempt a target-only edit while the KPI is still OTHER. Amazon is expected to reject that request. I explicitly verified the backend isolation:
So this may produce a generic error for that legacy campaign, but it cannot corrupt it locally or affect other campaigns. Disabling that control would be UX polish, not required for safe ingestion.
The only verification gaps are intentional: no real Amazon write was attempted, the synthetic campaign currently has no performance report row, and GitHub reports no CI checks for this branch. The dashboard aggregate path was therefore tested with a mocked OTHER result.
My recommendation: deploy this as read-compatible legacy support. Don’t expand the PR unless product specifically wants cleaner disabled-state messaging for unsupported target edits.
This section translates the dependency analysis into customer situations. The scope is PR #4383 at commit 9335c77 (seven changed files). The ticket’s concrete case is an old Amazon DSP campaign returned with goal = OTHER, kpi = OTHER, and no target. The test campaign is a synthetic, ended, Mongo-only record; it proves read behavior but cannot prove Amazon will accept an edit.
goalSetting: {goal: "OTHER", kpi: "OTHER"}. Our snapshot parser accepts it and stores the campaign. Previously, deriving a goal from KPI.OTHER raised an error, so that campaign was skipped.kpi: OTHER; Amazon’s response decides whether it succeeds. We update Mongo only after Amazon reports success for the specific campaign.OTHER has none.| Place or action | What happens for the legacy campaign | What happens to other campaigns | Reviewer check |
|---|---|---|---|
| Campaign sync | The OTHER record persists with no invented metric or target. |
Existing KPI mappings use the same branches as before. | Check that OTHER is handled in both the enum and KPI-to-goal derivation, and that the snapshot test covers the whole persist flow. |
| Campaign Manager row | Goal reads Other; KPI Target Type and KPI read OTHER; KPI Target Value is –; KPI status reads Unknown. The row stays usable. | Normal rows still show their configured labels and metrics. | Check both the current table and CSV export fallbacks. Decide whether raw OTHER is an acceptable KPI label. |
| Campaign Manager KPI dropdown | Current value is visible, but OTHER is absent from the choices. A supported KPI can be selected; changing goal stage asks for confirmation. |
Supported choices remain the same. | Ensure a display label never accidentally makes OTHER selectable through KPI_OPTIONS. |
| SCV Summary and Campaign Settings | Summary loads. Settings shows Other for Goal and KPI. Goal offers the three supported goals; KPI has No options until a supported goal is selected. An unchanged form cannot be saved. | Supported campaigns retain their usual options and validation. | Check label behavior separately from supported options. Check that unrelated settings edits do not include goalSetting. |
| Target-only edit in Campaign Manager or SCV | The UI can attempt to submit kpi: OTHER with a new target. A fake ended campaign previously showed an error; a real Amazon response was not tested. |
The request names the selected campaign. A failed Amazon response produces no Mongo update. | Decide whether this rare failed edit is acceptable or whether the control needs a clearer disabled state/message. Do not treat the fake campaign’s rejection as proof of Amazon behavior. |
| Campaign Goal Share dashboard widget | If performance data groups under OTHER, the controller can return an Other bucket rather than crashing. |
Awareness, Consideration and Conversion buckets remain. | Review the dashboard mapping. The fixture has no current report row, so the actual chart with OTHER data has not been visually tested. |
| Goal filter and export | Other is available as a Goal filter; export uses the displayed goal/KPI fallback. | Existing options and export labels remain. | These were traced in code, not clicked/downloaded in the browser. |
| Automation | The fixture has no linked tasks. Rules that do not use Campaign Goal KPI are unaffected by this enum. A goal-KPI link asks for a target, and the link modal cannot submit while KPI stays OTHER. |
Other campaigns’ rule rows keep their own KPI mappings. | Inspect whether any actual legacy OTHER campaigns already have automation links or a numeric target. Those are separate cases from the ticket’s no-target campaign. |
SCV means DSP Single Campaign View. “KPI Target Type” is the KPI name (for example, ROAS), while “KPI Target Value” is its numeric target (for example, 3). OTHER has neither a supported metric mapping nor a target in this case, so the dash and Unknown status are expected.
The main customer-facing rough edge is the target field: the app leaves it editable even though it cannot explain what a target for OTHER means. The likely outcome is a failure shown only on that campaign. If product wants to prevent an obviously unsupported attempt, disable target editing whenever the current KPI is OTHER and provide a short explanation. That is a focused follow-up; this PR does not need a general rewrite of goal/KPI editing.
There is one less likely automation shape worth checking in real data: OTHER with a numeric target. Current link validation checks whether a target exists, so that shape could pass the first gate. At runtime, the “Campaign Goal KPI” value has no metric mapping and resolves to NaN, causing its condition not to match for that campaign. We have not observed that shape for this ticket. If it exists, classify OTHER explicitly as unsupported in link validation so the user gets a truthful explanation instead of “missing target.”
An Amazon rejection does not alter Mongo for the rejected campaign. The adapter test used a mocked Amazon response: zero DB writes on failure, one write to the named campaign on success. That supports isolation of a failed edit; it does not prove Amazon will reject every possible OTHER request.
NaN for OTHER and the expected value for a normal ROAS campaign.[TEST TIC-5924] Amazon legacy OTHER campaign (999999999005924) is ended, inactive, unautomated, and has no goal metric, target, or linked automation task/run.OTHER performance row, and Amazon update success/failure handling. The fixture currently has no matching performance report row and is not a real Amazon campaign.For the relevant code, start with snapshot parsing and persistence, KPI-to-goal mapping, current Campaign Manager cells, SCV settings labels and options, dashboard bucket mapping, and Amazon-first DB update.
For the observed no-target legacy shape, accept this as limited read support if the team is comfortable with a target-only edit producing a campaign-specific error. Ask for a separate small UX change only if that error would confuse customers. Before expanding automation work, check whether any real OTHER campaigns have numeric targets or existing goal-KPI rules; the current ticket fixture does not.