# Comparison Execution Internals The comparison execution core receives an already prepared report and an already inspected, ordered profile list. It initializes an outcome for every selected profile, launches each started profile in its own goroutine, and waits for every started goroutine before returning. Results retain the supplied selection order even though execution completes in an arbitrary order. Every profile uses the exact inspected prompt identity and a private copy of the same prepared data package. Provider, generated-text validation, rendering, or debug-write failure becomes that profile's safe failed outcome and does not cancel its peers. The application deliberately imposes no additional semaphore: Promptkit owns backend capacity. Cancellation or a deadline marks unfinished outcomes as skipped or failed, joins work, and prevents bundle publication. When debugging is enabled, each execution receives a deterministic reference derived from the comparison identity, ordered profile position, and safe profile slug. This keeps concurrent captures separate. The debug writer itself owns secure-root validation and file permissions. It safely creates shared missing ancestors during concurrent writes, then rejects symlink and non- directory components. Operational retention and sensitivity are documented in the [operations guide](../operations.md). The output result and its safe errors are converted into the durable contract only by comparison publication. See [comparison publication internals](comparison-publication.md) and the external [comparison bundle contract](../integrations/comparison-bundle.md).