Managing Clusters
Clusters let you group related feedback items together — "Login UX issues", "Mobile crashes", "Onboarding requests" — so you can triage in bulk instead of item by item. These four Spark commands cover the full lifecycle.
Listing clusters
This shows all clusters sorted by most recently updated:
+----+------------------+----------+----------+-------+---------------------+
| ID | Label | Priority | Status | Items | Updated |
+----+------------------+----------+----------+-------+---------------------+
| 3 | Login UX Issues | high | active | 12 | 2026-06-01 14:22:00 |
| 1 | Onboarding Asks | medium | resolved | 5 | 2026-05-30 09:10:00 |
| 2 | Mobile Crashes | critical | active | 3 | 2026-05-28 17:45:00 |
+----+------------------+----------+----------+-------+---------------------+
Item count is always computed live — it reflects how many feedback rows are currently assigned to the cluster.
Dismissed clusters are hidden unless you ask for them — see --status below.
--priority
Filter to clusters of a specific priority. Accepted values: low, medium, high, critical.
--status
Filter by lifecycle status. Accepted values: active, resolved, dismissed, and all.
With no --status, dismissed clusters are left out so your day-to-day view only shows what still needs attention. Pass --status all to see every cluster regardless of status.
--sort
Change the sort order. Default is updated_at (most recently active first). Use count to float the most-populated clusters to the top.
Creating a cluster
Prints the new cluster's ID on success:
Use --priority to set the priority at creation time. If you skip it, priority defaults to medium.
Editing a cluster
Update the label, the priority, the status, or any combination. You need to pass at least one flag — the command errors if you don't.
# Rename only
php spark feedback:cluster:edit 7 --label "Login & Auth Issues"
# Change priority only
php spark feedback:cluster:edit 7 --priority critical
# Mark it fixed
php spark feedback:cluster:edit 7 --status resolved
# Update several at once
php spark feedback:cluster:edit 7 --label "Login & Auth Issues" --priority critical --status active
If the ID doesn't exist you'll get an error rather than a silent no-op.
Cluster status
| Status | Meaning |
|---|---|
active |
Still open. This is the default for every new cluster. |
resolved |
You've fixed it. If feedback:analyze later attaches new matching feedback, the cluster flips back to active so a recurrence doesn't get buried. |
dismissed |
Not actually a problem. New matching feedback is still filed against the cluster — nothing is lost or duplicated — but the cluster stays dismissed and stays out of the default listing. |
Priority locking
Setting --priority on feedback:cluster:edit also locks the priority (feedback:cluster:create --priority does not — a cluster starts unlocked). feedback:analyze re-scores an unlocked cluster's priority every time it adds new items to it, but it leaves a locked cluster's priority exactly as you set it.
There's no separate unlock flag: set --priority again to change your call and keep it locked. If you want the AI to take priority back over, clear the lock directly:
--status on its own never touches the lock.
Deleting a cluster
Before anything is changed, the command asks you to confirm:
Type yes to proceed or anything else to abort.
What happens to items when you delete a cluster:
- Items with status
new,reviewed, orgroupedhave theircluster_idcleared and status reset tonew. They go back into the unreviewed pile. - Items with status
dismissedare left exactly as they are — theircluster_idis preserved and their status doesn't change.
Deletion is not reversible
There's no undo. If you want to preserve the grouping, consider renaming or reprioritising the cluster instead of deleting it.
Assigning an item to a cluster
Sets cluster_id and flips the item's status to grouped in one step. Both arguments are required.
On success:
If either ID doesn't exist you'll get a clear error and a non-zero exit code:
The non-zero exit makes it safe to use in scripts — failures won't silently pass through && chains.
Bulk reassignment
Because the command is non-interactive, it's easy to loop over a list of IDs in a shell script:
Or pipe IDs from another command:
php spark feedback:list --status new --limit 50 | awk '{print $1}' | xargs -I{} php spark feedback:group {} 3
Finding item IDs
Use php spark feedback:list to browse unassigned items and note their IDs before running a bulk assignment.
Next steps
- Browsing Feedback — filter and view individual items, including by cluster
- Models — query clusters and feedback directly when you need more than the CLI offers