diff --git a/.gitignore b/.gitignore index 63f43eb7..a7bbb5c8 100644 --- a/.gitignore +++ b/.gitignore @@ -29,3 +29,5 @@ nul .spawner/ svelte-check-output.txt .gstack/ +# Office lockfiles (Word/Excel/PowerPoint create these when files are open) +~$* diff --git a/src/lib/components/MissionBoard.svelte b/src/lib/components/MissionBoard.svelte index 72ddad4a..3efaad02 100644 --- a/src/lib/components/MissionBoard.svelte +++ b/src/lib/components/MissionBoard.svelte @@ -458,7 +458,7 @@ const counts = getMissionBoardWorkBreakdown(card).build; if (!counts || counts.total <= 0) { if (card.status === 'completed') return 100; - if (card.status === 'running') return 48; + if (card.status === 'running') return 0; return 0; } return Math.round(((counts.completed + counts.failed + counts.cancelled) / counts.total) * 100); diff --git a/src/lib/services/completion-evidence-display.ts b/src/lib/services/completion-evidence-display.ts index 583e08ab..e0960b34 100644 --- a/src/lib/services/completion-evidence-display.ts +++ b/src/lib/services/completion-evidence-display.ts @@ -13,5 +13,5 @@ export function completionEvidenceTooltipForDisplay( ): string | null { if (!evidence || evidence.state === 'not_terminal') return null; if (evidence.state === 'complete') return 'Completion proof is present.'; - return 'Completion proof is incomplete.'; + return evidence.summary || 'Completion proof is incomplete.'; } diff --git a/src/lib/stores/canvas.svelte.ts b/src/lib/stores/canvas.svelte.ts index 9d0a4e2f..ee9d2c2e 100644 --- a/src/lib/stores/canvas.svelte.ts +++ b/src/lib/stores/canvas.svelte.ts @@ -270,7 +270,7 @@ export function addNodesWithConnections( const sourceId = nodeIds[connDef.sourceIndex]; const targetId = nodeIds[connDef.targetIndex]; if (sourceId && targetId) { - const id = 'conn-' + Math.random().toString(36).slice(2, 10); + const id = 'conn-' + crypto.randomUUID(); const connection: Connection = { id, sourceNodeId: sourceId, @@ -437,7 +437,7 @@ export function duplicateSelected(): string[] { ); const newConnections: Connection[] = connectionsToDuplicate.map((conn) => ({ ...conn, - id: 'conn-' + Math.random().toString(36).slice(2, 10), + id: 'conn-' + crypto.randomUUID(), sourceNodeId: idMap[conn.sourceNodeId], targetNodeId: idMap[conn.targetNodeId] })); @@ -493,7 +493,7 @@ export function pasteFromClipboard(): string[] { // Recreate connections const newConnections: Connection[] = clipboard.connections.map((conn) => ({ ...conn, - id: 'conn-' + Math.random().toString(36).slice(2, 10), + id: 'conn-' + crypto.randomUUID(), sourceNodeId: idMap[conn.sourceNodeId], targetNodeId: idMap[conn.targetNodeId] })); @@ -523,7 +523,7 @@ export function addConnection( ): string { pushHistory(); - const id = 'conn-' + Math.random().toString(36).slice(2, 10); + const id = 'conn-' + crypto.randomUUID(); const connection: Connection = { id, sourceNodeId, diff --git a/src/routes/missions/+page.svelte b/src/routes/missions/+page.svelte index a296c029..d3b157e1 100644 --- a/src/routes/missions/+page.svelte +++ b/src/routes/missions/+page.svelte @@ -259,7 +259,7 @@