Error
{"message":"Error thrown while handling message App\\Message\\ActivityPub\\Inbox\\DeleteMessage. Removing from transport after 5 retries. Error: \"Handling \"App\\Message\\ActivityPub\\Inbox\\DeleteMessage\" failed: A new entity was found through the relationship 'App\\Entity\\Activity#objectPostComment' that was not configured to cascade persist operations for entity: App\\Entity\\PostComment@185601. To solve this issue: Either explicitly call EntityManager#persist() on this unknown entity or configure cascade persist this association in the mapping for example #[ORM\\ManyToOne(..., cascade: ['persist'])]. If you cannot find out which entity causes the problem implement 'App\\Entity\\PostComment#__toString()' to get a clue.\"","context":{"class":"App\\Message\\ActivityPub\\Inbox\\DeleteMessage","message_id":null,"retryCount":5,"error":"Handling \"App\\Message\\ActivityPub\\Inbox\\DeleteMessage\" failed: A new entity was found through the relationship 'App\\Entity\\Activity#objectPostComment' that was not configured to cascade persist operations for entity: App\\Entity\\PostComment@185601. To solve this issue: Either explicitly call EntityManager#persist() on this unknown entity or configure cascade persist this association in the mapping for example #[ORM\\ManyToOne(..., cascade: ['persist'])]. If you cannot find out which entity causes the problem implement 'App\\Entity\\PostComment#__toString()' to get a clue.","exception":{"class":"Symfony\\Component\\Messenger\\Exception\\HandlerFailedException","message":"Handling \"App\\Message\\ActivityPub\\Inbox\\DeleteMessage\" failed: A new entity was found through the relationship 'App\\Entity\\Activity#objectPostComment' that was not configured to cascade persist operations for entity: App\\Entity\\PostComment@185601. To solve this issue: Either explicitly call EntityManager#persist() on this unknown entity or configure cascade persist this association in the mapping for example #[ORM\\ManyToOne(..., cascade: ['persist'])]. If you cannot find out which entity causes the problem implement 'App\\Entity\\PostComment#__toString()' to get a clue.","code":0,"file":"/var/www/kbin.melroy.org/html/vendor/symfony/messenger/Middleware/HandleMessageMiddleware.php:121","previous":{"class":"Doctrine\\ORM\\ORMInvalidArgumentException","message":"A new entity was found through the relationship 'App\\Entity\\Activity#objectPostComment' that was not configured to cascade persist operations for entity: App\\Entity\\PostComment@185601. To solve this issue: Either explicitly call EntityManager#persist() on this unknown entity or configure cascade persist this association in the mapping for example #[ORM\\ManyToOne(..., cascade: ['persist'])]. If you cannot find out which entity causes the problem implement 'App\\Entity\\PostComment#__toString()' to get a clue.","code":0,"file":"/var/www/kbin.melroy.org/html/vendor/doctrine/orm/src/ORMInvalidArgumentException.php:68"}}},"level":500,"level_name":"CRITICAL","channel":"messenger","datetime":"2026-04-03T17:31:25.952360+00:00","extra":{}}
Root cause?
After 5 retries, Symfony Messenger resets the EntityManager between attempts. In DeleteHandler::doWork(), the PostComment fetched via find() on line 79 is managed in the current EM session. However, ActivityRepository::createForRemoteActivity calls flush() internally after setting objectPostComment = $entity on the new Activity. If the EntityManager (Doctirne entrie managers) was reset/cleared at any point during the retry cycle, Doctrine's UnitOfWork no longer tracks the PostComment and treats it as a "new" unmanaged entity: triggering the ORMInvalidArgumentException.
Possible fix
In createForRemoteActivity, before calling flush(), explicitly persist() the passed $object entity when it's an object (excluding Activity itself, which is already handled separately via innerActivity). In ActivityRepository.php:
if (null !== $object) {
$activity->setObject($object);
if (\is_object($object) && !($object instanceof Activity)) {
$this->getEntityManager()->persist($object); // <---- THIS
}
}
$this->getEntityManager()->persist($activity);
$this->getEntityManager()->flush();
Calling persist() on an already-managed entity is a no-op, so this is safe for normal code paths. For stale/detached entities after EM resets, it re-registers them into the identity map before the flush, preventing the crash.
Error
{"message":"Error thrown while handling message App\\Message\\ActivityPub\\Inbox\\DeleteMessage. Removing from transport after 5 retries. Error: \"Handling \"App\\Message\\ActivityPub\\Inbox\\DeleteMessage\" failed: A new entity was found through the relationship 'App\\Entity\\Activity#objectPostComment' that was not configured to cascade persist operations for entity: App\\Entity\\PostComment@185601. To solve this issue: Either explicitly call EntityManager#persist() on this unknown entity or configure cascade persist this association in the mapping for example #[ORM\\ManyToOne(..., cascade: ['persist'])]. If you cannot find out which entity causes the problem implement 'App\\Entity\\PostComment#__toString()' to get a clue.\"","context":{"class":"App\\Message\\ActivityPub\\Inbox\\DeleteMessage","message_id":null,"retryCount":5,"error":"Handling \"App\\Message\\ActivityPub\\Inbox\\DeleteMessage\" failed: A new entity was found through the relationship 'App\\Entity\\Activity#objectPostComment' that was not configured to cascade persist operations for entity: App\\Entity\\PostComment@185601. To solve this issue: Either explicitly call EntityManager#persist() on this unknown entity or configure cascade persist this association in the mapping for example #[ORM\\ManyToOne(..., cascade: ['persist'])]. If you cannot find out which entity causes the problem implement 'App\\Entity\\PostComment#__toString()' to get a clue.","exception":{"class":"Symfony\\Component\\Messenger\\Exception\\HandlerFailedException","message":"Handling \"App\\Message\\ActivityPub\\Inbox\\DeleteMessage\" failed: A new entity was found through the relationship 'App\\Entity\\Activity#objectPostComment' that was not configured to cascade persist operations for entity: App\\Entity\\PostComment@185601. To solve this issue: Either explicitly call EntityManager#persist() on this unknown entity or configure cascade persist this association in the mapping for example #[ORM\\ManyToOne(..., cascade: ['persist'])]. If you cannot find out which entity causes the problem implement 'App\\Entity\\PostComment#__toString()' to get a clue.","code":0,"file":"/var/www/kbin.melroy.org/html/vendor/symfony/messenger/Middleware/HandleMessageMiddleware.php:121","previous":{"class":"Doctrine\\ORM\\ORMInvalidArgumentException","message":"A new entity was found through the relationship 'App\\Entity\\Activity#objectPostComment' that was not configured to cascade persist operations for entity: App\\Entity\\PostComment@185601. To solve this issue: Either explicitly call EntityManager#persist() on this unknown entity or configure cascade persist this association in the mapping for example #[ORM\\ManyToOne(..., cascade: ['persist'])]. If you cannot find out which entity causes the problem implement 'App\\Entity\\PostComment#__toString()' to get a clue.","code":0,"file":"/var/www/kbin.melroy.org/html/vendor/doctrine/orm/src/ORMInvalidArgumentException.php:68"}}},"level":500,"level_name":"CRITICAL","channel":"messenger","datetime":"2026-04-03T17:31:25.952360+00:00","extra":{}}Root cause?
After 5 retries, Symfony Messenger resets the EntityManager between attempts. In
DeleteHandler::doWork(), the PostComment fetched viafind()on line 79 is managed in the current EM session. However,ActivityRepository::createForRemoteActivitycallsflush()internally after settingobjectPostComment = $entityon the new Activity. If the EntityManager (Doctirne entrie managers) was reset/cleared at any point during the retry cycle, Doctrine's UnitOfWork no longer tracks the PostComment and treats it as a "new" unmanaged entity: triggering the ORMInvalidArgumentException.Possible fix
In
createForRemoteActivity, before callingflush(), explicitlypersist()the passed $object entity when it's an object (excluding Activity itself, which is already handled separately via innerActivity). In ActivityRepository.php:Calling
persist()on an already-managed entity is a no-op, so this is safe for normal code paths. For stale/detached entities after EM resets, it re-registers them into the identity map before the flush, preventing the crash.