src/vs/workbench/contrib/notebook/browser/services/notebookExecutionStateServiceImpl.ts/NotebookExecutionStateService/_onCellExecutionDidComplete
class NotebookExecutionStateService:	private _onCellExecutionDidComplete(notebookUri: URI, cellHandle: number, exe: CellExecution, lastRunSuccess?: boolean): void {
		const notebookExecutions = this._executions.get(notebookUri);
		if (!notebookExecutions) {
			this._logService.debug(`NotebookExecutionStateService#_onCellExecutionDidComplete - unknown notebook ${notebookUri.toString()}`);
			return;
		}

		exe.dispose();
		const cellUri = CellUri.generate(notebookUri, cellHandle);
		this._cellListeners.get(cellUri)?.dispose();
		this._cellListeners.delete(cellUri);
		notebookExecutions.delete(cellHandle);
		if (notebookExecutions.size === 0) {
			this._executions.delete(notebookUri);
			this._notebookListeners.get(notebookUri)?.dispose();
			this._notebookListeners.delete(notebookUri);
		}

		if (lastRunSuccess !== undefined) {
			if (lastRunSuccess) {
				if (this._executions.size === 0) {
					this._audioCueService.playAudioCue(AudioCue.notebookCellCompleted);
				}
				this._clearLastFailedCell(notebookUri);
			} else {
				this._audioCueService.playAudioCue(AudioCue.notebookCellFailed);
				this._setLastFailedCell(notebookUri, cellHandle);
			}
		}

		this._onDidChangeCellExecution.fire(new NotebookExecutionEvent(notebookUri, cellHandle));
	}