Deleting a comment removed every reply under it, through the parent_id ON DELETE CASCADE. Now delete removes only that comment: one with replies becomes a tombstone (deleted_at set, body/attachments/reactions/resolution cleared) so the replies keep their parent, and one without replies is removed along with any tombstone ancestor left empty.
Tombstones are read-only and are never agent input. Every write to a comment's children takes its owners first (issue -> comment -> child), and a comment commits together with the attachments it was posted with. Clients only promise that replies are kept when the server declares comment_delete_keep_replies_supported, and then delete through DELETE /api/comments/{id}/keep-replies, which older servers do not route.
These tests exercise no production code path: each compares a package-level
constant, map or slice against a literal copy of its own declaration, so the
only way to make one fail is to edit the test in the same commit as the
source. That makes them a rename tax rather than a safety net.
Removed:
- cmd/multica: TestValidIssueStatuses (mirrors validIssueStatuses),
TestLoadConfigAllowNoAgentsIsOptIn (asserts the bool zero value that the
language already guarantees)
- internal/integrations/channel: TestCapability_BitsDistinct (iota block)
- internal/integrations/wecom: TestUnsupportedReceipt_DoesNotClaimTextOnly
- internal/daemon: TestAnnotationAvoidsPersistedRowGuards
- internal/metrics: TestBusinessMetricLabelsRejectHighCardinalityNames
- internal/service: TestChatQuickActionsPromptsNameNoLanguage
- internal/events: TestPublishNoSubscribersIsNoop (asserted nothing at all)
- pkg/agent: TestMcodeBlockedArgsKeepACPTransportStable,
TestQwenpawBlockedArgs, TestZeroclawBlockedArgs,
TestClaudeListModelsArgs_Pinned
- pkg/publicapi/v1: TestOperationLedgerPinsSharedScopes,
TestPluginExtensionsRejectUserCredentialsByContract,
TestOperationLedgerDeclaresAuditLifecycle
Behavioural tests over the same symbols are kept, including
TestCapability_Has, TestCapability_String, TestValidateIssueStatus and
TestOpenAPICoversCapabilityLedger — the last checks the operation ledger
against the embedded OpenAPI document rather than against itself.
Co-authored-by: Sol-Boy <[email protected]>
Co-authored-by: multica-agent <[email protected]>