The lifecycle
An action is a finding with a life, not a row in a report. A stable fingerprint identifies it across runs, so re running generation refreshes the same action instead of minting a new one.
The difference between
RESOLVED and DONE is the point. Only that distinction tells you whether your fix is what removed the problem.
How are duplicate actions prevented?
An action is identified by a fingerprint over its rule, app, store, country, keyword and a rule specific discriminator. It deliberately excludes every volatile magnitude: positions, scores, counts and observation dates are all left out. That exclusion is the whole design. If a position were part of the fingerprint, tomorrow’s check would produce a different fingerprint, mint a brand new action, and your snooze and dismiss decisions would evaporate every night. Excluding magnitudes is what makes the lifecycle mean anything. The fingerprint is unique per workspace, so the same finding cannot open twice.The rules
Eight rules, with fixed constants.
Unanswered audit checks never count toward
audit.fix_factor, and Apple only surfaces are skipped on Google Play rather than recommended impossibly.
Priority and impact
Impact is a stored, versioned estimate on a 0 to 100 scale.
The two advisory rules,
serp.hold_volatile and keyword.prune, are capped at impact 50, so hygiene can never outrank growth.
Impact is stamped with formulaVersion: actions-v1 and is never a promised outcome. asobeast has no download or revenue data, so it never presents one.
Home market rules and market rules
Two rules are worded carefully because of what asobeast can and cannot see.keyword.add_uncovered is home market only. asobeast stores one metadata snapshot per app, so it cannot claim a keyword is missing from a localized listing it has never seen.
market.improve_country says investigate this market rather than fix your localization, for the same reason. It reports a visibility gap, which is a fact, and leaves the diagnosis to you. See Countries and markets.
Limits
Two per rule caps also apply where a rule could flood the queue: at most 5 prune actions and at most 3 review theme actions per app.
Running it
Generation runs automatically inside the daily pipeline completion barrier, before alerts flush, so a newly opened priority action rides the same batched report.POST /actions/run queues an extra run and returns 202. Two runs on the same day coalesce on a shared job id. A failing generation is logged and never blocks alert delivery.
AI explanations are optional
WithOPENAI_API_KEY set, an action card gains an explain button that turns its typed evidence into two to four plain sentences.
AI may only summarize an action that already exists. It can never create, rank, re order or suppress one, and the entire feature works with the key unset, which is the default. See Enable the optional AI features.
Get notified about new actions
ALERT_ACTIONS_MIN_PRIORITY sets the lowest priority that fires an action.opened event, and defaults to high. Refreshed, touched and resolved actions never fire.
Existing alert subscribers are unaffected until they opt into the event. See Send alerts.
Troubleshooting
- A dismissed action came back. It was a different finding. Check the keyword and country: the fingerprint includes both, so the same rule on a different market is a separate action.
- Fewer actions than you expected.
ACTIONS_MAX_OPEN_PER_APPcaps new actions per run. The run reports how many it withheld. - A rule never fires. Most rules need a minimum number of observed days. A recently added keyword or market has not accumulated them yet.
Related
Run an ASO audit
Where
audit.fix_factor gets its evidence.Optimize listing metadata
Where
keyword.add_uncovered is resolved.