fix: Strip runtime and state fields when duplicating features

This commit is contained in:
gsxdsm
2026-02-16 23:41:08 -08:00
parent 44ef2084cf
commit b9653d6338
2 changed files with 21 additions and 2 deletions

View File

@@ -1092,8 +1092,20 @@ export function useBoardActions({
const handleDuplicateFeature = useCallback(
async (feature: Feature, asChild: boolean = false) => {
// Copy all feature data, only override id/status (handled by create) and dependencies if as child
const { id: _id, status: _status, ...featureData } = feature;
// Copy all feature data, stripping id, status (handled by create), and runtime/state fields
const {
id: _id,
status: _status,
startedAt: _startedAt,
error: _error,
summary: _summary,
spec: _spec,
passes: _passes,
planSpec: _planSpec,
descriptionHistory: _descriptionHistory,
titleGenerating: _titleGenerating,
...featureData
} = feature;
const duplicatedFeatureData = {
...featureData,
// If duplicating as child, set source as dependency; otherwise keep existing

View File

@@ -132,6 +132,13 @@ export function useBoardPersistence({ currentProject }: UseBoardPersistenceProps
const api = getElectronAPI();
if (!api.features) {
logger.error('Features API not available');
// Rollback optimistic deletion since we can't persist
if (previousFeatures) {
queryClient.setQueryData(queryKeys.features.all(currentProject.path), previousFeatures);
}
queryClient.invalidateQueries({
queryKey: queryKeys.features.all(currentProject.path),
});
return;
}