From ff6a8fec306b5923b5def1192943b98ad8bcfef8 Mon Sep 17 00:00:00 2001 From: konard Date: Tue, 12 May 2026 21:27:17 +0000 Subject: [PATCH 1/4] Initial commit with task details Adding .gitkeep for PR creation (default mode). This file will be removed when the task is complete. Issue: https://github.com/link-foundation/link-cli/issues/86 --- .gitkeep | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitkeep diff --git a/.gitkeep b/.gitkeep new file mode 100644 index 0000000..b503c3d --- /dev/null +++ b/.gitkeep @@ -0,0 +1 @@ +# .gitkeep file auto-generated at 2026-05-12T21:27:17.058Z for PR creation at branch issue-86-799717a6ecc6 for issue https://github.com/link-foundation/link-cli/issues/86 \ No newline at end of file From 6522a337a330fe0ab3ca61f10e68e6e95b76ffdc Mon Sep 17 00:00:00 2001 From: konard Date: Tue, 12 May 2026 21:40:49 +0000 Subject: [PATCH 2/4] fix(csharp): wait for NuGet indexing --- .github/workflows/csharp.yml | 38 +--- csharp/scripts/release-scripts.test.mjs | 83 +++++++++ csharp/scripts/wait-for-nuget.mjs | 238 ++++++++++++++++++++++++ 3 files changed, 327 insertions(+), 32 deletions(-) create mode 100644 csharp/scripts/wait-for-nuget.mjs diff --git a/.github/workflows/csharp.yml b/.github/workflows/csharp.yml index a2517c9..2b4ded4 100644 --- a/.github/workflows/csharp.yml +++ b/.github/workflows/csharp.yml @@ -367,22 +367,9 @@ jobs: steps.version.outputs.already_released == 'true' || (steps.check_release.outputs.should_release == 'true' && steps.check_release.outputs.skip_bump == 'true')) run: | - PACKAGE_ID="${{ steps.package.outputs.id }}" - PACKAGE_ID_LOWER="${{ steps.package.outputs.flat_container_id }}" - VERSION="${{ steps.release_version.outputs.version }}" - for DELAY in 0 5 10 20 30 60; do - if [ "$DELAY" != "0" ]; then - sleep "$DELAY" - fi - STATUS=$(curl -sS -o /dev/null -w '%{http_code}' "https://api.nuget.org/v3-flatcontainer/${PACKAGE_ID_LOWER}/${VERSION}/${PACKAGE_ID_LOWER}.nuspec" || true) - echo "NuGet status for ${PACKAGE_ID}@${VERSION}: ${STATUS}" - if [ "$STATUS" = "200" ]; then - echo "Verified ${PACKAGE_ID}@${VERSION} is available on NuGet" - exit 0 - fi - done - echo "::error title=NuGet verification failed::${PACKAGE_ID}@${VERSION} was not available from NuGet after publish." - exit 1 + node scripts/wait-for-nuget.mjs \ + --package-id "${{ steps.package.outputs.id }}" \ + --release-version "${{ steps.release_version.outputs.version }}" - name: Create GitHub Release if: >- @@ -481,22 +468,9 @@ jobs: steps.version.outputs.version_committed == 'true' || steps.version.outputs.already_released == 'true') run: | - PACKAGE_ID="${{ steps.package.outputs.id }}" - PACKAGE_ID_LOWER="${{ steps.package.outputs.flat_container_id }}" - VERSION="${{ steps.version.outputs.new_version }}" - for DELAY in 0 5 10 20 30 60; do - if [ "$DELAY" != "0" ]; then - sleep "$DELAY" - fi - STATUS=$(curl -sS -o /dev/null -w '%{http_code}' "https://api.nuget.org/v3-flatcontainer/${PACKAGE_ID_LOWER}/${VERSION}/${PACKAGE_ID_LOWER}.nuspec" || true) - echo "NuGet status for ${PACKAGE_ID}@${VERSION}: ${STATUS}" - if [ "$STATUS" = "200" ]; then - echo "Verified ${PACKAGE_ID}@${VERSION} is available on NuGet" - exit 0 - fi - done - echo "::error title=NuGet verification failed::${PACKAGE_ID}@${VERSION} was not available from NuGet after publish." - exit 1 + node scripts/wait-for-nuget.mjs \ + --package-id "${{ steps.package.outputs.id }}" \ + --release-version "${{ steps.version.outputs.new_version }}" - name: Create GitHub Release if: >- diff --git a/csharp/scripts/release-scripts.test.mjs b/csharp/scripts/release-scripts.test.mjs index 0389219..78ef2bc 100644 --- a/csharp/scripts/release-scripts.test.mjs +++ b/csharp/scripts/release-scripts.test.mjs @@ -14,6 +14,13 @@ import test from 'node:test'; import { promisify } from 'node:util'; import { decide, readCsprojInfo } from './check-release-needed.mjs'; +import { + DEFAULT_MAX_ATTEMPTS, + DEFAULT_SLEEP_SECONDS, + createNugetNuspecUrl, + parseArgs as parseWaitForNugetArgs, + waitForNugetPackage, +} from './wait-for-nuget.mjs'; const execFileAsync = promisify(execFile); @@ -381,3 +388,79 @@ test('check-release-needed CLI short-circuits when NuGet and GitHub already have assert.match(outputs, /^nuget_published=true$/m); assert.match(outputs, /^github_release_exists=true$/m); }); + +test('wait-for-nuget defaults to two-minute checks across the NuGet indexing window', () => { + const config = parseWaitForNugetArgs( + ['--package-id', 'clink', '--release-version', '2.4.0'], + {} + ); + + assert.equal(config.packageId, 'clink'); + assert.equal(config.releaseVersion, '2.4.0'); + assert.equal(config.maxAttempts, DEFAULT_MAX_ATTEMPTS); + assert.equal(config.sleepSeconds, DEFAULT_SLEEP_SECONDS); + assert.equal(DEFAULT_MAX_ATTEMPTS, 8); + assert.equal(DEFAULT_SLEEP_SECONDS, 120); +}); + +test('wait-for-nuget builds the flat-container nuspec URL', () => { + assert.equal( + createNugetNuspecUrl({ + flatContainerUrl: 'https://api.nuget.org/v3-flatcontainer/', + packageId: 'Clink', + version: '2.4.0', + }), + 'https://api.nuget.org/v3-flatcontainer/clink/2.4.0/clink.nuspec' + ); +}); + +test('wait-for-nuget succeeds when indexing takes longer than the old 125 second loop', async () => { + let attempts = 0; + const sleeps = []; + + const available = await waitForNugetPackage({ + checkAvailability: async () => { + attempts++; + return { + available: attempts === 8, + status: attempts === 8 ? 200 : 404, + }; + }, + maxAttempts: 8, + packageId: 'clink', + sleepFn: async (seconds) => { + sleeps.push(seconds); + }, + sleepSeconds: 120, + stdout: () => {}, + version: '2.4.0', + }); + + assert.equal(available, true); + assert.equal(attempts, 8); + assert.deepEqual(sleeps, [120, 120, 120, 120, 120, 120, 120]); +}); + +test('wait-for-nuget fails only after exhausting all attempts', async () => { + let attempts = 0; + const sleeps = []; + + const available = await waitForNugetPackage({ + checkAvailability: async () => { + attempts++; + return { available: false, status: 404 }; + }, + maxAttempts: 3, + packageId: 'clink', + sleepFn: async (seconds) => { + sleeps.push(seconds); + }, + sleepSeconds: 120, + stdout: () => {}, + version: '2.4.0', + }); + + assert.equal(available, false); + assert.equal(attempts, 3); + assert.deepEqual(sleeps, [120, 120]); +}); diff --git a/csharp/scripts/wait-for-nuget.mjs b/csharp/scripts/wait-for-nuget.mjs new file mode 100644 index 0000000..2ff6f88 --- /dev/null +++ b/csharp/scripts/wait-for-nuget.mjs @@ -0,0 +1,238 @@ +#!/usr/bin/env node + +/** + * Wait for a NuGet package version to become available from the flat-container API. + * + * NuGet package validation and indexing usually finish within 15 minutes. The + * release workflow uses this script after `dotnet nuget push` so GitHub releases + * are created only after the package can be restored by users. + * + * Usage: + * node csharp/scripts/wait-for-nuget.mjs --package-id --release-version + * + * Optional arguments: + * --max-attempts Defaults to 8. + * --sleep-seconds Defaults to 120. + * --flat-container-url Defaults to https://api.nuget.org/v3-flatcontainer. + * + * Outputs (written to GITHUB_OUTPUT): + * - nuget_available: 'true' when the package version is visible. + */ + +import { appendFileSync } from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const DEFAULT_FLAT_CONTAINER_URL = 'https://api.nuget.org/v3-flatcontainer'; +export const DEFAULT_MAX_ATTEMPTS = 8; +export const DEFAULT_SLEEP_SECONDS = 120; + +function readCliOptions(argv) { + const options = {}; + + for (let index = 0; index < argv.length; index++) { + const arg = argv[index]; + if (!arg.startsWith('--')) { + continue; + } + + const inlineValueIndex = arg.indexOf('='); + if (inlineValueIndex !== -1) { + options[arg.slice(2, inlineValueIndex)] = arg.slice(inlineValueIndex + 1); + continue; + } + + const value = argv[index + 1]; + if (value === undefined || value.startsWith('--')) { + throw new Error(`Missing value for ${arg}`); + } + + options[arg.slice(2)] = value; + index++; + } + + return options; +} + +function parsePositiveInteger(value, optionName) { + const parsed = Number(value); + if (!Number.isInteger(parsed) || parsed < 1) { + throw new Error(`${optionName} must be a positive integer`); + } + return parsed; +} + +export function parseArgs(argv, env = process.env) { + const cliOptions = readCliOptions(argv); + + return { + flatContainerUrl: + cliOptions['flat-container-url'] || + env.NUGET_FLAT_CONTAINER_URL || + env.NUGET_INDEX_URL || + DEFAULT_FLAT_CONTAINER_URL, + maxAttempts: parsePositiveInteger( + cliOptions['max-attempts'] || + env.NUGET_WAIT_MAX_ATTEMPTS || + env.MAX_ATTEMPTS || + String(DEFAULT_MAX_ATTEMPTS), + '--max-attempts' + ), + packageId: cliOptions['package-id'] || env.PACKAGE_ID || '', + releaseVersion: + cliOptions['release-version'] || + cliOptions.version || + env.RELEASE_VERSION || + env.VERSION || + '', + sleepSeconds: parsePositiveInteger( + cliOptions['sleep-seconds'] || + env.NUGET_WAIT_SLEEP_SECONDS || + env.SLEEP_SECONDS || + String(DEFAULT_SLEEP_SECONDS), + '--sleep-seconds' + ), + }; +} + +export function createNugetNuspecUrl({ + flatContainerUrl = DEFAULT_FLAT_CONTAINER_URL, + packageId, + version, +}) { + const baseUrl = flatContainerUrl.replace(/\/+$/, ''); + const lowerPackageId = packageId.toLowerCase(); + const lowerVersion = version.toLowerCase(); + return `${baseUrl}/${lowerPackageId}/${lowerVersion}/${lowerPackageId}.nuspec`; +} + +export async function checkNugetPackageVersion({ + fetchImpl = fetch, + flatContainerUrl = DEFAULT_FLAT_CONTAINER_URL, + packageId, + version, +}) { + const url = createNugetNuspecUrl({ flatContainerUrl, packageId, version }); + + try { + const response = await fetchImpl(url, { method: 'HEAD' }); + return { + available: response.status === 200, + status: response.status, + url, + }; + } catch (error) { + return { + available: false, + error: error.message, + status: 'network-error', + url, + }; + } +} + +function sleep(seconds) { + return new Promise((resolve) => { + globalThis.setTimeout(resolve, seconds * 1000); + }); +} + +function setOutput(name, value) { + const outputFile = process.env.GITHUB_OUTPUT; + if (outputFile) { + appendFileSync(outputFile, `${name}=${value}\n`); + } + console.log(`Output: ${name}=${value}`); +} + +export async function waitForNugetPackage({ + checkAvailability = checkNugetPackageVersion, + flatContainerUrl = DEFAULT_FLAT_CONTAINER_URL, + maxAttempts = DEFAULT_MAX_ATTEMPTS, + packageId, + sleepFn = sleep, + sleepSeconds = DEFAULT_SLEEP_SECONDS, + stdout = console.log, + version, +}) { + for (let attempt = 1; attempt <= maxAttempts; attempt++) { + const result = await checkAvailability({ + flatContainerUrl, + packageId, + version, + }); + + stdout( + `NuGet availability for ${packageId}@${version}: ${result.status} ` + + `(attempt ${attempt}/${maxAttempts})` + ); + + if (result.available) { + return true; + } + + if (result.error) { + stdout(`NuGet availability check warning: ${result.error}`); + } + + if (attempt < maxAttempts) { + stdout(`Waiting ${sleepSeconds}s before the next NuGet availability check`); + await sleepFn(sleepSeconds); + } + } + + return false; +} + +export async function main({ + argv = process.argv.slice(2), + env = process.env, + stderr = console.error, + stdout = console.log, +} = {}) { + try { + const config = parseArgs(argv, env); + if (!config.packageId || !config.releaseVersion) { + stderr( + 'Error: --package-id and --release-version are required for NuGet availability checks' + ); + return 1; + } + + stdout( + `Waiting for ${config.packageId}@${config.releaseVersion} on NuGet ` + + `(${config.maxAttempts} attempts, ${config.sleepSeconds}s interval)` + ); + + const available = await waitForNugetPackage({ + flatContainerUrl: config.flatContainerUrl, + maxAttempts: config.maxAttempts, + packageId: config.packageId, + sleepSeconds: config.sleepSeconds, + stdout, + version: config.releaseVersion, + }); + + setOutput('nuget_available', available ? 'true' : 'false'); + + if (!available) { + stderr( + `${config.packageId}@${config.releaseVersion} did not become available on NuGet` + ); + return 1; + } + + stdout(`${config.packageId}@${config.releaseVersion} is available on NuGet`); + return 0; + } catch (error) { + stderr(`Error: ${error.message}`); + return 1; + } +} + +const invokedDirectly = process.argv[1] + && fileURLToPath(import.meta.url) === path.resolve(process.argv[1]); + +if (invokedDirectly) { + process.exitCode = await main(); +} From 09dc9476b69018f29b879c1a66af1146a67cebc8 Mon Sep 17 00:00:00 2001 From: konard Date: Tue, 12 May 2026 21:41:09 +0000 Subject: [PATCH 3/4] docs: add issue 86 NuGet indexing case study --- docs/case-studies/issue-86/README.md | 104 + .../csharp-run-25760911270-attempt-1.json | 1 + .../csharp-run-25760911270-jobs.json | 1 + .../github-data/csharp-run-25760911270.json | 1 + .../github-data/csharp-template-issue-13.json | 1 + .../github-data/csharp-v2.4.0-release.json | 1 + .../github-data/dotnet-test-release.log | 574 ++ .../issue-86/github-data/git-diff-check.log | 0 .../github-data/investigation-timestamp.txt | 1 + .../github-data/issue-86-comments.json | 1 + .../issue-86/github-data/issue-86.json | 1 + .../github-data/local-ci-file-tree.txt | 36 + .../github-data/node-check-wait-for-nuget.log | 0 .../github-data/node-release-scripts-test.log | 96 + .../github-data/nuget-clink-2.4.0.headers.txt | 20 + .../github-data/nuget-clink-2.4.0.nuspec | 16 + .../github-data/nuget-clink-index.headers.txt | 20 + .../github-data/nuget-clink-index.json | 29 + .../issue-86/github-data/pr-87-comments.json | 1 + .../github-data/pr-87-review-comments.json | 1 + .../issue-86/github-data/pr-87-reviews.json | 1 + .../issue-86/github-data/pr-87.json | 1 + .../wait-for-nuget-clink-2.4.0.log | 4 + ...csharp-run-25760911270-publish-excerpt.log | 31 + ...p-run-25760911270-verify-nuget-excerpt.log | 61 + .../issue-86/logs/csharp-run-25760911270.log | 6472 +++++++++++++++++ .../check-release-needed.mjs | 338 + .../file-tree.txt | 43 + .../release.yml | 580 ++ .../tree.json | 1 + .../version-and-commit.mjs | 412 ++ .../check-release-needed.mjs | 123 + .../file-tree.txt | 345 + .../publish-to-npm.mjs | 325 + .../release.yml | 617 ++ .../tree.json | 1 + .../wait-for-npm.mjs | 191 + .../create_github_release.py | 201 + .../file-tree.txt | 36 + .../publish_to_pypi.py | 157 + .../release.yml | 354 + .../tree.json | 1 + .../version_and_commit.py | 237 + .../check-release-needed.rs | 395 + .../file-tree.txt | 147 + .../publish-crate.rs | 179 + .../release.yml | 670 ++ .../tree.json | 1 + .../wait-for-crate.rs | 178 + 49 files changed, 13007 insertions(+) create mode 100644 docs/case-studies/issue-86/README.md create mode 100644 docs/case-studies/issue-86/github-data/csharp-run-25760911270-attempt-1.json create mode 100644 docs/case-studies/issue-86/github-data/csharp-run-25760911270-jobs.json create mode 100644 docs/case-studies/issue-86/github-data/csharp-run-25760911270.json create mode 100644 docs/case-studies/issue-86/github-data/csharp-template-issue-13.json create mode 100644 docs/case-studies/issue-86/github-data/csharp-v2.4.0-release.json create mode 100644 docs/case-studies/issue-86/github-data/dotnet-test-release.log create mode 100644 docs/case-studies/issue-86/github-data/git-diff-check.log create mode 100644 docs/case-studies/issue-86/github-data/investigation-timestamp.txt create mode 100644 docs/case-studies/issue-86/github-data/issue-86-comments.json create mode 100644 docs/case-studies/issue-86/github-data/issue-86.json create mode 100644 docs/case-studies/issue-86/github-data/local-ci-file-tree.txt create mode 100644 docs/case-studies/issue-86/github-data/node-check-wait-for-nuget.log create mode 100644 docs/case-studies/issue-86/github-data/node-release-scripts-test.log create mode 100644 docs/case-studies/issue-86/github-data/nuget-clink-2.4.0.headers.txt create mode 100644 docs/case-studies/issue-86/github-data/nuget-clink-2.4.0.nuspec create mode 100644 docs/case-studies/issue-86/github-data/nuget-clink-index.headers.txt create mode 100644 docs/case-studies/issue-86/github-data/nuget-clink-index.json create mode 100644 docs/case-studies/issue-86/github-data/pr-87-comments.json create mode 100644 docs/case-studies/issue-86/github-data/pr-87-review-comments.json create mode 100644 docs/case-studies/issue-86/github-data/pr-87-reviews.json create mode 100644 docs/case-studies/issue-86/github-data/pr-87.json create mode 100644 docs/case-studies/issue-86/github-data/wait-for-nuget-clink-2.4.0.log create mode 100644 docs/case-studies/issue-86/logs/csharp-run-25760911270-publish-excerpt.log create mode 100644 docs/case-studies/issue-86/logs/csharp-run-25760911270-verify-nuget-excerpt.log create mode 100644 docs/case-studies/issue-86/logs/csharp-run-25760911270.log create mode 100644 docs/case-studies/issue-86/templates/csharp-ai-driven-development-pipeline-template/check-release-needed.mjs create mode 100644 docs/case-studies/issue-86/templates/csharp-ai-driven-development-pipeline-template/file-tree.txt create mode 100644 docs/case-studies/issue-86/templates/csharp-ai-driven-development-pipeline-template/release.yml create mode 100644 docs/case-studies/issue-86/templates/csharp-ai-driven-development-pipeline-template/tree.json create mode 100644 docs/case-studies/issue-86/templates/csharp-ai-driven-development-pipeline-template/version-and-commit.mjs create mode 100644 docs/case-studies/issue-86/templates/js-ai-driven-development-pipeline-template/check-release-needed.mjs create mode 100644 docs/case-studies/issue-86/templates/js-ai-driven-development-pipeline-template/file-tree.txt create mode 100644 docs/case-studies/issue-86/templates/js-ai-driven-development-pipeline-template/publish-to-npm.mjs create mode 100644 docs/case-studies/issue-86/templates/js-ai-driven-development-pipeline-template/release.yml create mode 100644 docs/case-studies/issue-86/templates/js-ai-driven-development-pipeline-template/tree.json create mode 100644 docs/case-studies/issue-86/templates/js-ai-driven-development-pipeline-template/wait-for-npm.mjs create mode 100644 docs/case-studies/issue-86/templates/python-ai-driven-development-pipeline-template/create_github_release.py create mode 100644 docs/case-studies/issue-86/templates/python-ai-driven-development-pipeline-template/file-tree.txt create mode 100644 docs/case-studies/issue-86/templates/python-ai-driven-development-pipeline-template/publish_to_pypi.py create mode 100644 docs/case-studies/issue-86/templates/python-ai-driven-development-pipeline-template/release.yml create mode 100644 docs/case-studies/issue-86/templates/python-ai-driven-development-pipeline-template/tree.json create mode 100644 docs/case-studies/issue-86/templates/python-ai-driven-development-pipeline-template/version_and_commit.py create mode 100644 docs/case-studies/issue-86/templates/rust-ai-driven-development-pipeline-template/check-release-needed.rs create mode 100644 docs/case-studies/issue-86/templates/rust-ai-driven-development-pipeline-template/file-tree.txt create mode 100644 docs/case-studies/issue-86/templates/rust-ai-driven-development-pipeline-template/publish-crate.rs create mode 100644 docs/case-studies/issue-86/templates/rust-ai-driven-development-pipeline-template/release.yml create mode 100644 docs/case-studies/issue-86/templates/rust-ai-driven-development-pipeline-template/tree.json create mode 100644 docs/case-studies/issue-86/templates/rust-ai-driven-development-pipeline-template/wait-for-crate.rs diff --git a/docs/case-studies/issue-86/README.md b/docs/case-studies/issue-86/README.md new file mode 100644 index 0000000..561a2ab --- /dev/null +++ b/docs/case-studies/issue-86/README.md @@ -0,0 +1,104 @@ +# Issue 86 Case Study: NuGet Indexing Delay Broke C# Release Verification + +Issue: https://github.com/link-foundation/link-cli/issues/86 + +Prepared PR: https://github.com/link-foundation/link-cli/pull/87 + +Failed run: https://github.com/link-foundation/link-cli/actions/runs/25760911270 + +Upstream template report: https://github.com/link-foundation/csharp-ai-driven-development-pipeline-template/issues/13 + +## Requirements + +Restated from issue #86: + +1. Preserve the issue, PR, run metadata, and CI logs under `docs/case-studies/issue-86`. +2. Reconstruct the failed release timeline and identify the root cause. +3. Search official/public sources for NuGet indexing behavior. +4. Compare local CI/CD files with the JavaScript, Rust, Python, and C# templates. +5. Reuse template best practices where they address the same class of failure. +6. Report the same issue upstream if it exists in a template repository. +7. Add regression coverage and fix the C# workflow so package availability is checked every 2 minutes across the normal NuGet indexing window. + +## Timeline + +- `2026-05-12T20:40:11Z`: C# CI/CD run `25760911270` started on `main` at `0c8092c`. +- `2026-05-12T21:20:40Z`: The Release job entered `Publish to NuGet`. +- `2026-05-12T21:20:41Z`: `dotnet nuget push` completed and the workflow moved to `Verify package on NuGet`. +- `2026-05-12T21:20:41Z` through `2026-05-12T21:22:47Z`: The verifier checked `clink@2.4.0` at delay schedule `0, 5, 10, 20, 30, 60` seconds. Every flat-container nuspec check returned HTTP 404. Evidence: `logs/csharp-run-25760911270-verify-nuget-excerpt.log`. +- `2026-05-12T21:22:47Z`: The Release job failed with `clink@2.4.0 was not available from NuGet after publish`. +- `2026-05-12T21:24:36Z`: NuGet flat-container later showed `clink@2.4.0` as available by the blob `last-modified` header. Evidence: `github-data/nuget-clink-2.4.0.headers.txt`. +- `2026-05-12T21:29:51Z`: The investigation confirmed `https://api.nuget.org/v3-flatcontainer/clink/2.4.0/clink.nuspec` returned HTTP 200 and the package index included `2.4.0`. Evidence: `github-data/nuget-clink-index.json` and `github-data/wait-for-nuget-clink-2.4.0.log`. +- At investigation time, the GitHub release `csharp-v2.4.0` was still missing because `Create GitHub Release` was skipped after the NuGet verification failure. Evidence: `github-data/csharp-v2.4.0-release.json`. + +## Evidence + +- Issue and PR data: `github-data/issue-86.json`, `github-data/issue-86-comments.json`, `github-data/pr-87.json`, `github-data/pr-87-comments.json`, `github-data/pr-87-review-comments.json`, `github-data/pr-87-reviews.json`. +- Run data: `github-data/csharp-run-25760911270.json`, `github-data/csharp-run-25760911270-jobs.json`, `github-data/csharp-run-25760911270-attempt-1.json`. +- Logs: `logs/csharp-run-25760911270.log`, with focused excerpts in `logs/csharp-run-25760911270-publish-excerpt.log` and `logs/csharp-run-25760911270-verify-nuget-excerpt.log`. +- NuGet state: `github-data/nuget-clink-index.json`, `github-data/nuget-clink-index.headers.txt`, `github-data/nuget-clink-2.4.0.nuspec`, `github-data/nuget-clink-2.4.0.headers.txt`. +- Template data: `templates/*/tree.json`, `templates/*/file-tree.txt`, and fetched release workflow/scripts for JS, Rust, Python, and C# templates. +- Validation logs: `github-data/node-release-scripts-test.log`, `github-data/wait-for-nuget-clink-2.4.0.log`. + +## Online Facts + +- Microsoft documents that NuGet packages pushed to nuget.org go through validation and indexing, and that validation/indexing usually take less than 15 minutes. Source: https://learn.microsoft.com/en-us/nuget/nuget-org/publish-a-package#package-validation-and-indexing +- Microsoft documents the NuGet flat-container `PackageBaseAddress` resource. The versions index lists versions available for package-content API calls, and a package nuspec endpoint returns 200 only when the package exists on the source, otherwise 404. Source: https://learn.microsoft.com/en-us/nuget/api/package-base-address-resource +- `dotnet nuget push --skip-duplicate` only treats HTTP 409 conflicts as warnings; it does not wait for package indexing. Source: https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-nuget-push + +## Root Cause + +The release workflow treated NuGet publish success as if the package would be immediately installable. In this run, NuGet accepted the push, but flat-container availability lagged beyond the workflow's hard-coded retry window. + +The old loop checked at 0, 5, 15, 35, 65, and 125 seconds after publish. NuGet made `clink@2.4.0` available around `2026-05-12T21:24:36Z`, about 3 minutes and 55 seconds after the publish step and about 1 minute and 49 seconds after the workflow had already failed. + +This is not a package-build failure and not a NuGet API key failure. It is a release-orchestration bug: the pipeline did not wait long enough for the registry state that the next step depends on. + +## Template Comparison + +- Local C# workflow and the C# template both used the same short inline NuGet verification loop. The same issue was reported upstream in `link-foundation/csharp-ai-driven-development-pipeline-template#13`. +- The JS template has a dedicated `scripts/wait-for-npm.mjs` script and invokes it before Docker publishing. It defaults to 30 attempts with 10-second intervals and has testable logic. +- The Rust template has a dedicated `scripts/wait-for-crate.rs` script and invokes it once `should_release == 'true'`, regardless of whether the current attempt performed the publish. It also centralizes registry availability logic outside YAML. +- The Python template does not contain NuGet behavior and has no directly matching defect. It publishes to PyPI through `pypa/gh-action-pypi-publish`, so it was recorded for comparison but not reported as this NuGet-specific issue. + +The reusable-script pattern from the JS and Rust templates is the best fit here: YAML should orchestrate, while package availability polling belongs in a tested script. + +## Implemented Solution + +Added `csharp/scripts/wait-for-nuget.mjs`. + +Behavior: + +- Checks `https://api.nuget.org/v3-flatcontainer/{lower-id}/{lower-version}/{lower-id}.nuspec`. +- Uses `HEAD` to avoid downloading package metadata when only availability is needed. +- Defaults to 8 attempts with 120 seconds between attempts. This checks immediately, then at roughly 2, 4, 6, 8, 10, 12, and 14 minutes after the first check. +- Writes `nuget_available=true|false` to `GITHUB_OUTPUT`. +- Supports override arguments and environment variables for tests and future tuning. + +Updated `.github/workflows/csharp.yml`: + +- Automatic release `Verify package on NuGet` now calls `node scripts/wait-for-nuget.mjs`. +- Manual instant release `Verify package on NuGet` now calls the same script. + +Added regression coverage in `csharp/scripts/release-scripts.test.mjs`: + +- Defaults are 8 attempts and 120-second sleeps. +- Flat-container nuspec URLs are normalized to lowercase package IDs. +- A package that becomes available only on the 8th attempt succeeds, covering the issue scenario where the old 125-second loop would fail. +- Exhausting all attempts returns failure. + +## Upstream Report + +The C# pipeline template contains the same short NuGet verification loop, so it was reported upstream: + +- https://github.com/link-foundation/csharp-ai-driven-development-pipeline-template/issues/13 + +The report includes the failing link-cli run, the old delay schedule, the observed later NuGet availability, a manual workaround, and the suggested tested-script fix. + +## Validation + +- `node --test csharp/scripts/*.test.mjs`: 16 tests pass. Log: `github-data/node-release-scripts-test.log`. +- `node --check csharp/scripts/wait-for-nuget.mjs`: passes. Log: `github-data/node-check-wait-for-nuget.log`. +- `dotnet test csharp/Foundation.Data.Doublets.Cli.sln --configuration Release`: 187 tests pass. Log: `github-data/dotnet-test-release.log`. +- `git diff --check`: passes. Log: `github-data/git-diff-check.log`. +- `node csharp/scripts/wait-for-nuget.mjs --package-id clink --release-version 2.4.0 --max-attempts 1`: confirms the package is now available from NuGet. Log: `github-data/wait-for-nuget-clink-2.4.0.log`. diff --git a/docs/case-studies/issue-86/github-data/csharp-run-25760911270-attempt-1.json b/docs/case-studies/issue-86/github-data/csharp-run-25760911270-attempt-1.json new file mode 100644 index 0000000..924a2d7 --- /dev/null +++ b/docs/case-studies/issue-86/github-data/csharp-run-25760911270-attempt-1.json @@ -0,0 +1 @@ +{"id":25760911270,"name":"C# CI/CD Pipeline","node_id":"WFR_kwLONXCAbs8AAAAF_3hPpg","head_branch":"main","head_sha":"0c8092c56b0fb11704f89398b6d831cd9bbe007d","path":".github/workflows/csharp.yml","display_title":"Merge pull request #85 from link-foundation/issue-84-0f4c3bcac49c","run_number":82,"event":"push","status":"completed","conclusion":"failure","workflow_id":131965046,"check_suite_id":68688271807,"check_suite_node_id":"CS_kwDONXCAbs8AAAAP_iPZvw","url":"https://api.github.com/repos/link-foundation/link-cli/actions/runs/25760911270","html_url":"https://github.com/link-foundation/link-cli/actions/runs/25760911270","pull_requests":[],"created_at":"2026-05-12T20:40:11Z","updated_at":"2026-05-12T20:44:20Z","actor":{"login":"konard","id":1431904,"node_id":"MDQ6VXNlcjE0MzE5MDQ=","avatar_url":"https://avatars.githubusercontent.com/u/1431904?v=4","gravatar_id":"","url":"https://api.github.com/users/konard","html_url":"https://github.com/konard","followers_url":"https://api.github.com/users/konard/followers","following_url":"https://api.github.com/users/konard/following{/other_user}","gists_url":"https://api.github.com/users/konard/gists{/gist_id}","starred_url":"https://api.github.com/users/konard/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/konard/subscriptions","organizations_url":"https://api.github.com/users/konard/orgs","repos_url":"https://api.github.com/users/konard/repos","events_url":"https://api.github.com/users/konard/events{/privacy}","received_events_url":"https://api.github.com/users/konard/received_events","type":"User","user_view_type":"public","site_admin":false},"run_attempt":1,"referenced_workflows":[],"run_started_at":"2026-05-12T20:40:11Z","triggering_actor":{"login":"konard","id":1431904,"node_id":"MDQ6VXNlcjE0MzE5MDQ=","avatar_url":"https://avatars.githubusercontent.com/u/1431904?v=4","gravatar_id":"","url":"https://api.github.com/users/konard","html_url":"https://github.com/konard","followers_url":"https://api.github.com/users/konard/followers","following_url":"https://api.github.com/users/konard/following{/other_user}","gists_url":"https://api.github.com/users/konard/gists{/gist_id}","starred_url":"https://api.github.com/users/konard/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/konard/subscriptions","organizations_url":"https://api.github.com/users/konard/orgs","repos_url":"https://api.github.com/users/konard/repos","events_url":"https://api.github.com/users/konard/events{/privacy}","received_events_url":"https://api.github.com/users/konard/received_events","type":"User","user_view_type":"public","site_admin":false},"jobs_url":"https://api.github.com/repos/link-foundation/link-cli/actions/runs/25760911270/attempts/1/jobs","logs_url":"https://api.github.com/repos/link-foundation/link-cli/actions/runs/25760911270/attempts/1/logs","check_suite_url":"https://api.github.com/repos/link-foundation/link-cli/check-suites/68688271807","artifacts_url":"https://api.github.com/repos/link-foundation/link-cli/actions/runs/25760911270/artifacts","cancel_url":"https://api.github.com/repos/link-foundation/link-cli/actions/runs/25760911270/cancel","rerun_url":"https://api.github.com/repos/link-foundation/link-cli/actions/runs/25760911270/rerun","previous_attempt_url":null,"workflow_url":"https://api.github.com/repos/link-foundation/link-cli/actions/workflows/131965046","head_commit":{"id":"0c8092c56b0fb11704f89398b6d831cd9bbe007d","tree_id":"115819aa67707a9abb7347d0a00da8a5e2ba5370","message":"Merge pull request #85 from link-foundation/issue-84-0f4c3bcac49c\n\nfix(csharp): self-healing CI release pipeline for NuGet + GitHub","timestamp":"2026-05-12T20:40:07Z","author":{"name":"Konstantin Diachenko","email":"drakonard@gmail.com"},"committer":{"name":"GitHub","email":"noreply@github.com"}},"repository":{"id":896565358,"node_id":"R_kgDONXCAbg","name":"link-cli","full_name":"link-foundation/link-cli","private":false,"owner":{"login":"link-foundation","id":176174013,"node_id":"O_kgDOCoAzvQ","avatar_url":"https://avatars.githubusercontent.com/u/176174013?v=4","gravatar_id":"","url":"https://api.github.com/users/link-foundation","html_url":"https://github.com/link-foundation","followers_url":"https://api.github.com/users/link-foundation/followers","following_url":"https://api.github.com/users/link-foundation/following{/other_user}","gists_url":"https://api.github.com/users/link-foundation/gists{/gist_id}","starred_url":"https://api.github.com/users/link-foundation/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/link-foundation/subscriptions","organizations_url":"https://api.github.com/users/link-foundation/orgs","repos_url":"https://api.github.com/users/link-foundation/repos","events_url":"https://api.github.com/users/link-foundation/events{/privacy}","received_events_url":"https://api.github.com/users/link-foundation/received_events","type":"Organization","user_view_type":"public","site_admin":false},"html_url":"https://github.com/link-foundation/link-cli","description":"A CLI tool to manipulate links.","fork":false,"url":"https://api.github.com/repos/link-foundation/link-cli","forks_url":"https://api.github.com/repos/link-foundation/link-cli/forks","keys_url":"https://api.github.com/repos/link-foundation/link-cli/keys{/key_id}","collaborators_url":"https://api.github.com/repos/link-foundation/link-cli/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/link-foundation/link-cli/teams","hooks_url":"https://api.github.com/repos/link-foundation/link-cli/hooks","issue_events_url":"https://api.github.com/repos/link-foundation/link-cli/issues/events{/number}","events_url":"https://api.github.com/repos/link-foundation/link-cli/events","assignees_url":"https://api.github.com/repos/link-foundation/link-cli/assignees{/user}","branches_url":"https://api.github.com/repos/link-foundation/link-cli/branches{/branch}","tags_url":"https://api.github.com/repos/link-foundation/link-cli/tags","blobs_url":"https://api.github.com/repos/link-foundation/link-cli/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/link-foundation/link-cli/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/link-foundation/link-cli/git/refs{/sha}","trees_url":"https://api.github.com/repos/link-foundation/link-cli/git/trees{/sha}","statuses_url":"https://api.github.com/repos/link-foundation/link-cli/statuses/{sha}","languages_url":"https://api.github.com/repos/link-foundation/link-cli/languages","stargazers_url":"https://api.github.com/repos/link-foundation/link-cli/stargazers","contributors_url":"https://api.github.com/repos/link-foundation/link-cli/contributors","subscribers_url":"https://api.github.com/repos/link-foundation/link-cli/subscribers","subscription_url":"https://api.github.com/repos/link-foundation/link-cli/subscription","commits_url":"https://api.github.com/repos/link-foundation/link-cli/commits{/sha}","git_commits_url":"https://api.github.com/repos/link-foundation/link-cli/git/commits{/sha}","comments_url":"https://api.github.com/repos/link-foundation/link-cli/comments{/number}","issue_comment_url":"https://api.github.com/repos/link-foundation/link-cli/issues/comments{/number}","contents_url":"https://api.github.com/repos/link-foundation/link-cli/contents/{+path}","compare_url":"https://api.github.com/repos/link-foundation/link-cli/compare/{base}...{head}","merges_url":"https://api.github.com/repos/link-foundation/link-cli/merges","archive_url":"https://api.github.com/repos/link-foundation/link-cli/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/link-foundation/link-cli/downloads","issues_url":"https://api.github.com/repos/link-foundation/link-cli/issues{/number}","pulls_url":"https://api.github.com/repos/link-foundation/link-cli/pulls{/number}","milestones_url":"https://api.github.com/repos/link-foundation/link-cli/milestones{/number}","notifications_url":"https://api.github.com/repos/link-foundation/link-cli/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/link-foundation/link-cli/labels{/name}","releases_url":"https://api.github.com/repos/link-foundation/link-cli/releases{/id}","deployments_url":"https://api.github.com/repos/link-foundation/link-cli/deployments"},"head_repository":{"id":896565358,"node_id":"R_kgDONXCAbg","name":"link-cli","full_name":"link-foundation/link-cli","private":false,"owner":{"login":"link-foundation","id":176174013,"node_id":"O_kgDOCoAzvQ","avatar_url":"https://avatars.githubusercontent.com/u/176174013?v=4","gravatar_id":"","url":"https://api.github.com/users/link-foundation","html_url":"https://github.com/link-foundation","followers_url":"https://api.github.com/users/link-foundation/followers","following_url":"https://api.github.com/users/link-foundation/following{/other_user}","gists_url":"https://api.github.com/users/link-foundation/gists{/gist_id}","starred_url":"https://api.github.com/users/link-foundation/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/link-foundation/subscriptions","organizations_url":"https://api.github.com/users/link-foundation/orgs","repos_url":"https://api.github.com/users/link-foundation/repos","events_url":"https://api.github.com/users/link-foundation/events{/privacy}","received_events_url":"https://api.github.com/users/link-foundation/received_events","type":"Organization","user_view_type":"public","site_admin":false},"html_url":"https://github.com/link-foundation/link-cli","description":"A CLI tool to manipulate links.","fork":false,"url":"https://api.github.com/repos/link-foundation/link-cli","forks_url":"https://api.github.com/repos/link-foundation/link-cli/forks","keys_url":"https://api.github.com/repos/link-foundation/link-cli/keys{/key_id}","collaborators_url":"https://api.github.com/repos/link-foundation/link-cli/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/link-foundation/link-cli/teams","hooks_url":"https://api.github.com/repos/link-foundation/link-cli/hooks","issue_events_url":"https://api.github.com/repos/link-foundation/link-cli/issues/events{/number}","events_url":"https://api.github.com/repos/link-foundation/link-cli/events","assignees_url":"https://api.github.com/repos/link-foundation/link-cli/assignees{/user}","branches_url":"https://api.github.com/repos/link-foundation/link-cli/branches{/branch}","tags_url":"https://api.github.com/repos/link-foundation/link-cli/tags","blobs_url":"https://api.github.com/repos/link-foundation/link-cli/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/link-foundation/link-cli/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/link-foundation/link-cli/git/refs{/sha}","trees_url":"https://api.github.com/repos/link-foundation/link-cli/git/trees{/sha}","statuses_url":"https://api.github.com/repos/link-foundation/link-cli/statuses/{sha}","languages_url":"https://api.github.com/repos/link-foundation/link-cli/languages","stargazers_url":"https://api.github.com/repos/link-foundation/link-cli/stargazers","contributors_url":"https://api.github.com/repos/link-foundation/link-cli/contributors","subscribers_url":"https://api.github.com/repos/link-foundation/link-cli/subscribers","subscription_url":"https://api.github.com/repos/link-foundation/link-cli/subscription","commits_url":"https://api.github.com/repos/link-foundation/link-cli/commits{/sha}","git_commits_url":"https://api.github.com/repos/link-foundation/link-cli/git/commits{/sha}","comments_url":"https://api.github.com/repos/link-foundation/link-cli/comments{/number}","issue_comment_url":"https://api.github.com/repos/link-foundation/link-cli/issues/comments{/number}","contents_url":"https://api.github.com/repos/link-foundation/link-cli/contents/{+path}","compare_url":"https://api.github.com/repos/link-foundation/link-cli/compare/{base}...{head}","merges_url":"https://api.github.com/repos/link-foundation/link-cli/merges","archive_url":"https://api.github.com/repos/link-foundation/link-cli/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/link-foundation/link-cli/downloads","issues_url":"https://api.github.com/repos/link-foundation/link-cli/issues{/number}","pulls_url":"https://api.github.com/repos/link-foundation/link-cli/pulls{/number}","milestones_url":"https://api.github.com/repos/link-foundation/link-cli/milestones{/number}","notifications_url":"https://api.github.com/repos/link-foundation/link-cli/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/link-foundation/link-cli/labels{/name}","releases_url":"https://api.github.com/repos/link-foundation/link-cli/releases{/id}","deployments_url":"https://api.github.com/repos/link-foundation/link-cli/deployments"}} \ No newline at end of file diff --git a/docs/case-studies/issue-86/github-data/csharp-run-25760911270-jobs.json b/docs/case-studies/issue-86/github-data/csharp-run-25760911270-jobs.json new file mode 100644 index 0000000..beda8f7 --- /dev/null +++ b/docs/case-studies/issue-86/github-data/csharp-run-25760911270-jobs.json @@ -0,0 +1 @@ +{"total_count":9,"jobs":[{"id":75668260410,"run_id":25760911270,"workflow_name":"C# CI/CD Pipeline","head_branch":"main","run_url":"https://api.github.com/repos/link-foundation/link-cli/actions/runs/25760911270","run_attempt":2,"node_id":"CR_kwDONXCAbs8AAAARni4GOg","head_sha":"0c8092c56b0fb11704f89398b6d831cd9bbe007d","url":"https://api.github.com/repos/link-foundation/link-cli/actions/jobs/75668260410","html_url":"https://github.com/link-foundation/link-cli/actions/runs/25760911270/job/75668260410","status":"completed","conclusion":"skipped","created_at":"2026-05-12T21:19:58Z","started_at":"2026-05-12T21:19:58Z","completed_at":"2026-05-12T20:40:19Z","name":"Changeset Validation","steps":[],"check_run_url":"https://api.github.com/repos/link-foundation/link-cli/check-runs/75668260410","labels":["ubuntu-latest"],"runner_id":null,"runner_name":null,"runner_group_id":null,"runner_group_name":null},{"id":75668260694,"run_id":25760911270,"workflow_name":"C# CI/CD Pipeline","head_branch":"main","run_url":"https://api.github.com/repos/link-foundation/link-cli/actions/runs/25760911270","run_attempt":2,"node_id":"CR_kwDONXCAbs8AAAARni4HVg","head_sha":"0c8092c56b0fb11704f89398b6d831cd9bbe007d","url":"https://api.github.com/repos/link-foundation/link-cli/actions/jobs/75668260694","html_url":"https://github.com/link-foundation/link-cli/actions/runs/25760911270/job/75668260694","status":"completed","conclusion":"success","created_at":"2026-05-12T21:19:59Z","started_at":"2026-05-12T20:40:21Z","completed_at":"2026-05-12T20:40:52Z","name":"Lint and Format Check","steps":[{"name":"Set up job","status":"completed","conclusion":"success","number":1,"started_at":"2026-05-12T20:40:22Z","completed_at":"2026-05-12T20:40:23Z"},{"name":"Run actions/checkout@v6","status":"completed","conclusion":"success","number":2,"started_at":"2026-05-12T20:40:23Z","completed_at":"2026-05-12T20:40:24Z"},{"name":"Setup .NET","status":"completed","conclusion":"success","number":3,"started_at":"2026-05-12T20:40:24Z","completed_at":"2026-05-12T20:40:32Z"},{"name":"Setup Node.js","status":"completed","conclusion":"success","number":4,"started_at":"2026-05-12T20:40:32Z","completed_at":"2026-05-12T20:40:35Z"},{"name":"Run release script tests","status":"completed","conclusion":"success","number":5,"started_at":"2026-05-12T20:40:35Z","completed_at":"2026-05-12T20:40:36Z"},{"name":"Restore dependencies","status":"completed","conclusion":"success","number":6,"started_at":"2026-05-12T20:40:36Z","completed_at":"2026-05-12T20:40:43Z"},{"name":"Build","status":"completed","conclusion":"success","number":7,"started_at":"2026-05-12T20:40:43Z","completed_at":"2026-05-12T20:40:51Z"},{"name":"Post Setup Node.js","status":"completed","conclusion":"success","number":12,"started_at":"2026-05-12T20:40:51Z","completed_at":"2026-05-12T20:40:51Z"},{"name":"Post Setup .NET","status":"completed","conclusion":"success","number":13,"started_at":"2026-05-12T20:40:51Z","completed_at":"2026-05-12T20:40:51Z"},{"name":"Post Run actions/checkout@v6","status":"completed","conclusion":"success","number":14,"started_at":"2026-05-12T20:40:51Z","completed_at":"2026-05-12T20:40:51Z"},{"name":"Complete job","status":"completed","conclusion":"success","number":15,"started_at":"2026-05-12T20:40:51Z","completed_at":"2026-05-12T20:40:51Z"}],"check_run_url":"https://api.github.com/repos/link-foundation/link-cli/check-runs/75668260694","labels":["ubuntu-latest"],"runner_id":1000029100,"runner_name":"GitHub Actions 1000029100","runner_group_id":null,"runner_group_name":"GitHub Actions"},{"id":75668260817,"run_id":25760911270,"workflow_name":"C# CI/CD Pipeline","head_branch":"main","run_url":"https://api.github.com/repos/link-foundation/link-cli/actions/runs/25760911270","run_attempt":2,"node_id":"CR_kwDONXCAbs8AAAARni4H0Q","head_sha":"0c8092c56b0fb11704f89398b6d831cd9bbe007d","url":"https://api.github.com/repos/link-foundation/link-cli/actions/jobs/75668260817","html_url":"https://github.com/link-foundation/link-cli/actions/runs/25760911270/job/75668260817","status":"completed","conclusion":"success","created_at":"2026-05-12T21:19:59Z","started_at":"2026-05-12T20:40:26Z","completed_at":"2026-05-12T20:42:57Z","name":"Test (windows-latest)","steps":[{"name":"Set up job","status":"completed","conclusion":"success","number":1,"started_at":"2026-05-12T20:40:29Z","completed_at":"2026-05-12T20:40:33Z"},{"name":"Run actions/checkout@v6","status":"completed","conclusion":"success","number":2,"started_at":"2026-05-12T20:40:33Z","completed_at":"2026-05-12T20:40:38Z"},{"name":"Setup .NET","status":"completed","conclusion":"success","number":3,"started_at":"2026-05-12T20:40:38Z","completed_at":"2026-05-12T20:41:32Z"},{"name":"Restore dependencies","status":"completed","conclusion":"success","number":4,"started_at":"2026-05-12T20:41:32Z","completed_at":"2026-05-12T20:42:00Z"},{"name":"Build","status":"completed","conclusion":"success","number":5,"started_at":"2026-05-12T20:42:00Z","completed_at":"2026-05-12T20:42:21Z"},{"name":"Run tests","status":"completed","conclusion":"success","number":6,"started_at":"2026-05-12T20:42:21Z","completed_at":"2026-05-12T20:42:53Z"},{"name":"Upload coverage to Codecov","status":"completed","conclusion":"skipped","number":7,"started_at":"2026-05-12T20:42:53Z","completed_at":"2026-05-12T20:42:53Z"},{"name":"Post Setup .NET","status":"completed","conclusion":"success","number":13,"started_at":"2026-05-12T20:42:53Z","completed_at":"2026-05-12T20:42:53Z"},{"name":"Post Run actions/checkout@v6","status":"completed","conclusion":"success","number":14,"started_at":"2026-05-12T20:42:53Z","completed_at":"2026-05-12T20:42:56Z"},{"name":"Complete job","status":"completed","conclusion":"success","number":15,"started_at":"2026-05-12T20:42:56Z","completed_at":"2026-05-12T20:42:56Z"}],"check_run_url":"https://api.github.com/repos/link-foundation/link-cli/check-runs/75668260817","labels":["windows-latest"],"runner_id":1000029103,"runner_name":"GitHub Actions 1000029103","runner_group_id":null,"runner_group_name":"GitHub Actions"},{"id":75668260991,"run_id":25760911270,"workflow_name":"C# CI/CD Pipeline","head_branch":"main","run_url":"https://api.github.com/repos/link-foundation/link-cli/actions/runs/25760911270","run_attempt":2,"node_id":"CR_kwDONXCAbs8AAAARni4Ifw","head_sha":"0c8092c56b0fb11704f89398b6d831cd9bbe007d","url":"https://api.github.com/repos/link-foundation/link-cli/actions/jobs/75668260991","html_url":"https://github.com/link-foundation/link-cli/actions/runs/25760911270/job/75668260991","status":"completed","conclusion":"success","created_at":"2026-05-12T21:19:59Z","started_at":"2026-05-12T20:40:26Z","completed_at":"2026-05-12T20:41:51Z","name":"Test (macos-latest)","steps":[{"name":"Set up job","status":"completed","conclusion":"success","number":1,"started_at":"2026-05-12T20:40:26Z","completed_at":"2026-05-12T20:40:31Z"},{"name":"Run actions/checkout@v6","status":"completed","conclusion":"success","number":2,"started_at":"2026-05-12T20:40:31Z","completed_at":"2026-05-12T20:40:35Z"},{"name":"Setup .NET","status":"completed","conclusion":"success","number":3,"started_at":"2026-05-12T20:40:35Z","completed_at":"2026-05-12T20:40:55Z"},{"name":"Restore dependencies","status":"completed","conclusion":"success","number":4,"started_at":"2026-05-12T20:40:55Z","completed_at":"2026-05-12T20:41:05Z"},{"name":"Build","status":"completed","conclusion":"success","number":5,"started_at":"2026-05-12T20:41:05Z","completed_at":"2026-05-12T20:41:13Z"},{"name":"Run tests","status":"completed","conclusion":"success","number":6,"started_at":"2026-05-12T20:41:13Z","completed_at":"2026-05-12T20:41:45Z"},{"name":"Upload coverage to Codecov","status":"completed","conclusion":"skipped","number":7,"started_at":"2026-05-12T20:41:45Z","completed_at":"2026-05-12T20:41:45Z"},{"name":"Post Setup .NET","status":"completed","conclusion":"success","number":13,"started_at":"2026-05-12T20:41:45Z","completed_at":"2026-05-12T20:41:46Z"},{"name":"Post Run actions/checkout@v6","status":"completed","conclusion":"success","number":14,"started_at":"2026-05-12T20:41:46Z","completed_at":"2026-05-12T20:41:47Z"},{"name":"Complete job","status":"completed","conclusion":"success","number":15,"started_at":"2026-05-12T20:41:47Z","completed_at":"2026-05-12T20:41:49Z"}],"check_run_url":"https://api.github.com/repos/link-foundation/link-cli/check-runs/75668260991","labels":["macos-latest"],"runner_id":1000029101,"runner_name":"GitHub Actions 1000029101","runner_group_id":null,"runner_group_name":"GitHub Actions"},{"id":75668261355,"run_id":25760911270,"workflow_name":"C# CI/CD Pipeline","head_branch":"main","run_url":"https://api.github.com/repos/link-foundation/link-cli/actions/runs/25760911270","run_attempt":2,"node_id":"CR_kwDONXCAbs8AAAARni4J6w","head_sha":"0c8092c56b0fb11704f89398b6d831cd9bbe007d","url":"https://api.github.com/repos/link-foundation/link-cli/actions/jobs/75668261355","html_url":"https://github.com/link-foundation/link-cli/actions/runs/25760911270/job/75668261355","status":"completed","conclusion":"failure","created_at":"2026-05-12T21:19:59Z","started_at":"2026-05-12T21:20:01Z","completed_at":"2026-05-12T21:22:49Z","name":"Release","steps":[{"name":"Set up job","status":"completed","conclusion":"success","number":1,"started_at":"2026-05-12T21:20:02Z","completed_at":"2026-05-12T21:20:04Z"},{"name":"Run actions/checkout@v6","status":"completed","conclusion":"success","number":2,"started_at":"2026-05-12T21:20:04Z","completed_at":"2026-05-12T21:20:05Z"},{"name":"Setup .NET","status":"completed","conclusion":"success","number":3,"started_at":"2026-05-12T21:20:05Z","completed_at":"2026-05-12T21:20:19Z"},{"name":"Setup Node.js","status":"completed","conclusion":"success","number":4,"started_at":"2026-05-12T21:20:19Z","completed_at":"2026-05-12T21:20:20Z"},{"name":"Check for changesets","status":"completed","conclusion":"success","number":5,"started_at":"2026-05-12T21:20:20Z","completed_at":"2026-05-12T21:20:20Z"},{"name":"Check if release is needed","status":"completed","conclusion":"success","number":6,"started_at":"2026-05-12T21:20:20Z","completed_at":"2026-05-12T21:20:21Z"},{"name":"Merge multiple changesets","status":"completed","conclusion":"skipped","number":7,"started_at":"2026-05-12T21:20:21Z","completed_at":"2026-05-12T21:20:21Z"},{"name":"Version and commit","status":"completed","conclusion":"skipped","number":8,"started_at":"2026-05-12T21:20:21Z","completed_at":"2026-05-12T21:20:21Z"},{"name":"Resolve release version","status":"completed","conclusion":"success","number":9,"started_at":"2026-05-12T21:20:21Z","completed_at":"2026-05-12T21:20:21Z"},{"name":"Build release package","status":"completed","conclusion":"success","number":10,"started_at":"2026-05-12T21:20:21Z","completed_at":"2026-05-12T21:20:40Z"},{"name":"Resolve NuGet package id","status":"completed","conclusion":"success","number":11,"started_at":"2026-05-12T21:20:40Z","completed_at":"2026-05-12T21:20:40Z"},{"name":"Validate NuGet API key","status":"completed","conclusion":"success","number":12,"started_at":"2026-05-12T21:20:40Z","completed_at":"2026-05-12T21:20:40Z"},{"name":"Publish to NuGet","status":"completed","conclusion":"success","number":13,"started_at":"2026-05-12T21:20:40Z","completed_at":"2026-05-12T21:20:41Z"},{"name":"Verify package on NuGet","status":"completed","conclusion":"failure","number":14,"started_at":"2026-05-12T21:20:41Z","completed_at":"2026-05-12T21:22:47Z"},{"name":"Create GitHub Release","status":"completed","conclusion":"skipped","number":15,"started_at":"2026-05-12T21:22:47Z","completed_at":"2026-05-12T21:22:47Z"},{"name":"Post Setup Node.js","status":"completed","conclusion":"skipped","number":28,"started_at":"2026-05-12T21:22:47Z","completed_at":"2026-05-12T21:22:47Z"},{"name":"Post Setup .NET","status":"completed","conclusion":"skipped","number":29,"started_at":"2026-05-12T21:22:47Z","completed_at":"2026-05-12T21:22:47Z"},{"name":"Post Run actions/checkout@v6","status":"completed","conclusion":"success","number":30,"started_at":"2026-05-12T21:22:47Z","completed_at":"2026-05-12T21:22:47Z"},{"name":"Complete job","status":"completed","conclusion":"success","number":31,"started_at":"2026-05-12T21:22:47Z","completed_at":"2026-05-12T21:22:47Z"}],"check_run_url":"https://api.github.com/repos/link-foundation/link-cli/check-runs/75668261355","labels":["ubuntu-latest"],"runner_id":1000029143,"runner_name":"GitHub Actions 1000029143","runner_group_id":0,"runner_group_name":"GitHub Actions"},{"id":75668261425,"run_id":25760911270,"workflow_name":"C# CI/CD Pipeline","head_branch":"main","run_url":"https://api.github.com/repos/link-foundation/link-cli/actions/runs/25760911270","run_attempt":2,"node_id":"CR_kwDONXCAbs8AAAARni4KMQ","head_sha":"0c8092c56b0fb11704f89398b6d831cd9bbe007d","url":"https://api.github.com/repos/link-foundation/link-cli/actions/jobs/75668261425","html_url":"https://github.com/link-foundation/link-cli/actions/runs/25760911270/job/75668261425","status":"completed","conclusion":"success","created_at":"2026-05-12T21:19:59Z","started_at":"2026-05-12T20:43:00Z","completed_at":"2026-05-12T20:43:37Z","name":"Build Package","steps":[{"name":"Set up job","status":"completed","conclusion":"success","number":1,"started_at":"2026-05-12T20:43:01Z","completed_at":"2026-05-12T20:43:02Z"},{"name":"Run actions/checkout@v6","status":"completed","conclusion":"success","number":2,"started_at":"2026-05-12T20:43:02Z","completed_at":"2026-05-12T20:43:04Z"},{"name":"Setup .NET","status":"completed","conclusion":"success","number":3,"started_at":"2026-05-12T20:43:04Z","completed_at":"2026-05-12T20:43:22Z"},{"name":"Restore dependencies","status":"completed","conclusion":"success","number":4,"started_at":"2026-05-12T20:43:22Z","completed_at":"2026-05-12T20:43:26Z"},{"name":"Build Release","status":"completed","conclusion":"success","number":5,"started_at":"2026-05-12T20:43:26Z","completed_at":"2026-05-12T20:43:33Z"},{"name":"Pack NuGet package","status":"completed","conclusion":"success","number":6,"started_at":"2026-05-12T20:43:33Z","completed_at":"2026-05-12T20:43:34Z"},{"name":"Upload artifacts","status":"completed","conclusion":"success","number":7,"started_at":"2026-05-12T20:43:34Z","completed_at":"2026-05-12T20:43:35Z"},{"name":"Post Setup .NET","status":"completed","conclusion":"success","number":13,"started_at":"2026-05-12T20:43:35Z","completed_at":"2026-05-12T20:43:35Z"},{"name":"Post Run actions/checkout@v6","status":"completed","conclusion":"success","number":14,"started_at":"2026-05-12T20:43:35Z","completed_at":"2026-05-12T20:43:35Z"},{"name":"Complete job","status":"completed","conclusion":"success","number":15,"started_at":"2026-05-12T20:43:35Z","completed_at":"2026-05-12T20:43:35Z"}],"check_run_url":"https://api.github.com/repos/link-foundation/link-cli/check-runs/75668261425","labels":["ubuntu-latest"],"runner_id":1000029122,"runner_name":"GitHub Actions 1000029122","runner_group_id":null,"runner_group_name":"GitHub Actions"},{"id":75668261797,"run_id":25760911270,"workflow_name":"C# CI/CD Pipeline","head_branch":"main","run_url":"https://api.github.com/repos/link-foundation/link-cli/actions/runs/25760911270","run_attempt":2,"node_id":"CR_kwDONXCAbs8AAAARni4LpQ","head_sha":"0c8092c56b0fb11704f89398b6d831cd9bbe007d","url":"https://api.github.com/repos/link-foundation/link-cli/actions/jobs/75668261797","html_url":"https://github.com/link-foundation/link-cli/actions/runs/25760911270/job/75668261797","status":"completed","conclusion":"skipped","created_at":"2026-05-12T21:19:59Z","started_at":"2026-05-12T21:19:59Z","completed_at":"2026-05-12T20:43:37Z","name":"Instant Release","steps":[],"check_run_url":"https://api.github.com/repos/link-foundation/link-cli/check-runs/75668261797","labels":["ubuntu-latest"],"runner_id":null,"runner_name":null,"runner_group_id":null,"runner_group_name":null},{"id":75668273524,"run_id":25760911270,"workflow_name":"C# CI/CD Pipeline","head_branch":"main","run_url":"https://api.github.com/repos/link-foundation/link-cli/actions/runs/25760911270","run_attempt":2,"node_id":"CR_kwDONXCAbs8AAAARni45dA","head_sha":"0c8092c56b0fb11704f89398b6d831cd9bbe007d","url":"https://api.github.com/repos/link-foundation/link-cli/actions/jobs/75668273524","html_url":"https://github.com/link-foundation/link-cli/actions/runs/25760911270/job/75668273524","status":"completed","conclusion":"success","created_at":"2026-05-12T21:20:04Z","started_at":"2026-05-12T20:40:22Z","completed_at":"2026-05-12T20:41:14Z","name":"Test (ubuntu-latest)","steps":[{"name":"Set up job","status":"completed","conclusion":"success","number":1,"started_at":"2026-05-12T20:40:23Z","completed_at":"2026-05-12T20:40:25Z"},{"name":"Run actions/checkout@v6","status":"completed","conclusion":"success","number":2,"started_at":"2026-05-12T20:40:25Z","completed_at":"2026-05-12T20:40:26Z"},{"name":"Setup .NET","status":"completed","conclusion":"success","number":3,"started_at":"2026-05-12T20:40:26Z","completed_at":"2026-05-12T20:40:34Z"},{"name":"Restore dependencies","status":"completed","conclusion":"success","number":4,"started_at":"2026-05-12T20:40:34Z","completed_at":"2026-05-12T20:40:40Z"},{"name":"Build","status":"completed","conclusion":"success","number":5,"started_at":"2026-05-12T20:40:40Z","completed_at":"2026-05-12T20:40:48Z"},{"name":"Run tests","status":"completed","conclusion":"success","number":6,"started_at":"2026-05-12T20:40:48Z","completed_at":"2026-05-12T20:41:10Z"},{"name":"Upload coverage to Codecov","status":"completed","conclusion":"success","number":7,"started_at":"2026-05-12T20:41:10Z","completed_at":"2026-05-12T20:41:12Z"},{"name":"Post Setup .NET","status":"completed","conclusion":"success","number":13,"started_at":"2026-05-12T20:41:12Z","completed_at":"2026-05-12T20:41:12Z"},{"name":"Post Run actions/checkout@v6","status":"completed","conclusion":"success","number":14,"started_at":"2026-05-12T20:41:12Z","completed_at":"2026-05-12T20:41:12Z"},{"name":"Complete job","status":"completed","conclusion":"success","number":15,"started_at":"2026-05-12T20:41:12Z","completed_at":"2026-05-12T20:41:12Z"}],"check_run_url":"https://api.github.com/repos/link-foundation/link-cli/check-runs/75668273524","labels":["ubuntu-latest"],"runner_id":1000029102,"runner_name":"GitHub Actions 1000029102","runner_group_id":null,"runner_group_name":"GitHub Actions"},{"id":75668278834,"run_id":25760911270,"workflow_name":"C# CI/CD Pipeline","head_branch":"main","run_url":"https://api.github.com/repos/link-foundation/link-cli/actions/runs/25760911270","run_attempt":2,"node_id":"CR_kwDONXCAbs8AAAARni5OMg","head_sha":"0c8092c56b0fb11704f89398b6d831cd9bbe007d","url":"https://api.github.com/repos/link-foundation/link-cli/actions/jobs/75668278834","html_url":"https://github.com/link-foundation/link-cli/actions/runs/25760911270/job/75668278834","status":"completed","conclusion":"success","created_at":"2026-05-12T21:20:06Z","started_at":"2026-05-12T20:40:14Z","completed_at":"2026-05-12T20:40:19Z","name":"Detect Changes","steps":[{"name":"Set up job","status":"completed","conclusion":"success","number":1,"started_at":"2026-05-12T20:40:15Z","completed_at":"2026-05-12T20:40:16Z"},{"name":"Run actions/checkout@v6","status":"completed","conclusion":"success","number":2,"started_at":"2026-05-12T20:40:16Z","completed_at":"2026-05-12T20:40:17Z"},{"name":"Setup Node.js","status":"completed","conclusion":"success","number":3,"started_at":"2026-05-12T20:40:17Z","completed_at":"2026-05-12T20:40:17Z"},{"name":"Detect changes","status":"completed","conclusion":"success","number":4,"started_at":"2026-05-12T20:40:17Z","completed_at":"2026-05-12T20:40:18Z"},{"name":"Post Setup Node.js","status":"completed","conclusion":"success","number":7,"started_at":"2026-05-12T20:40:18Z","completed_at":"2026-05-12T20:40:18Z"},{"name":"Post Run actions/checkout@v6","status":"completed","conclusion":"success","number":8,"started_at":"2026-05-12T20:40:18Z","completed_at":"2026-05-12T20:40:18Z"},{"name":"Complete job","status":"completed","conclusion":"success","number":9,"started_at":"2026-05-12T20:40:18Z","completed_at":"2026-05-12T20:40:18Z"}],"check_run_url":"https://api.github.com/repos/link-foundation/link-cli/check-runs/75668278834","labels":["ubuntu-latest"],"runner_id":1000029097,"runner_name":"GitHub Actions 1000029097","runner_group_id":null,"runner_group_name":"GitHub Actions"}]} \ No newline at end of file diff --git a/docs/case-studies/issue-86/github-data/csharp-run-25760911270.json b/docs/case-studies/issue-86/github-data/csharp-run-25760911270.json new file mode 100644 index 0000000..c5cd0e0 --- /dev/null +++ b/docs/case-studies/issue-86/github-data/csharp-run-25760911270.json @@ -0,0 +1 @@ +{"conclusion":"failure","createdAt":"2026-05-12T20:40:11Z","databaseId":25760911270,"event":"push","headBranch":"main","headSha":"0c8092c56b0fb11704f89398b6d831cd9bbe007d","jobs":[{"completedAt":"2026-05-12T20:40:19Z","conclusion":"skipped","databaseId":75668260410,"name":"Changeset Validation","startedAt":"2026-05-12T21:19:58Z","status":"completed","steps":[],"url":"https://github.com/link-foundation/link-cli/actions/runs/25760911270/job/75668260410"},{"completedAt":"2026-05-12T20:40:52Z","conclusion":"success","databaseId":75668260694,"name":"Lint and Format Check","startedAt":"2026-05-12T20:40:21Z","status":"completed","steps":[{"completedAt":"2026-05-12T20:40:23Z","conclusion":"success","name":"Set up job","number":1,"startedAt":"2026-05-12T20:40:22Z","status":"completed"},{"completedAt":"2026-05-12T20:40:24Z","conclusion":"success","name":"Run actions/checkout@v6","number":2,"startedAt":"2026-05-12T20:40:23Z","status":"completed"},{"completedAt":"2026-05-12T20:40:32Z","conclusion":"success","name":"Setup .NET","number":3,"startedAt":"2026-05-12T20:40:24Z","status":"completed"},{"completedAt":"2026-05-12T20:40:35Z","conclusion":"success","name":"Setup Node.js","number":4,"startedAt":"2026-05-12T20:40:32Z","status":"completed"},{"completedAt":"2026-05-12T20:40:36Z","conclusion":"success","name":"Run release script tests","number":5,"startedAt":"2026-05-12T20:40:35Z","status":"completed"},{"completedAt":"2026-05-12T20:40:43Z","conclusion":"success","name":"Restore dependencies","number":6,"startedAt":"2026-05-12T20:40:36Z","status":"completed"},{"completedAt":"2026-05-12T20:40:51Z","conclusion":"success","name":"Build","number":7,"startedAt":"2026-05-12T20:40:43Z","status":"completed"},{"completedAt":"2026-05-12T20:40:51Z","conclusion":"success","name":"Post Setup Node.js","number":12,"startedAt":"2026-05-12T20:40:51Z","status":"completed"},{"completedAt":"2026-05-12T20:40:51Z","conclusion":"success","name":"Post Setup .NET","number":13,"startedAt":"2026-05-12T20:40:51Z","status":"completed"},{"completedAt":"2026-05-12T20:40:51Z","conclusion":"success","name":"Post Run actions/checkout@v6","number":14,"startedAt":"2026-05-12T20:40:51Z","status":"completed"},{"completedAt":"2026-05-12T20:40:51Z","conclusion":"success","name":"Complete job","number":15,"startedAt":"2026-05-12T20:40:51Z","status":"completed"}],"url":"https://github.com/link-foundation/link-cli/actions/runs/25760911270/job/75668260694"},{"completedAt":"2026-05-12T20:42:57Z","conclusion":"success","databaseId":75668260817,"name":"Test (windows-latest)","startedAt":"2026-05-12T20:40:26Z","status":"completed","steps":[{"completedAt":"2026-05-12T20:40:33Z","conclusion":"success","name":"Set up job","number":1,"startedAt":"2026-05-12T20:40:29Z","status":"completed"},{"completedAt":"2026-05-12T20:40:38Z","conclusion":"success","name":"Run actions/checkout@v6","number":2,"startedAt":"2026-05-12T20:40:33Z","status":"completed"},{"completedAt":"2026-05-12T20:41:32Z","conclusion":"success","name":"Setup .NET","number":3,"startedAt":"2026-05-12T20:40:38Z","status":"completed"},{"completedAt":"2026-05-12T20:42:00Z","conclusion":"success","name":"Restore dependencies","number":4,"startedAt":"2026-05-12T20:41:32Z","status":"completed"},{"completedAt":"2026-05-12T20:42:21Z","conclusion":"success","name":"Build","number":5,"startedAt":"2026-05-12T20:42:00Z","status":"completed"},{"completedAt":"2026-05-12T20:42:53Z","conclusion":"success","name":"Run tests","number":6,"startedAt":"2026-05-12T20:42:21Z","status":"completed"},{"completedAt":"2026-05-12T20:42:53Z","conclusion":"skipped","name":"Upload coverage to Codecov","number":7,"startedAt":"2026-05-12T20:42:53Z","status":"completed"},{"completedAt":"2026-05-12T20:42:53Z","conclusion":"success","name":"Post Setup .NET","number":13,"startedAt":"2026-05-12T20:42:53Z","status":"completed"},{"completedAt":"2026-05-12T20:42:56Z","conclusion":"success","name":"Post Run actions/checkout@v6","number":14,"startedAt":"2026-05-12T20:42:53Z","status":"completed"},{"completedAt":"2026-05-12T20:42:56Z","conclusion":"success","name":"Complete job","number":15,"startedAt":"2026-05-12T20:42:56Z","status":"completed"}],"url":"https://github.com/link-foundation/link-cli/actions/runs/25760911270/job/75668260817"},{"completedAt":"2026-05-12T20:41:51Z","conclusion":"success","databaseId":75668260991,"name":"Test (macos-latest)","startedAt":"2026-05-12T20:40:26Z","status":"completed","steps":[{"completedAt":"2026-05-12T20:40:31Z","conclusion":"success","name":"Set up job","number":1,"startedAt":"2026-05-12T20:40:26Z","status":"completed"},{"completedAt":"2026-05-12T20:40:35Z","conclusion":"success","name":"Run actions/checkout@v6","number":2,"startedAt":"2026-05-12T20:40:31Z","status":"completed"},{"completedAt":"2026-05-12T20:40:55Z","conclusion":"success","name":"Setup .NET","number":3,"startedAt":"2026-05-12T20:40:35Z","status":"completed"},{"completedAt":"2026-05-12T20:41:05Z","conclusion":"success","name":"Restore dependencies","number":4,"startedAt":"2026-05-12T20:40:55Z","status":"completed"},{"completedAt":"2026-05-12T20:41:13Z","conclusion":"success","name":"Build","number":5,"startedAt":"2026-05-12T20:41:05Z","status":"completed"},{"completedAt":"2026-05-12T20:41:45Z","conclusion":"success","name":"Run tests","number":6,"startedAt":"2026-05-12T20:41:13Z","status":"completed"},{"completedAt":"2026-05-12T20:41:45Z","conclusion":"skipped","name":"Upload coverage to Codecov","number":7,"startedAt":"2026-05-12T20:41:45Z","status":"completed"},{"completedAt":"2026-05-12T20:41:46Z","conclusion":"success","name":"Post Setup .NET","number":13,"startedAt":"2026-05-12T20:41:45Z","status":"completed"},{"completedAt":"2026-05-12T20:41:47Z","conclusion":"success","name":"Post Run actions/checkout@v6","number":14,"startedAt":"2026-05-12T20:41:46Z","status":"completed"},{"completedAt":"2026-05-12T20:41:49Z","conclusion":"success","name":"Complete job","number":15,"startedAt":"2026-05-12T20:41:47Z","status":"completed"}],"url":"https://github.com/link-foundation/link-cli/actions/runs/25760911270/job/75668260991"},{"completedAt":"2026-05-12T21:22:49Z","conclusion":"failure","databaseId":75668261355,"name":"Release","startedAt":"2026-05-12T21:20:01Z","status":"completed","steps":[{"completedAt":"2026-05-12T21:20:04Z","conclusion":"success","name":"Set up job","number":1,"startedAt":"2026-05-12T21:20:02Z","status":"completed"},{"completedAt":"2026-05-12T21:20:05Z","conclusion":"success","name":"Run actions/checkout@v6","number":2,"startedAt":"2026-05-12T21:20:04Z","status":"completed"},{"completedAt":"2026-05-12T21:20:19Z","conclusion":"success","name":"Setup .NET","number":3,"startedAt":"2026-05-12T21:20:05Z","status":"completed"},{"completedAt":"2026-05-12T21:20:20Z","conclusion":"success","name":"Setup Node.js","number":4,"startedAt":"2026-05-12T21:20:19Z","status":"completed"},{"completedAt":"2026-05-12T21:20:20Z","conclusion":"success","name":"Check for changesets","number":5,"startedAt":"2026-05-12T21:20:20Z","status":"completed"},{"completedAt":"2026-05-12T21:20:21Z","conclusion":"success","name":"Check if release is needed","number":6,"startedAt":"2026-05-12T21:20:20Z","status":"completed"},{"completedAt":"2026-05-12T21:20:21Z","conclusion":"skipped","name":"Merge multiple changesets","number":7,"startedAt":"2026-05-12T21:20:21Z","status":"completed"},{"completedAt":"2026-05-12T21:20:21Z","conclusion":"skipped","name":"Version and commit","number":8,"startedAt":"2026-05-12T21:20:21Z","status":"completed"},{"completedAt":"2026-05-12T21:20:21Z","conclusion":"success","name":"Resolve release version","number":9,"startedAt":"2026-05-12T21:20:21Z","status":"completed"},{"completedAt":"2026-05-12T21:20:40Z","conclusion":"success","name":"Build release package","number":10,"startedAt":"2026-05-12T21:20:21Z","status":"completed"},{"completedAt":"2026-05-12T21:20:40Z","conclusion":"success","name":"Resolve NuGet package id","number":11,"startedAt":"2026-05-12T21:20:40Z","status":"completed"},{"completedAt":"2026-05-12T21:20:40Z","conclusion":"success","name":"Validate NuGet API key","number":12,"startedAt":"2026-05-12T21:20:40Z","status":"completed"},{"completedAt":"2026-05-12T21:20:41Z","conclusion":"success","name":"Publish to NuGet","number":13,"startedAt":"2026-05-12T21:20:40Z","status":"completed"},{"completedAt":"2026-05-12T21:22:47Z","conclusion":"failure","name":"Verify package on NuGet","number":14,"startedAt":"2026-05-12T21:20:41Z","status":"completed"},{"completedAt":"2026-05-12T21:22:47Z","conclusion":"skipped","name":"Create GitHub Release","number":15,"startedAt":"2026-05-12T21:22:47Z","status":"completed"},{"completedAt":"2026-05-12T21:22:47Z","conclusion":"skipped","name":"Post Setup Node.js","number":28,"startedAt":"2026-05-12T21:22:47Z","status":"completed"},{"completedAt":"2026-05-12T21:22:47Z","conclusion":"skipped","name":"Post Setup .NET","number":29,"startedAt":"2026-05-12T21:22:47Z","status":"completed"},{"completedAt":"2026-05-12T21:22:47Z","conclusion":"success","name":"Post Run actions/checkout@v6","number":30,"startedAt":"2026-05-12T21:22:47Z","status":"completed"},{"completedAt":"2026-05-12T21:22:47Z","conclusion":"success","name":"Complete job","number":31,"startedAt":"2026-05-12T21:22:47Z","status":"completed"}],"url":"https://github.com/link-foundation/link-cli/actions/runs/25760911270/job/75668261355"},{"completedAt":"2026-05-12T20:43:37Z","conclusion":"success","databaseId":75668261425,"name":"Build Package","startedAt":"2026-05-12T20:43:00Z","status":"completed","steps":[{"completedAt":"2026-05-12T20:43:02Z","conclusion":"success","name":"Set up job","number":1,"startedAt":"2026-05-12T20:43:01Z","status":"completed"},{"completedAt":"2026-05-12T20:43:04Z","conclusion":"success","name":"Run actions/checkout@v6","number":2,"startedAt":"2026-05-12T20:43:02Z","status":"completed"},{"completedAt":"2026-05-12T20:43:22Z","conclusion":"success","name":"Setup .NET","number":3,"startedAt":"2026-05-12T20:43:04Z","status":"completed"},{"completedAt":"2026-05-12T20:43:26Z","conclusion":"success","name":"Restore dependencies","number":4,"startedAt":"2026-05-12T20:43:22Z","status":"completed"},{"completedAt":"2026-05-12T20:43:33Z","conclusion":"success","name":"Build Release","number":5,"startedAt":"2026-05-12T20:43:26Z","status":"completed"},{"completedAt":"2026-05-12T20:43:34Z","conclusion":"success","name":"Pack NuGet package","number":6,"startedAt":"2026-05-12T20:43:33Z","status":"completed"},{"completedAt":"2026-05-12T20:43:35Z","conclusion":"success","name":"Upload artifacts","number":7,"startedAt":"2026-05-12T20:43:34Z","status":"completed"},{"completedAt":"2026-05-12T20:43:35Z","conclusion":"success","name":"Post Setup .NET","number":13,"startedAt":"2026-05-12T20:43:35Z","status":"completed"},{"completedAt":"2026-05-12T20:43:35Z","conclusion":"success","name":"Post Run actions/checkout@v6","number":14,"startedAt":"2026-05-12T20:43:35Z","status":"completed"},{"completedAt":"2026-05-12T20:43:35Z","conclusion":"success","name":"Complete job","number":15,"startedAt":"2026-05-12T20:43:35Z","status":"completed"}],"url":"https://github.com/link-foundation/link-cli/actions/runs/25760911270/job/75668261425"},{"completedAt":"2026-05-12T20:43:37Z","conclusion":"skipped","databaseId":75668261797,"name":"Instant Release","startedAt":"2026-05-12T21:19:59Z","status":"completed","steps":[],"url":"https://github.com/link-foundation/link-cli/actions/runs/25760911270/job/75668261797"},{"completedAt":"2026-05-12T20:41:14Z","conclusion":"success","databaseId":75668273524,"name":"Test (ubuntu-latest)","startedAt":"2026-05-12T20:40:22Z","status":"completed","steps":[{"completedAt":"2026-05-12T20:40:25Z","conclusion":"success","name":"Set up job","number":1,"startedAt":"2026-05-12T20:40:23Z","status":"completed"},{"completedAt":"2026-05-12T20:40:26Z","conclusion":"success","name":"Run actions/checkout@v6","number":2,"startedAt":"2026-05-12T20:40:25Z","status":"completed"},{"completedAt":"2026-05-12T20:40:34Z","conclusion":"success","name":"Setup .NET","number":3,"startedAt":"2026-05-12T20:40:26Z","status":"completed"},{"completedAt":"2026-05-12T20:40:40Z","conclusion":"success","name":"Restore dependencies","number":4,"startedAt":"2026-05-12T20:40:34Z","status":"completed"},{"completedAt":"2026-05-12T20:40:48Z","conclusion":"success","name":"Build","number":5,"startedAt":"2026-05-12T20:40:40Z","status":"completed"},{"completedAt":"2026-05-12T20:41:10Z","conclusion":"success","name":"Run tests","number":6,"startedAt":"2026-05-12T20:40:48Z","status":"completed"},{"completedAt":"2026-05-12T20:41:12Z","conclusion":"success","name":"Upload coverage to Codecov","number":7,"startedAt":"2026-05-12T20:41:10Z","status":"completed"},{"completedAt":"2026-05-12T20:41:12Z","conclusion":"success","name":"Post Setup .NET","number":13,"startedAt":"2026-05-12T20:41:12Z","status":"completed"},{"completedAt":"2026-05-12T20:41:12Z","conclusion":"success","name":"Post Run actions/checkout@v6","number":14,"startedAt":"2026-05-12T20:41:12Z","status":"completed"},{"completedAt":"2026-05-12T20:41:12Z","conclusion":"success","name":"Complete job","number":15,"startedAt":"2026-05-12T20:41:12Z","status":"completed"}],"url":"https://github.com/link-foundation/link-cli/actions/runs/25760911270/job/75668273524"},{"completedAt":"2026-05-12T20:40:19Z","conclusion":"success","databaseId":75668278834,"name":"Detect Changes","startedAt":"2026-05-12T20:40:14Z","status":"completed","steps":[{"completedAt":"2026-05-12T20:40:16Z","conclusion":"success","name":"Set up job","number":1,"startedAt":"2026-05-12T20:40:15Z","status":"completed"},{"completedAt":"2026-05-12T20:40:17Z","conclusion":"success","name":"Run actions/checkout@v6","number":2,"startedAt":"2026-05-12T20:40:16Z","status":"completed"},{"completedAt":"2026-05-12T20:40:17Z","conclusion":"success","name":"Setup Node.js","number":3,"startedAt":"2026-05-12T20:40:17Z","status":"completed"},{"completedAt":"2026-05-12T20:40:18Z","conclusion":"success","name":"Detect changes","number":4,"startedAt":"2026-05-12T20:40:17Z","status":"completed"},{"completedAt":"2026-05-12T20:40:18Z","conclusion":"success","name":"Post Setup Node.js","number":7,"startedAt":"2026-05-12T20:40:18Z","status":"completed"},{"completedAt":"2026-05-12T20:40:18Z","conclusion":"success","name":"Post Run actions/checkout@v6","number":8,"startedAt":"2026-05-12T20:40:18Z","status":"completed"},{"completedAt":"2026-05-12T20:40:18Z","conclusion":"success","name":"Complete job","number":9,"startedAt":"2026-05-12T20:40:18Z","status":"completed"}],"url":"https://github.com/link-foundation/link-cli/actions/runs/25760911270/job/75668278834"}],"name":"C# CI/CD Pipeline","status":"completed","updatedAt":"2026-05-12T21:22:50Z","url":"https://github.com/link-foundation/link-cli/actions/runs/25760911270","workflowName":"C# CI/CD Pipeline"} diff --git a/docs/case-studies/issue-86/github-data/csharp-template-issue-13.json b/docs/case-studies/issue-86/github-data/csharp-template-issue-13.json new file mode 100644 index 0000000..671b133 --- /dev/null +++ b/docs/case-studies/issue-86/github-data/csharp-template-issue-13.json @@ -0,0 +1 @@ +{"body":"The C# release workflow verifies a just-published NuGet package with this delay schedule:\n\n```bash\nfor DELAY in 0 5 10 20 30 60; do\n ... check https://api.nuget.org/v3-flatcontainer///.nuspec ...\ndone\n```\n\nThat gives up after about 125 seconds. NuGet's own publishing documentation says package validation and indexing usually take less than 15 minutes, and during that window the package page can show: `This package has not been indexed yet. It will appear in search results and will be available for install/restore after indexing is complete.`\n\nReproducer from link-foundation/link-cli issue 86:\n\n- Workflow run: https://github.com/link-foundation/link-cli/actions/runs/25760911270\n- `dotnet nuget push` for `clink@2.4.0` succeeded at about 2026-05-12T21:20:41Z.\n- The verification step checked the flat-container nuspec at 0, 5, 15, 35, 65, and 125 seconds and got HTTP 404 each time.\n- The job failed at 2026-05-12T21:22:47Z.\n- The package became available shortly afterward; the flat-container headers later showed HTTP 200 with `last-modified: Tue, 12 May 2026 21:24:36 GMT`.\n\nWorkaround:\n\nManually rerun the release after NuGet indexing completes, or manually create the GitHub release after confirming the package exists in the flat-container API.\n\nSuggested fix:\n\nMove NuGet availability polling into a tested script, similar to the JS template's `wait-for-npm.mjs` and the Rust template's `wait-for-crate.rs`, and default it to 2-minute intervals over the normal NuGet indexing window. In link-cli PR 87, the local fix uses 8 attempts with 120-second sleeps, checking:\n\n`https://api.nuget.org/v3-flatcontainer/{lower-id}/{lower-version}/{lower-id}.nuspec`\n\nThe workflow should use that script in both automatic and manual release paths before creating the GitHub release.","createdAt":"2026-05-12T21:36:11Z","number":13,"state":"OPEN","title":"Wait longer for NuGet package indexing before release","url":"https://github.com/link-foundation/csharp-ai-driven-development-pipeline-template/issues/13"} diff --git a/docs/case-studies/issue-86/github-data/csharp-v2.4.0-release.json b/docs/case-studies/issue-86/github-data/csharp-v2.4.0-release.json new file mode 100644 index 0000000..84e8742 --- /dev/null +++ b/docs/case-studies/issue-86/github-data/csharp-v2.4.0-release.json @@ -0,0 +1 @@ +{"message":"Not Found","documentation_url":"https://docs.github.com/rest/releases/releases#get-a-release-by-tag-name","status":"404"} \ No newline at end of file diff --git a/docs/case-studies/issue-86/github-data/dotnet-test-release.log b/docs/case-studies/issue-86/github-data/dotnet-test-release.log new file mode 100644 index 0000000..69fe334 --- /dev/null +++ b/docs/case-studies/issue-86/github-data/dotnet-test-release.log @@ -0,0 +1,574 @@ + Determining projects to restore... + All projects are up-to-date for restore. + Foundation.Data.Doublets.Cli -> /tmp/gh-issue-solver-1778621235442/csharp/Foundation.Data.Doublets.Cli/bin/Release/net8/Foundation.Data.Doublets.Cli.dll + Foundation.Data.Doublets.Cli.Tests -> /tmp/gh-issue-solver-1778621235442/csharp/Foundation.Data.Doublets.Cli.Tests/bin/Release/net8/Foundation.Data.Doublets.Cli.Tests.dll +Test run for /tmp/gh-issue-solver-1778621235442/csharp/Foundation.Data.Doublets.Cli.Tests/bin/Release/net8/Foundation.Data.Doublets.Cli.Tests.dll (.NETCoreApp,Version=v8.0) +Microsoft (R) Test Execution Command Line Tool Version 17.8.0 (x64) +Copyright (c) Microsoft Corporation. All rights reserved. + +Starting test execution, please wait... +A total of 1 test files matched the specified pattern. +[Trace] Constructing SimpleLinksDecorator with names DB: /tmp/tmpVXwIlt.names.links +=== Debug: Alternative Scenario === +Input changes: + 1. (1: 1 2) -> (0: 0 0) + 2. (1: 1 2) -> (1: 2 1) + 3. (2: 2 1) -> (2: 1 2) +Actual simplified changes: + 1. (1: 1 2) -> (1: 2 1) + 2. (2: 2 1) -> (2: 1 2) +Count: 2 +=== End Debug === +[Test] All links: (1: 2->1) (2: 1->2) +[Trace] Constructing NamedLinksDecorator with names DB: /tmp/tmpUBFkYz.names.links +[Test] All links: (1: 2->1) (2: 2->2) +[Test] All links: (1: 1->2) (2: 2->1) +[Test] All links: (1: 1->1) (3: 3->3) +[Test] All links: (1: 1->1) (2: 2->1) +[Test] All links: (21: 21->21) +[Test] All links: (1: 1->1) (2: 2->2) +[Test] All links: (2: 2->2) +[Trace] Constructing NamedTypesDecorator with names DB: /tmp/tmpOGeavB.names.links +[ProcessQuery] Query: "(() ((link: link link)))" +[ProcessQuery] Parser returned 1 top-level link(s). +[ProcessQuery] Restriction link => Id="" Values.Count=0 +[ProcessQuery] Substitution link => Id="" Values.Count=1 +[ProcessQuery] No restriction, but substitution is non-empty => creation scenario. +[ValidateLinksExistOrWillBeCreated] Starting validation +[ValidateLinksExistOrWillBeCreated] Numeric links to be created: +[ValidateLinksExistOrWillBeCreated] Named links to be created: link +[Trace] GetByName called for name: 'link' +[Trace] GetByName result: 0 +[ValidateReferencesInPattern] Named link 'link' reference validated in substitution pattern +[Trace] GetByName called for name: 'link' +[Trace] GetByName result: 0 +[ValidateReferencesInPattern] Named link 'link' reference validated in substitution pattern +[ValidateLinksExistOrWillBeCreated] Validation completed +[Trace] GetByName called for name: 'link' +[Trace] GetByName result: 0 +[Trace] Update called with restriction: [1] +[Trace] Debug: handlerWrapper invoked - before=1,0,0, after=1,0,0 +[Trace] Update result: 4294967295 +[EnsureNestedLinkCreatedRecursively] Created named leaf 'link' => ID=1 +[Trace] SetName called for link: 1 with name: 'link' +[Trace] RemoveName called for link: 1 +[Trace] RemoveName completed for link: 1 +[Trace] SetName result: 100 +[EnsureNestedLinkCreatedRecursively] Updating link ID=1 => Source=1, Target=1 +[Trace] Update called with restriction: [1,0,0] +[Trace] Debug: handlerWrapper invoked - before=1,0,0, after=1,1,1 +[EnsureNestedLinkCreatedRecursively] Update handler: before=(1: 0->0), after=(1: 1->1) +[Trace] Update result: 4294967295 +[ProcessQuery] Created link ID #1 from substitution pattern. +[Test] All links: (1: 1->1) +[Trace] GetByName called for name: 'link' +[Trace] GetByName result: 1 +[Trace] GetName called for link: 1 +[Trace] GetName result: link +[Test] All links: (1: 1->1) +[Test] All links: (1: 1->1) +[Test] All links: +[Test] All links: (1: 1->1) (2: 2->2) (3: 1->2) +[Test] All links: (1: 1->2) (2: 1->1) +[Test] All links: (1: 1->1) (2: 2->2) (3: 2->1) +[Test] All links: (2: 2->2) +[Test] All links: (1: 1->1) (2: 2->2) (3: 2->1) (4: 3->3) +[Test] All links: (1: 1->1) (2: 2->2) (3: 1->2) +[Test] All links: (1: 1->2) (2: 2->1) +[Test] All links: (1: 2->1) (2: 1->1) +[Test] ===== Starting UpdateNamedLinkNameTest ===== +[Trace] Constructing NamedTypesDecorator with names DB: /tmp/tmpKhheBG.names.links +[Test] Constants: Null=0, Any=4294967292, Continue=4294967295 +[Test] Step 1: Creating initial link +[Test] Query: (() ((child: father mother))) +[ProcessQuery] Query: "(() ((child: father mother)))" +[ProcessQuery] Parser returned 1 top-level link(s). +[ProcessQuery] Restriction link => Id="" Values.Count=0 +[ProcessQuery] Substitution link => Id="" Values.Count=1 +[ProcessQuery] No restriction, but substitution is non-empty => creation scenario. +[ValidateLinksExistOrWillBeCreated] Starting validation +[ValidateLinksExistOrWillBeCreated] Numeric links to be created: +[ValidateLinksExistOrWillBeCreated] Named links to be created: child +[Trace] GetByName called for name: 'father' +[Trace] GetByName result: 0 +[Trace] GetByName called for name: 'mother' +[Trace] GetByName result: 0 +[Trace] GetByName called for name: 'father' +[Trace] GetByName result: 0 +[ValidateLinksExistOrWillBeCreated] Auto-creating missing named reference 'father' as point link. +[Trace] GetByName called for name: 'father' +[Trace] GetByName result: 0 +[Trace] Update called with restriction: [1] +[Trace] Debug: handlerWrapper invoked - before=1,0,0, after=1,0,0 +[Trace] Update result: 4294967295 +[Trace] SetName called for link: 1 with name: 'father' +[Trace] RemoveName called for link: 1 +[Trace] RemoveName completed for link: 1 +[Trace] SetName result: 108 +[Trace] Update called with restriction: [1,0,0] +[Trace] Debug: handlerWrapper invoked - before=1,0,0, after=1,1,1 +[Trace] Update result: 4294967295 +[Trace] GetByName called for name: 'mother' +[Trace] GetByName result: 0 +[ValidateLinksExistOrWillBeCreated] Auto-creating missing named reference 'mother' as point link. +[Trace] GetByName called for name: 'mother' +[Trace] GetByName result: 0 +[Trace] Update called with restriction: [2] +[Trace] Debug: handlerWrapper invoked - before=2,0,0, after=2,0,0 +[Trace] Update result: 4294967295 +[Trace] SetName called for link: 2 with name: 'mother' +[Trace] RemoveName called for link: 2 +[Trace] RemoveName completed for link: 2 +[Trace] SetName result: 110 +[Trace] Update called with restriction: [2,0,0] +[Trace] Debug: handlerWrapper invoked - before=2,0,0, after=2,2,2 +[Trace] Update result: 4294967295 +[ValidateLinksExistOrWillBeCreated] Validation completed +[Trace] GetByName called for name: 'father' +[Trace] GetByName result: 1 +[EnsureNestedLinkCreatedRecursively] Found existing named leaf 'father' => ID=1 +[Trace] GetByName called for name: 'mother' +[Trace] GetByName result: 2 +[EnsureNestedLinkCreatedRecursively] Found existing named leaf 'mother' => ID=2 +[EnsureLinkCreated] Creating link for (S=1, T=2). +[EnsureLinkCreated] => assigned new ID=3 +[Trace] Update called with restriction: [3] +[Trace] Debug: handlerWrapper invoked - before=3,0,0, after=3,1,2 +[Trace] Update result: 4294967295 +[EnsureNestedLinkCreatedRecursively] Created or ensured composite link => Index=0, Source=1, Target=2 => Actual ID=3 +[Trace] SetName called for link: 3 with name: 'child' +[Trace] RemoveName called for link: 3 +[Trace] RemoveName completed for link: 3 +[Trace] SetName result: 118 +[ProcessQuery] Created link ID #3 from substitution pattern. +[Test] Initial link creation completed +[Test] Step 2: Verifying initial state +[Trace] GetByName called for name: 'child' +[Trace] GetByName result: 3 +[Test] Initial child ID: 3 +[Trace] GetByName called for name: 'father' +[Trace] GetByName result: 1 +[Test] Initial father ID: 1 +[Trace] GetByName called for name: 'mother' +[Trace] GetByName result: 2 +[Test] Initial mother ID: 2 +[Test] Initial links count: 3 +[Test] Initial link: Index=(1: 1->1), Source=1, Target=1 +[Test] Initial link: Index=(2: 2->2), Source=2, Target=2 +[Test] Initial link: Index=(3: 1->2), Source=1, Target=2 +[Test] Initial state verification completed +[Test] Step 3: Updating link name from 'child' to 'son' +[Test] Query: (((child: father mother)) ((son: father mother))) +[Test] Current state before update: +[Trace] GetByName called for name: 'child' +[Trace] GetByName result: 3 +[Test] - child name exists: True +[Trace] GetByName called for name: 'son' +[Trace] GetByName result: 0 +[Test] - son name exists: False +[Trace] GetByName called for name: 'father' +[Trace] GetByName result: 1 +[Test] - father name exists: True +[Trace] GetByName called for name: 'mother' +[Trace] GetByName result: 2 +[Test] - mother name exists: True +[Test] Starting ProcessQuery for update... +[Test] Current links before update: +[Test] Link: Index=(1: 1->1), Source=1, Target=1 +[Test] Link: Index=(2: 2->2), Source=2, Target=2 +[Test] Link: Index=(3: 1->2), Source=1, Target=2 +[ProcessQuery] Query: "(((child: father mother)) ((son: father mother)))" +[ProcessQuery] Parser returned 1 top-level link(s). +[ProcessQuery] Restriction link => Id="" Values.Count=1 +[ProcessQuery] Substitution link => Id="" Values.Count=1 +[ProcessQuery] Restriction patterns to parse: 1 +[ProcessQuery] Substitution patterns to parse: 1 +[ValidateLinksExistOrWillBeCreated] Starting validation +[ValidateLinksExistOrWillBeCreated] Numeric links to be created: +[ValidateLinksExistOrWillBeCreated] Named links to be created: son +[Trace] GetByName called for name: 'child' +[Trace] GetByName result: 3 +[ValidateReferencesInPattern] Named link 'child' reference validated in restriction pattern +[Trace] GetByName called for name: 'father' +[Trace] GetByName result: 1 +[ValidateReferencesInPattern] Named link 'father' reference validated in restriction pattern +[Trace] GetByName called for name: 'mother' +[Trace] GetByName result: 2 +[ValidateReferencesInPattern] Named link 'mother' reference validated in restriction pattern +[Trace] GetByName called for name: 'father' +[Trace] GetByName result: 1 +[ValidateReferencesInPattern] Named link 'father' reference validated in substitution pattern +[Trace] GetByName called for name: 'mother' +[Trace] GetByName result: 2 +[ValidateReferencesInPattern] Named link 'mother' reference validated in substitution pattern +[ValidateLinksExistOrWillBeCreated] Validation completed +[ProcessQuery] Detected single sub-link with 2 sub-values => replaced with one composite restriction pattern. +[ProcessQuery] Converting restriction patterns => done. +[ProcessQuery] Converting substitution patterns => done. +[ProcessQuery] Finding solutions for restriction patterns... +[Trace] GetByName called for name: 'child' +[Trace] GetByName result: 3 +[Trace] GetByName called for name: 'father' +[Trace] GetByName result: 1 +[Trace] GetByName called for name: 'mother' +[Trace] GetByName result: 2 +[ProcessQuery] Found 1 total solution(s) matching restriction patterns. +[Trace] GetByName called for name: 'child' +[Trace] GetByName result: 3 +[Trace] GetByName called for name: 'father' +[Trace] GetByName result: 1 +[Trace] GetByName called for name: 'mother' +[Trace] GetByName result: 2 +[Trace] GetByName called for name: 'son' +[Trace] GetByName result: 0 +[Trace] GetByName called for name: 'father' +[Trace] GetByName result: 1 +[Trace] GetByName called for name: 'mother' +[Trace] GetByName result: 2 +[ProcessQuery] allSolutionsNoOperation=False +[ProcessQuery] Some solutions lead to actual changes => building operations. +[Trace] GetByName called for name: 'son' +[Trace] GetByName result: 0 +[Trace] GetByName called for name: 'father' +[Trace] GetByName result: 1 +[Trace] GetByName called for name: 'mother' +[Trace] GetByName result: 2 +[Trace] GetByName called for name: 'child' +[Trace] GetByName result: 3 +[Trace] GetByName called for name: 'father' +[Trace] GetByName result: 1 +[Trace] GetByName called for name: 'mother' +[Trace] GetByName result: 2 +[ProcessQuery] For a solution => substitution links count=1, restriction links count=1. +[ProcessQuery] => 2 operation(s) derived from these patterns. +[ProcessQuery] All planned operations => 2 +[ProcessQuery] Applying all planned operations... +[ApplyAllPlannedOperations] Operation: before=(3:1->2), after=(0:0->0) +[Trace] GetName called for link: 3 +[Trace] GetName result: child +[ApplyAllPlannedOperations] Name for before.Index 3 = 'child' +[ApplyAllPlannedOperations] Deleting link => ID=3, S=1, T=2 +[RemoveLinks] Found 1 link(s) matching (ID=3, S=1, T=2). +[Trace] RemoveName called for link: 3 +[Trace] RemoveName completed for link: 3 +[RemoveLinks] Deleting link => ID=3, S=1, T=2 +[Trace] Delete called with restriction: [3,1,2] +[Trace] Debug: this._links is of type: Foundation.Data.Doublets.Cli.PinnedTypesDecorator`1[System.UInt32] +[Trace] Debug: Calling underlying _links.Delete +[Trace] Debug: handlerWrapper invoked - before=3,1,2, after=3,0,0 +[Test] Update ChangesHandler called: +[Test] - Before state: (3: 1->2) +[Test] - After state: (3: 0->0) +[Trace] GetByName called for name: 'child' +[Trace] GetByName result: 0 +[Test] - child name during change: 0 +[Trace] GetByName called for name: 'son' +[Trace] GetByName result: 0 +[Test] - son name during change: 0 +[Trace] GetByName called for name: 'father' +[Trace] GetByName result: 1 +[Test] - father name during change: 1 +[Trace] GetByName called for name: 'mother' +[Trace] GetByName result: 2 +[Test] - mother name during change: 2 +[Test] - All links during change: +[Test] Link: Index=(1: 1->1), Source=1, Target=1 +[Test] Link: Index=(2: 2->2), Source=2, Target=2 +[Test] Link: Index=(3: 0->0), Source=0, Target=0 +[Trace] Debug: handlerWrapper invoked - before=3,0,0, after=null +[Trace] RemoveName called for link: 3 +[Trace] RemoveName completed for link: 3 +[Test] Update ChangesHandler called: +[Test] - Before state: (3: 0->0) +[Test] - After state: +[Trace] GetByName called for name: 'child' +[Trace] GetByName result: 0 +[Test] - child name during change: 0 +[Trace] GetByName called for name: 'son' +[Trace] GetByName result: 0 +[Test] - son name during change: 0 +[Trace] GetByName called for name: 'father' +[Trace] GetByName result: 1 +[Test] - father name during change: 1 +[Trace] GetByName called for name: 'mother' +[Trace] GetByName result: 2 +[Test] - mother name during change: 2 +[Test] - All links during change: +[Test] Link: Index=(1: 1->1), Source=1, Target=1 +[Test] Link: Index=(2: 2->2), Source=2, Target=2 +[Trace] Debug: Delete result: 4294967295 +[ApplyAllPlannedOperations] Operation: before=(0:0->0), after=(4294967292:1->2) +[Trace] GetName called for link: 4294967292 +[Trace] GetName result: String +[ApplyAllPlannedOperations] Name for after.Index 4294967292 = 'String' (pre-op) +[ApplyAllPlannedOperations] Creating link => ID=4294967292, S=1, T=2 +[CreateOrUpdateLink] Detected wildcard substitution => nested create & name. +[Trace] GetByName called for name: 'father' +[Trace] GetByName result: 1 +[EnsureNestedLinkCreatedRecursively] Found existing named leaf 'father' => ID=1 +[Trace] GetByName called for name: 'mother' +[Trace] GetByName result: 2 +[EnsureNestedLinkCreatedRecursively] Found existing named leaf 'mother' => ID=2 +[EnsureLinkCreated] Creating link for (S=1, T=2). +[EnsureLinkCreated] => assigned new ID=3 +[Test] Update ChangesHandler called: +[Test] - Before state: +[Test] - After state: (3: 0->0) +[Trace] GetByName called for name: 'child' +[Trace] GetByName result: 0 +[Test] - child name during change: 0 +[Trace] GetByName called for name: 'son' +[Trace] GetByName result: 0 +[Test] - son name during change: 0 +[Trace] GetByName called for name: 'father' +[Trace] GetByName result: 1 +[Test] - father name during change: 1 +[Trace] GetByName called for name: 'mother' +[Trace] GetByName result: 2 +[Test] - mother name during change: 2 +[Test] - All links during change: +[Test] Link: Index=(1: 1->1), Source=1, Target=1 +[Test] Link: Index=(2: 2->2), Source=2, Target=2 +[Test] Link: Index=(3: 0->0), Source=0, Target=0 +[Test] Creating new link: Index=3, Source=0, Target=0 +[Test] Checking if link exists: True +[Test] Checking if source exists: False +[Test] Checking if target exists: False +[Test] Names before creation: +[Trace] GetByName called for name: 'child' +[Trace] GetByName result: 0 +[Test] - child: 0 +[Trace] GetByName called for name: 'son' +[Trace] GetByName result: 0 +[Test] - son: 0 +[Trace] GetByName called for name: 'father' +[Trace] GetByName result: 1 +[Test] - father: 1 +[Trace] GetByName called for name: 'mother' +[Trace] GetByName result: 2 +[Test] - mother: 2 +[Trace] Update called with restriction: [3] +[Trace] Debug: handlerWrapper invoked - before=3,0,0, after=3,1,2 +[Test] Update ChangesHandler called: +[Test] - Before state: (3: 0->0) +[Test] - After state: (3: 1->2) +[Trace] GetByName called for name: 'child' +[Trace] GetByName result: 0 +[Test] - child name during change: 0 +[Trace] GetByName called for name: 'son' +[Trace] GetByName result: 0 +[Test] - son name during change: 0 +[Trace] GetByName called for name: 'father' +[Trace] GetByName result: 1 +[Test] - father name during change: 1 +[Trace] GetByName called for name: 'mother' +[Trace] GetByName result: 2 +[Test] - mother name during change: 2 +[Test] - All links during change: +[Test] Link: Index=(1: 1->1), Source=1, Target=1 +[Test] Link: Index=(2: 2->2), Source=2, Target=2 +[Test] Link: Index=(3: 1->2), Source=1, Target=2 +[Trace] Update result: 4294967295 +[EnsureNestedLinkCreatedRecursively] Created or ensured composite link => Index=0, Source=1, Target=2 => Actual ID=3 +[Trace] SetName called for link: 3 with name: 'son' +[Trace] RemoveName called for link: 3 +[Trace] RemoveName completed for link: 3 +[Trace] SetName result: 118 +[Trace] GetName called for link: 4294967292 +[Trace] GetName result: String +[ApplyAllPlannedOperations] Name for after.Index 4294967292 = 'String' (post-op) +[ProcessQuery] Restoring unexpected deletions if any... +[RestoreUnexpectedLinkDeletions] No unexpected deletions found. +[ProcessQuery] Finished processing query. +[Test] Update operation completed +[Test] Step 4: Verifying final state +[Trace] GetByName called for name: 'child' +[Trace] GetByName result: 0 +[Test] Final child ID: 0 +[Trace] GetByName called for name: 'son' +[Trace] GetByName result: 3 +[Test] Final son ID: 3 +[Trace] GetByName called for name: 'father' +[Trace] GetByName result: 1 +[Test] Final father ID: 1 +[Trace] GetByName called for name: 'mother' +[Trace] GetByName result: 2 +[Test] Final mother ID: 2 +[Test] Final links count: 3 +[Test] Final link: Index=(1: 1->1), Source=1, Target=1 +[Test] Final link: Index=(2: 2->2), Source=2, Target=2 +[Test] Final link: Index=(3: 1->2), Source=1, Target=2 +[Test] ===== UpdateNamedLinkNameTest completed successfully ===== +[Test] All links: (1: 1->1) (2: 2->2) (3: 3->3) (4: 4->4) (5: 5->5) (6: 6->6) (7: 5->6) (8: 4->7) (9: 3->8) (10: 2->9) (11: 1->10) +[Test] All links: (1: 1->1) (2: 1->2) +[Test] All links: (10: 10->10) (20: 10->20) +[Test] All links: (1: 1->1) (2: 2->2) +[Test] All links: (1: 1->1) (2: 2->2) (3: 2->1) (4: 3->3) +[Test] All links: (1: 1->1) (2: 1->2) (3: 3->1) (4: 1->4) +[Test] All links: (1: 1->1) (2: 1->2) +[Test] All links: (1: 1->1) (2: 2->2) (3: 3->3) (4: 4->4) (5: 5->5) (6: 4->5) (7: 3->6) (8: 2->7) (9: 1->8) +[Test] All links: (1: 1->1) (2: 2->2) +[Test] All links: (1: 1->2) (2: 2->2) +[Test] All links: (1: 1->2) (2: 2->1) +[Test] All links: +[Test] All links: (1: 1->1) (2: 2->2) (3: 1->2) (4: 2->1) (5: 3->4) +[Test] All links: (1: 1->1) (2: 2->1) +[Test] All links: (1: 1->1) (2: 2->2) +[Test] All links: (1: 1->2) (2: 1->1) +[Test] All links: (3: 3->3) +[Test] All links: (1: 1->1) (2: 18->20) (18: 1->21) (19: 1->20) (20: 20->20) (21: 21->21) +[Test] All links: (1: 1->1) (2: 2->2) +[Test] All links: (1: 0->0) +[Test] All links: (1: 1->1) (2: 2->2) (3: 1->2) +[Test] All links: (1: 1->1) +[Trace] Constructing NamedTypesDecorator with names DB: /tmp/tmpPd4E0q.names.links +[Test] Starting UpdateNamedLinkNameTest +[Test] Step 1: Creating initial link +[ProcessQuery] Query: "(() ((child: father mother)))" +[ProcessQuery] Parser returned 1 top-level link(s). +[ProcessQuery] Restriction link => Id="" Values.Count=0 +[ProcessQuery] Substitution link => Id="" Values.Count=1 +[ProcessQuery] No restriction, but substitution is non-empty => creation scenario. +[ValidateLinksExistOrWillBeCreated] Starting validation +[ValidateLinksExistOrWillBeCreated] Numeric links to be created: +[ValidateLinksExistOrWillBeCreated] Named links to be created: child +[Trace] GetByName called for name: 'father' +[Trace] GetByName result: 0 +[Trace] GetByName called for name: 'mother' +[Trace] GetByName result: 0 +[Trace] GetByName called for name: 'father' +[Trace] GetByName result: 0 +[ValidateLinksExistOrWillBeCreated] Auto-creating missing named reference 'father' as point link. +[Trace] GetByName called for name: 'father' +[Trace] GetByName result: 0 +[Trace] Update called with restriction: [1] +[Trace] Debug: handlerWrapper invoked - before=1,0,0, after=1,0,0 +[Trace] Update result: 4294967295 +[Trace] SetName called for link: 1 with name: 'father' +[Trace] RemoveName called for link: 1 +[Trace] RemoveName completed for link: 1 +[Trace] SetName result: 108 +[Trace] Update called with restriction: [1,0,0] +[Trace] Debug: handlerWrapper invoked - before=1,0,0, after=1,1,1 +[Trace] Update result: 4294967295 +[Trace] GetByName called for name: 'mother' +[Trace] GetByName result: 0 +[ValidateLinksExistOrWillBeCreated] Auto-creating missing named reference 'mother' as point link. +[Trace] GetByName called for name: 'mother' +[Trace] GetByName result: 0 +[Trace] Update called with restriction: [2] +[Trace] Debug: handlerWrapper invoked - before=2,0,0, after=2,0,0 +[Trace] Update result: 4294967295 +[Trace] SetName called for link: 2 with name: 'mother' +[Trace] RemoveName called for link: 2 +[Trace] RemoveName completed for link: 2 +[Trace] SetName result: 110 +[Trace] Update called with restriction: [2,0,0] +[Trace] Debug: handlerWrapper invoked - before=2,0,0, after=2,2,2 +[Trace] Update result: 4294967295 +[ValidateLinksExistOrWillBeCreated] Validation completed +[Trace] GetByName called for name: 'father' +[Trace] GetByName result: 1 +[EnsureNestedLinkCreatedRecursively] Found existing named leaf 'father' => ID=1 +[Trace] GetByName called for name: 'mother' +[Trace] GetByName result: 2 +[EnsureNestedLinkCreatedRecursively] Found existing named leaf 'mother' => ID=2 +[EnsureLinkCreated] Creating link for (S=1, T=2). +[EnsureLinkCreated] => assigned new ID=3 +[Trace] Update called with restriction: [3] +[Trace] Debug: handlerWrapper invoked - before=3,0,0, after=3,1,2 +[Trace] Update result: 4294967295 +[EnsureNestedLinkCreatedRecursively] Created or ensured composite link => Index=0, Source=1, Target=2 => Actual ID=3 +[Trace] SetName called for link: 3 with name: 'child' +[Trace] RemoveName called for link: 3 +[Trace] RemoveName completed for link: 3 +[Trace] SetName result: 118 +[ProcessQuery] Created link ID #3 from substitution pattern. +[Test] Initial link creation completed +[Test] Step 2: Verifying initial state +[Trace] GetByName called for name: 'child' +[Trace] GetByName result: 3 +[Test] Initial child ID: 3 +[Trace] GetByName called for name: 'father' +[Trace] GetByName result: 1 +[Test] Initial father ID: 1 +[Trace] GetByName called for name: 'mother' +[Trace] GetByName result: 2 +[Test] Initial mother ID: 2 +[Test] All links: (1: 1->1) (2: 2->2) (3: 1->2) +[Test] Initial links count: 3 +[Test] Initial state verification completed +[Test] Step 3: Updating link name +[Test] Removing old name 'child' +[Trace] RemoveName called for link: 3 +[Trace] RemoveName completed for link: 3 +[Test] Old name removed +[Test] Creating new link with name 'son' +[ProcessQuery] Query: "(() ((son: father mother)))" +[ProcessQuery] Parser returned 1 top-level link(s). +[ProcessQuery] Restriction link => Id="" Values.Count=0 +[ProcessQuery] Substitution link => Id="" Values.Count=1 +[ProcessQuery] No restriction, but substitution is non-empty => creation scenario. +[ValidateLinksExistOrWillBeCreated] Starting validation +[ValidateLinksExistOrWillBeCreated] Numeric links to be created: +[ValidateLinksExistOrWillBeCreated] Named links to be created: son +[Trace] GetByName called for name: 'father' +[Trace] GetByName result: 1 +[ValidateReferencesInPattern] Named link 'father' reference validated in substitution pattern +[Trace] GetByName called for name: 'mother' +[Trace] GetByName result: 2 +[ValidateReferencesInPattern] Named link 'mother' reference validated in substitution pattern +[ValidateLinksExistOrWillBeCreated] Validation completed +[Trace] GetByName called for name: 'father' +[Trace] GetByName result: 1 +[EnsureNestedLinkCreatedRecursively] Found existing named leaf 'father' => ID=1 +[Trace] GetByName called for name: 'mother' +[Trace] GetByName result: 2 +[EnsureNestedLinkCreatedRecursively] Found existing named leaf 'mother' => ID=2 +[EnsureLinkCreated] Link already found => ID=3 => no-op. +[EnsureNestedLinkCreatedRecursively] Created or ensured composite link => Index=0, Source=1, Target=2 => Actual ID=3 +[Trace] SetName called for link: 3 with name: 'son' +[Trace] RemoveName called for link: 3 +[Trace] RemoveName completed for link: 3 +[Trace] SetName result: 123 +[ProcessQuery] Created link ID #3 from substitution pattern. +[Test] New link creation completed +[Test] Step 4: Verifying final state +[Trace] GetByName called for name: 'child' +[Trace] GetByName result: 0 +[Trace] GetByName called for name: 'son' +[Trace] GetByName result: 3 +[Test] Final son ID: 3 +[Trace] GetByName called for name: 'father' +[Trace] GetByName result: 1 +[Test] Final father ID: 1 +[Trace] GetByName called for name: 'mother' +[Trace] GetByName result: 2 +[Test] Final mother ID: 2 +[Test] All links: (1: 1->1) (2: 2->2) (3: 1->2) +[Test] Final links count: 3 +[Test] Final state verification completed +[Test] UpdateNamedLinkNameTest completed successfully +[Test] All links: (1: 1->1) (2: 2->2) +[Test] All links: (1: 1->1) (2: 2->2) +[Test] All links: +[Test] All links: (2: 2->2) +[Test] All links: (1: 1->1) (2: 2->2) (3: 3->3) (4: 2->3) (5: 1->4) +[Test] All links: (1: 1->1) (2: 2->2) (3: 1->2) (4: 3->3) (5: 3->4) +[Test] All links: (1: 1->1) +[Test] All links: (1: 1->1) +[Test] All links: (1: 1->1) (2: 2->2) +[Test] All links: (1: 0->0) +[Test] All links: +[Test] All links: (1: 1->1) (2: 2->2) (3: 1->2) (4: 3->3) +[Test] All links: (1: 1->1) (2: 2->1) +[Test] All links: +[Test] All links: (1: 1->1) (2: 2->2) (3: 3->3) (4: 4->4) (5: 5->5) (6: 6->6) (7: 7->7) (8: 6->7) (9: 5->8) (10: 4->9) (11: 3->10) (12: 2->11) (13: 1->12) +[Test] All links: (1: 1->1) (2: 2->1) +[Test] All links: +[Test] All links: (1: 1->1) (2: 2->2) (3: 1->2) (4: 3->3) (5: 4->4) +[Test] All links: (1: 1->1) (2: 2->2) (3: 3->3) (4: 4->4) (5: 3->4) (6: 2->5) (7: 1->6) +[Test] All links: (1: 1->1) +[Test] All links: (1: 1->1) (2: 2->2) + +Passed! - Failed: 0, Passed: 187, Skipped: 0, Total: 187, Duration: 15 s - Foundation.Data.Doublets.Cli.Tests.dll (net8.0) diff --git a/docs/case-studies/issue-86/github-data/git-diff-check.log b/docs/case-studies/issue-86/github-data/git-diff-check.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/case-studies/issue-86/github-data/investigation-timestamp.txt b/docs/case-studies/issue-86/github-data/investigation-timestamp.txt new file mode 100644 index 0000000..45db13c --- /dev/null +++ b/docs/case-studies/issue-86/github-data/investigation-timestamp.txt @@ -0,0 +1 @@ +2026-05-12T21:35:21Z diff --git a/docs/case-studies/issue-86/github-data/issue-86-comments.json b/docs/case-studies/issue-86/github-data/issue-86-comments.json new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/docs/case-studies/issue-86/github-data/issue-86-comments.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/docs/case-studies/issue-86/github-data/issue-86.json b/docs/case-studies/issue-86/github-data/issue-86.json new file mode 100644 index 0000000..96337d6 --- /dev/null +++ b/docs/case-studies/issue-86/github-data/issue-86.json @@ -0,0 +1 @@ +{"author":{"id":"MDQ6VXNlcjE0MzE5MDQ=","is_bot":false,"login":"konard","name":"Konstantin Diachenko"},"body":"`This package has not been indexed yet. It will appear in search results and will be available for install/restore after indexing is complete.`\n\nSo our CI/CD should should check for package availability at 2 minute intervals, so such failures will not happen again: https://github.com/link-foundation/link-cli/actions/runs/25760911270/job/75662123274\n\nUse all the best practices from CI/CD templates (check full file tree to compare for all GitHub workflow and CI/CD scripts file), if the same issue is found in template report issue also in templates:\n- https://github.com/link-foundation/js-ai-driven-development-pipeline-template\n- https://github.com/link-foundation/rust-ai-driven-development-pipeline-template\n- https://github.com/link-foundation/python-ai-driven-development-pipeline-template\n- https://github.com/link-foundation/csharp-ai-driven-development-pipeline-template\n\nWe should compare all files, so we don't have more CI/CD errors in the future and reuse all the best practices from these templates.\n\nWe need to download all logs and data related about the issue to this repository, make sure we compile that data to `./docs/case-studies/issue-{id}` folder, and use it to do deep case study analysis (also make sure to search online for additional facts and data), in which we will reconstruct timeline/sequence of events, list of each and all requirements from the issue, find root causes of the each problem, and propose possible solutions and solution plans for each requirement (we should also check known existing components/libraries, that solve similar problem or can help in solutions).\n\nIf there is not enough data to find actual root cause, add debug output and verbose mode if not present, that will allow us to find root cause on next iteration.\n\nIf issue related to any other repository/project, where we can report issues on GitHub, please do so. Each issue must contain reproducible examples, workarounds and suggestions for fix the issue in code.\n\nPlease plan and execute everything in a single pull request, you have unlimited time and context, as context auto-compacts and you can continue indefinitely, until it is each and every requirement fully addressed, and everything is totally done.","comments":[],"createdAt":"2026-05-12T21:26:40Z","number":86,"state":"OPEN","title":"It may take up to 10-15 minutes, to index, so we should check for package availability at 2 minute intervals","updatedAt":"2026-05-12T21:26:40Z","url":"https://github.com/link-foundation/link-cli/issues/86"} diff --git a/docs/case-studies/issue-86/github-data/local-ci-file-tree.txt b/docs/case-studies/issue-86/github-data/local-ci-file-tree.txt new file mode 100644 index 0000000..8508970 --- /dev/null +++ b/docs/case-studies/issue-86/github-data/local-ci-file-tree.txt @@ -0,0 +1,36 @@ +.github/workflows/csharp.yml +.github/workflows/rust.yml +.github/workflows/wasm.yml +csharp/scripts/bump-version.mjs +csharp/scripts/check-file-size.mjs +csharp/scripts/check-release-needed.mjs +csharp/scripts/create-github-release.mjs +csharp/scripts/detect-code-changes.mjs +csharp/scripts/merge-changesets.mjs +csharp/scripts/release-scripts.test.mjs +csharp/scripts/validate-changeset.mjs +csharp/scripts/version-and-commit.mjs +docs/case-studies/issue-84/evidence/templates/csharp-create-github-release.mjs +docs/case-studies/issue-84/evidence/templates/csharp-release.yml +docs/case-studies/issue-84/evidence/templates/csharp-version-and-commit.mjs +docs/case-studies/issue-84/evidence/templates/js-check-release-needed.mjs +docs/case-studies/issue-84/evidence/templates/js-publish-to-npm.mjs +docs/case-studies/issue-84/evidence/templates/js-release.yml +docs/case-studies/issue-84/evidence/templates/rust-release.yml +experiments/validate-wasm-workflow.mjs +rust/scripts/bump-version.rs +rust/scripts/check-changelog-fragment.rs +rust/scripts/check-file-size.rs +rust/scripts/check-release-needed.rs +rust/scripts/check-version-modification.rs +rust/scripts/collect-changelog.rs +rust/scripts/create-changelog-fragment.rs +rust/scripts/create-github-release.rs +rust/scripts/detect-code-changes.rs +rust/scripts/get-bump-type.rs +rust/scripts/get-version.rs +rust/scripts/git-config.rs +rust/scripts/publish-crate.rs +rust/scripts/rust-paths.rs +rust/scripts/version-and-commit.rs +rust/scripts/wait-for-crate.rs diff --git a/docs/case-studies/issue-86/github-data/node-check-wait-for-nuget.log b/docs/case-studies/issue-86/github-data/node-check-wait-for-nuget.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/case-studies/issue-86/github-data/node-release-scripts-test.log b/docs/case-studies/issue-86/github-data/node-release-scripts-test.log new file mode 100644 index 0000000..5fa5c62 --- /dev/null +++ b/docs/case-studies/issue-86/github-data/node-release-scripts-test.log @@ -0,0 +1,96 @@ +TAP version 13 +# To /tmp/link-cli-csharp-version-B2h4Ok/remote.git +# * [new branch] main -> main +# To /tmp/link-cli-csharp-version-B2h4Ok/remote.git +# e5097e3..a6548e3 main -> main +# To /tmp/link-cli-csharp-version-B2h4Ok/remote.git +# * [new tag] csharp-v2.4.0 -> csharp-v2.4.0 +# Subtest: merge-changesets honors the requested directory and package name +ok 1 - merge-changesets honors the requested directory and package name + --- + duration_ms: 47.129199 + ... +# Subtest: create-github-release dry run uses tag prefix and component changelog +ok 2 - create-github-release dry run uses tag prefix and component changelog + --- + duration_ms: 42.059955 + ... +# Subtest: create-github-release dry run reports matching assets without uploading +ok 3 - create-github-release dry run reports matching assets without uploading + --- + duration_ms: 48.076063 + ... +# Subtest: version-and-commit creates a C\# release commit when the next tag is missing +ok 4 - version-and-commit creates a C\# release commit when the next tag is missing + --- + duration_ms: 252.062581 + ... +# Subtest: check-release-needed decide(): changesets take the normal release path +ok 5 - check-release-needed decide(): changesets take the normal release path + --- + duration_ms: 0.412365 + ... +# Subtest: check-release-needed decide(): self-heals when csproj version is missing from NuGet +ok 6 - check-release-needed decide(): self-heals when csproj version is missing from NuGet + --- + duration_ms: 0.145717 + ... +# Subtest: check-release-needed decide(): self-heals when package id is unknown to NuGet +ok 7 - check-release-needed decide(): self-heals when package id is unknown to NuGet + --- + duration_ms: 0.219178 + ... +# Subtest: check-release-needed decide(): self-heals GitHub release when NuGet already has the version +ok 8 - check-release-needed decide(): self-heals GitHub release when NuGet already has the version + --- + duration_ms: 0.185668 + ... +# Subtest: check-release-needed decide(): no-op when both NuGet and GitHub release exist +ok 9 - check-release-needed decide(): no-op when both NuGet and GitHub release exist + --- + duration_ms: 0.20009 + ... +# Subtest: check-release-needed readCsprojInfo() extracts version and package id +ok 10 - check-release-needed readCsprojInfo() extracts version and package id + --- + duration_ms: 0.971041 + ... +# Subtest: check-release-needed CLI writes self-healing outputs when NuGet version is missing +ok 11 - check-release-needed CLI writes self-healing outputs when NuGet version is missing + --- + duration_ms: 171.073606 + ... +# Subtest: check-release-needed CLI short-circuits when NuGet and GitHub already have the release +ok 12 - check-release-needed CLI short-circuits when NuGet and GitHub already have the release + --- + duration_ms: 138.601645 + ... +# Subtest: wait-for-nuget defaults to two-minute checks across the NuGet indexing window +ok 13 - wait-for-nuget defaults to two-minute checks across the NuGet indexing window + --- + duration_ms: 0.510924 + ... +# Subtest: wait-for-nuget builds the flat-container nuspec URL +ok 14 - wait-for-nuget builds the flat-container nuspec URL + --- + duration_ms: 0.314169 + ... +# Subtest: wait-for-nuget succeeds when indexing takes longer than the old 125 second loop +ok 15 - wait-for-nuget succeeds when indexing takes longer than the old 125 second loop + --- + duration_ms: 0.761378 + ... +# Subtest: wait-for-nuget fails only after exhausting all attempts +ok 16 - wait-for-nuget fails only after exhausting all attempts + --- + duration_ms: 0.258997 + ... +1..16 +# tests 16 +# suites 0 +# pass 16 +# fail 0 +# cancelled 0 +# skipped 0 +# todo 0 +# duration_ms 780.920654 diff --git a/docs/case-studies/issue-86/github-data/nuget-clink-2.4.0.headers.txt b/docs/case-studies/issue-86/github-data/nuget-clink-2.4.0.headers.txt new file mode 100644 index 0000000..81d58de --- /dev/null +++ b/docs/case-studies/issue-86/github-data/nuget-clink-2.4.0.headers.txt @@ -0,0 +1,20 @@ +HTTP/2 200 +date: Tue, 12 May 2026 21:29:51 GMT +content-type: text/xml +content-length: 662 +cache-control: public, max-age=86400 +last-modified: Tue, 12 May 2026 21:24:36 GMT +etag: 0x8DEB06CDE20885F +x-ms-request-id: 63daf3fd-a01e-0079-0656-e241d3000000 +x-ms-version: 2009-09-19 +x-ms-lease-status: unlocked +x-ms-blob-type: BlockBlob +access-control-expose-headers: x-ms-request-id,Server,x-ms-version,Content-Type,Cache-Control,ETag,Last-Modified,x-ms-lease-status,x-ms-blob-type,Content-Length,Date,Transfer-Encoding +access-control-allow-origin: * +x-azure-ref: 20260512T212951Z-1669c75c96bxkfxwhC1FRAhcmw0000000cyg000000007scr +x-fd-int-roxy-purgeid: 0 +x-cache: TCP_MISS +strict-transport-security: max-age=31536000; includeSubDomains +x-content-type-options: nosniff +accept-ranges: bytes + diff --git a/docs/case-studies/issue-86/github-data/nuget-clink-2.4.0.nuspec b/docs/case-studies/issue-86/github-data/nuget-clink-2.4.0.nuspec new file mode 100644 index 0000000..22ce600 --- /dev/null +++ b/docs/case-studies/issue-86/github-data/nuget-clink-2.4.0.nuspec @@ -0,0 +1,16 @@ + + + + clink + 2.4.0 + link-foundation + Unlicense + https://licenses.nuget.org/Unlicense + README.md + A CLI tool for links manipulation. + + + + + + \ No newline at end of file diff --git a/docs/case-studies/issue-86/github-data/nuget-clink-index.headers.txt b/docs/case-studies/issue-86/github-data/nuget-clink-index.headers.txt new file mode 100644 index 0000000..10ea692 --- /dev/null +++ b/docs/case-studies/issue-86/github-data/nuget-clink-index.headers.txt @@ -0,0 +1,20 @@ +HTTP/2 200 +date: Tue, 12 May 2026 21:29:51 GMT +content-type: application/json +content-length: 375 +cache-control: max-age=0, no-cache +last-modified: Tue, 12 May 2026 21:24:36 GMT +etag: 0x8DEB06CDE3CBED4 +x-ms-request-id: 44ac3760-f01e-0074-4d56-e28907000000 +x-ms-version: 2009-09-19 +x-ms-lease-status: unlocked +x-ms-blob-type: BlockBlob +access-control-expose-headers: x-ms-request-id,Server,x-ms-version,Content-Type,Cache-Control,ETag,Last-Modified,x-ms-lease-status,x-ms-blob-type,Content-Length,Date,Transfer-Encoding +access-control-allow-origin: * +x-azure-ref: 20260512T212951Z-1669c75c96bvxvrchC1FRAx93s00000008wg000000002suq +x-fd-int-roxy-purgeid: 0 +x-cache: TCP_MISS +strict-transport-security: max-age=31536000; includeSubDomains +x-content-type-options: nosniff +accept-ranges: bytes + diff --git a/docs/case-studies/issue-86/github-data/nuget-clink-index.json b/docs/case-studies/issue-86/github-data/nuget-clink-index.json new file mode 100644 index 0000000..83514e7 --- /dev/null +++ b/docs/case-studies/issue-86/github-data/nuget-clink-index.json @@ -0,0 +1,29 @@ +{ + "versions": [ + "1.0.0", + "1.0.1", + "1.1.0", + "1.2.0", + "1.2.3", + "1.3.0", + "1.3.1", + "1.4.0", + "1.4.1", + "1.5.0", + "1.6.0", + "1.7.0", + "1.7.1", + "1.7.3", + "1.7.4", + "1.8.0", + "2.0.2", + "2.1.0", + "2.1.1", + "2.1.2", + "2.1.3", + "2.2.0", + "2.2.1", + "2.2.2", + "2.4.0" + ] +} \ No newline at end of file diff --git a/docs/case-studies/issue-86/github-data/pr-87-comments.json b/docs/case-studies/issue-86/github-data/pr-87-comments.json new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/docs/case-studies/issue-86/github-data/pr-87-comments.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/docs/case-studies/issue-86/github-data/pr-87-review-comments.json b/docs/case-studies/issue-86/github-data/pr-87-review-comments.json new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/docs/case-studies/issue-86/github-data/pr-87-review-comments.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/docs/case-studies/issue-86/github-data/pr-87-reviews.json b/docs/case-studies/issue-86/github-data/pr-87-reviews.json new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/docs/case-studies/issue-86/github-data/pr-87-reviews.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/docs/case-studies/issue-86/github-data/pr-87.json b/docs/case-studies/issue-86/github-data/pr-87.json new file mode 100644 index 0000000..31e13c7 --- /dev/null +++ b/docs/case-studies/issue-86/github-data/pr-87.json @@ -0,0 +1 @@ +{"author":{"id":"MDQ6VXNlcjE0MzE5MDQ=","is_bot":false,"login":"konard","name":"Konstantin Diachenko"},"baseRefName":"main","body":"## 🤖 AI-Powered Solution Draft\n\nThis pull request is being automatically generated to solve issue #86.\n\n### 📋 Issue Reference\nFixes #86\n\n### 🚧 Status\n**Work in Progress** - The AI assistant is currently analyzing and implementing the solution draft.\n\n### 📝 Implementation Details\n_Details will be added as the solution draft is developed..._\n\n---\n*This PR was created automatically by the AI issue solver*","comments":[],"createdAt":"2026-05-12T21:27:24Z","headRefName":"issue-86-799717a6ecc6","isDraft":true,"number":87,"reviewDecision":"","state":"OPEN","title":"[WIP] It may take up to 10-15 minutes, to index, so we should check for package availability at 2 minute intervals","updatedAt":"2026-05-12T21:27:25Z","url":"https://github.com/link-foundation/link-cli/pull/87"} diff --git a/docs/case-studies/issue-86/github-data/wait-for-nuget-clink-2.4.0.log b/docs/case-studies/issue-86/github-data/wait-for-nuget-clink-2.4.0.log new file mode 100644 index 0000000..de0fc22 --- /dev/null +++ b/docs/case-studies/issue-86/github-data/wait-for-nuget-clink-2.4.0.log @@ -0,0 +1,4 @@ +Waiting for clink@2.4.0 on NuGet (1 attempts, 120s interval) +NuGet availability for clink@2.4.0: 200 (attempt 1/1) +Output: nuget_available=true +clink@2.4.0 is available on NuGet diff --git a/docs/case-studies/issue-86/logs/csharp-run-25760911270-publish-excerpt.log b/docs/case-studies/issue-86/logs/csharp-run-25760911270-publish-excerpt.log new file mode 100644 index 0000000..1fcfdc2 --- /dev/null +++ b/docs/case-studies/issue-86/logs/csharp-run-25760911270-publish-excerpt.log @@ -0,0 +1,31 @@ +Release Build release package 2026-05-12T21:20:40.2545964Z Foundation.Data.Doublets.Cli -> /home/runner/work/link-cli/link-cli/csharp/Foundation.Data.Doublets.Cli/bin/Release/net8/publish/ +Release Build release package 2026-05-12T21:20:40.5106745Z Successfully created package '/home/runner/work/link-cli/link-cli/csharp/artifacts/clink.2.4.0.nupkg'. +Release Resolve NuGet package id 2026-05-12T21:20:40.5365901Z ##[group]Run PACKAGE_ID=$(sed -n 's:.*\(.*\).*:\1:p' Foundation.Data.Doublets.Cli/Foundation.Data.Doublets.Cli.csproj | head -n 1) +Release Resolve NuGet package id 2026-05-12T21:20:40.5366684Z ^[[36;1mPACKAGE_ID=$(sed -n 's:.*\(.*\).*:\1:p' Foundation.Data.Doublets.Cli/Foundation.Data.Doublets.Cli.csproj | head -n 1)^[[0m +Release Resolve NuGet package id 2026-05-12T21:20:40.5367145Z ^[[36;1mif [ -z "$PACKAGE_ID" ]; then^[[0m +Release Resolve NuGet package id 2026-05-12T21:20:40.5367351Z ^[[36;1m PACKAGE_ID=clink^[[0m +Release Resolve NuGet package id 2026-05-12T21:20:40.5367518Z ^[[36;1mfi^[[0m +Release Resolve NuGet package id 2026-05-12T21:20:40.5367743Z ^[[36;1mPACKAGE_ID_LOWER=$(echo "$PACKAGE_ID" | tr '[:upper:]' '[:lower:]')^[[0m +Release Resolve NuGet package id 2026-05-12T21:20:40.5368051Z ^[[36;1mecho "id=$PACKAGE_ID" >> "$GITHUB_OUTPUT"^[[0m +Release Resolve NuGet package id 2026-05-12T21:20:40.5368324Z ^[[36;1mecho "flat_container_id=$PACKAGE_ID_LOWER" >> "$GITHUB_OUTPUT"^[[0m +Release Resolve NuGet package id 2026-05-12T21:20:40.5386813Z shell: /usr/bin/bash -e {0} +Release Resolve NuGet package id 2026-05-12T21:20:40.5386999Z env: +Release Resolve NuGet package id 2026-05-12T21:20:40.5387163Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Release Resolve NuGet package id 2026-05-12T21:20:40.5387370Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Release Resolve NuGet package id 2026-05-12T21:20:40.5387596Z DOTNET_NOLOGO: true +Release Resolve NuGet package id 2026-05-12T21:20:40.5387771Z DOTNET_ROOT: /usr/share/dotnet +Release Resolve NuGet package id 2026-05-12T21:20:40.5387957Z ##[endgroup] +Release Validate NuGet API key 2026-05-12T21:20:40.6279917Z ##[group]Run if [ -z "$NUGET_API_KEY" ]; then +Release Validate NuGet API key 2026-05-12T21:20:40.6280203Z ^[[36;1mif [ -z "$NUGET_API_KEY" ]; then^[[0m +Release Validate NuGet API key 2026-05-12T21:20:40.6280532Z ^[[36;1m echo "::warning::NUGET_API_KEY is not configured — NuGet publish will be skipped."^[[0m +Release Validate NuGet API key 2026-05-12T21:20:40.6280852Z ^[[36;1m exit 0^[[0m +Release Validate NuGet API key 2026-05-12T21:20:40.6280999Z ^[[36;1mfi^[[0m +Release Validate NuGet API key 2026-05-12T21:20:40.6281175Z ^[[36;1mecho "NUGET_API_KEY length: ${#NUGET_API_KEY}"^[[0m +Release Validate NuGet API key 2026-05-12T21:20:40.6298530Z shell: /usr/bin/bash -e {0} +Release Validate NuGet API key 2026-05-12T21:20:40.6298710Z env: +Release Validate NuGet API key 2026-05-12T21:20:40.6298980Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Release Validate NuGet API key 2026-05-12T21:20:40.6299188Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Release Validate NuGet API key 2026-05-12T21:20:40.6299378Z DOTNET_NOLOGO: true +Release Validate NuGet API key 2026-05-12T21:20:40.6299537Z DOTNET_ROOT: /usr/share/dotnet +Release Validate NuGet API key 2026-05-12T21:20:40.6300175Z NUGET_API_KEY: *** +Release Validate NuGet API key 2026-05-12T21:20:40.6300357Z ##[endgroup] diff --git a/docs/case-studies/issue-86/logs/csharp-run-25760911270-verify-nuget-excerpt.log b/docs/case-studies/issue-86/logs/csharp-run-25760911270-verify-nuget-excerpt.log new file mode 100644 index 0000000..f691c24 --- /dev/null +++ b/docs/case-studies/issue-86/logs/csharp-run-25760911270-verify-nuget-excerpt.log @@ -0,0 +1,61 @@ +Release Validate NuGet API key 2026-05-12T21:20:40.6300357Z ##[endgroup] +Release Validate NuGet API key 2026-05-12T21:20:40.7251733Z NUGET_API_KEY length: 46 +Release Publish to NuGet 2026-05-12T21:20:40.7280378Z ##[group]Run if [ -n "$NUGET_API_KEY" ]; then +Release Publish to NuGet 2026-05-12T21:20:40.7280643Z ^[[36;1mif [ -n "$NUGET_API_KEY" ]; then^[[0m +Release Publish to NuGet 2026-05-12T21:20:40.7281241Z ^[[36;1m dotnet nuget push ./artifacts/*.nupkg --api-key "$NUGET_API_KEY" --source https://api.nuget.org/v3/index.json --skip-duplicate^[[0m +Release Publish to NuGet 2026-05-12T21:20:40.7281713Z ^[[36;1m echo "published=true" >> "$GITHUB_OUTPUT"^[[0m +Release Publish to NuGet 2026-05-12T21:20:40.7281933Z ^[[36;1melse^[[0m +Release Publish to NuGet 2026-05-12T21:20:40.7282128Z ^[[36;1m echo "NUGET_API_KEY not set, skipping NuGet publish"^[[0m +Release Publish to NuGet 2026-05-12T21:20:40.7282396Z ^[[36;1m echo "published=false" >> "$GITHUB_OUTPUT"^[[0m +Release Publish to NuGet 2026-05-12T21:20:40.7282611Z ^[[36;1mfi^[[0m +Release Publish to NuGet 2026-05-12T21:20:40.7300184Z shell: /usr/bin/bash -e {0} +Release Publish to NuGet 2026-05-12T21:20:40.7300357Z env: +Release Publish to NuGet 2026-05-12T21:20:40.7300524Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Release Publish to NuGet 2026-05-12T21:20:40.7300740Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Release Publish to NuGet 2026-05-12T21:20:40.7300925Z DOTNET_NOLOGO: true +Release Publish to NuGet 2026-05-12T21:20:40.7301093Z DOTNET_ROOT: /usr/share/dotnet +Release Publish to NuGet 2026-05-12T21:20:40.7301493Z NUGET_API_KEY: *** +Release Publish to NuGet 2026-05-12T21:20:40.7301681Z ##[endgroup] +Release Publish to NuGet 2026-05-12T21:20:41.0369432Z Pushing clink.2.4.0.nupkg to 'https://www.nuget.org/api/v2/package'... +Release Publish to NuGet 2026-05-12T21:20:41.0449600Z PUT https://www.nuget.org/api/v2/package/ +Release Publish to NuGet 2026-05-12T21:20:41.6573341Z Created https://www.nuget.org/api/v2/package/ 611ms +Release Publish to NuGet 2026-05-12T21:20:41.6587760Z Your package was pushed. +Release Verify package on NuGet 2026-05-12T21:20:41.6736746Z ##[group]Run PACKAGE_ID="clink" +Release Verify package on NuGet 2026-05-12T21:20:41.6737115Z ^[[36;1mPACKAGE_ID="clink"^[[0m +Release Verify package on NuGet 2026-05-12T21:20:41.6737407Z ^[[36;1mPACKAGE_ID_LOWER="clink"^[[0m +Release Verify package on NuGet 2026-05-12T21:20:41.6737695Z ^[[36;1mVERSION="2.4.0"^[[0m +Release Verify package on NuGet 2026-05-12T21:20:41.6737973Z ^[[36;1mfor DELAY in 0 5 10 20 30 60; do^[[0m +Release Verify package on NuGet 2026-05-12T21:20:41.6738285Z ^[[36;1m if [ "$DELAY" != "0" ]; then^[[0m +Release Verify package on NuGet 2026-05-12T21:20:41.6738589Z ^[[36;1m sleep "$DELAY"^[[0m +Release Verify package on NuGet 2026-05-12T21:20:41.6739032Z ^[[36;1m fi^[[0m +Release Verify package on NuGet 2026-05-12T21:20:41.6739771Z ^[[36;1m STATUS=$(curl -sS -o /dev/null -w '%{http_code}' "https://api.nuget.org/v3-flatcontainer/${PACKAGE_ID_LOWER}/${VERSION}/${PACKAGE_ID_LOWER}.nuspec" || true)^[[0m +Release Verify package on NuGet 2026-05-12T21:20:41.6740668Z ^[[36;1m echo "NuGet status for ${PACKAGE_ID}@${VERSION}: ${STATUS}"^[[0m +Release Verify package on NuGet 2026-05-12T21:20:41.6741109Z ^[[36;1m if [ "$STATUS" = "200" ]; then^[[0m +Release Verify package on NuGet 2026-05-12T21:20:41.6741528Z ^[[36;1m echo "Verified ${PACKAGE_ID}@${VERSION} is available on NuGet"^[[0m +Release Verify package on NuGet 2026-05-12T21:20:41.6741953Z ^[[36;1m exit 0^[[0m +Release Verify package on NuGet 2026-05-12T21:20:41.6742183Z ^[[36;1m fi^[[0m +Release Verify package on NuGet 2026-05-12T21:20:41.6742445Z ^[[36;1mdone^[[0m +Release Verify package on NuGet 2026-05-12T21:20:41.6743001Z ^[[36;1mecho "::error title=NuGet verification failed::${PACKAGE_ID}@${VERSION} was not available from NuGet after publish."^[[0m +Release Verify package on NuGet 2026-05-12T21:20:41.6743644Z ^[[36;1mexit 1^[[0m +Release Verify package on NuGet 2026-05-12T21:20:41.6769522Z shell: /usr/bin/bash -e {0} +Release Verify package on NuGet 2026-05-12T21:20:41.6769820Z env: +Release Verify package on NuGet 2026-05-12T21:20:41.6770092Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Release Verify package on NuGet 2026-05-12T21:20:41.6770439Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Release Verify package on NuGet 2026-05-12T21:20:41.6770736Z DOTNET_NOLOGO: true +Release Verify package on NuGet 2026-05-12T21:20:41.6771000Z DOTNET_ROOT: /usr/share/dotnet +Release Verify package on NuGet 2026-05-12T21:20:41.6771287Z ##[endgroup] +Release Verify package on NuGet 2026-05-12T21:20:41.7602880Z NuGet status for clink@2.4.0: 404 +Release Verify package on NuGet 2026-05-12T21:20:46.8276625Z NuGet status for clink@2.4.0: 404 +Release Verify package on NuGet 2026-05-12T21:20:56.8959205Z NuGet status for clink@2.4.0: 404 +Release Verify package on NuGet 2026-05-12T21:21:16.9670333Z NuGet status for clink@2.4.0: 404 +Release Verify package on NuGet 2026-05-12T21:21:47.0368546Z NuGet status for clink@2.4.0: 404 +Release Verify package on NuGet 2026-05-12T21:22:47.1082969Z NuGet status for clink@2.4.0: 404 +Release Verify package on NuGet 2026-05-12T21:22:47.1099540Z ##[error]clink@2.4.0 was not available from NuGet after publish. +Release Verify package on NuGet 2026-05-12T21:22:47.1106918Z ##[error]Process completed with exit code 1. +Release Post Run actions/checkout@v6 2026-05-12T21:22:47.1186011Z Post job cleanup. +Release Post Run actions/checkout@v6 2026-05-12T21:22:47.1854100Z [command]/usr/bin/git version +Release Post Run actions/checkout@v6 2026-05-12T21:22:47.1884440Z git version 2.53.0 +Release Post Run actions/checkout@v6 2026-05-12T21:22:47.1914993Z Temporarily overriding HOME='/home/runner/work/_temp/92f808f0-b247-4818-bb43-01124b0e705b' before making global git config changes +Release Post Run actions/checkout@v6 2026-05-12T21:22:47.1916435Z Adding repository directory to the temporary git global config as a safe directory +Release Post Run actions/checkout@v6 2026-05-12T21:22:47.1919469Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/link-cli/link-cli +Release Post Run actions/checkout@v6 2026-05-12T21:22:47.1944593Z Removing SSH command configuration diff --git a/docs/case-studies/issue-86/logs/csharp-run-25760911270.log b/docs/case-studies/issue-86/logs/csharp-run-25760911270.log new file mode 100644 index 0000000..a94cdcb --- /dev/null +++ b/docs/case-studies/issue-86/logs/csharp-run-25760911270.log @@ -0,0 +1,6472 @@ +Lint and Format Check Set up job 2026-05-12T20:40:22.1631605Z Current runner version: '2.334.0' +Lint and Format Check Set up job 2026-05-12T20:40:22.1657113Z ##[group]Runner Image Provisioner +Lint and Format Check Set up job 2026-05-12T20:40:22.1658096Z Hosted Compute Agent +Lint and Format Check Set up job 2026-05-12T20:40:22.1658605Z Version: 20260213.493 +Lint and Format Check Set up job 2026-05-12T20:40:22.1659235Z Commit: 5c115507f6dd24b8de37d8bbe0bb4509d0cc0fa3 +Lint and Format Check Set up job 2026-05-12T20:40:22.1659938Z Build Date: 2026-02-13T00:28:41Z +Lint and Format Check Set up job 2026-05-12T20:40:22.1660603Z Worker ID: {c5efafcf-fe26-4e99-a7c1-adeecdcb9daf} +Lint and Format Check Set up job 2026-05-12T20:40:22.1661334Z Azure Region: eastus +Lint and Format Check Set up job 2026-05-12T20:40:22.1661837Z ##[endgroup] +Lint and Format Check Set up job 2026-05-12T20:40:22.1663501Z ##[group]Operating System +Lint and Format Check Set up job 2026-05-12T20:40:22.1664067Z Ubuntu +Lint and Format Check Set up job 2026-05-12T20:40:22.1664665Z 24.04.4 +Lint and Format Check Set up job 2026-05-12T20:40:22.1665414Z LTS +Lint and Format Check Set up job 2026-05-12T20:40:22.1665939Z ##[endgroup] +Lint and Format Check Set up job 2026-05-12T20:40:22.1666490Z ##[group]Runner Image +Lint and Format Check Set up job 2026-05-12T20:40:22.1667040Z Image: ubuntu-24.04 +Lint and Format Check Set up job 2026-05-12T20:40:22.1667528Z Version: 20260413.86.1 +Lint and Format Check Set up job 2026-05-12T20:40:22.1668588Z Included Software: https://github.com/actions/runner-images/blob/ubuntu24/20260413.86/images/ubuntu/Ubuntu2404-Readme.md +Lint and Format Check Set up job 2026-05-12T20:40:22.1670240Z Image Release: https://github.com/actions/runner-images/releases/tag/ubuntu24%2F20260413.86 +Lint and Format Check Set up job 2026-05-12T20:40:22.1671197Z ##[endgroup] +Lint and Format Check Set up job 2026-05-12T20:40:22.1674311Z ##[group]GITHUB_TOKEN Permissions +Lint and Format Check Set up job 2026-05-12T20:40:22.1676981Z Actions: write +Lint and Format Check Set up job 2026-05-12T20:40:22.1677525Z ArtifactMetadata: write +Lint and Format Check Set up job 2026-05-12T20:40:22.1678133Z Attestations: write +Lint and Format Check Set up job 2026-05-12T20:40:22.1678632Z Checks: write +Lint and Format Check Set up job 2026-05-12T20:40:22.1679113Z CodeQuality: write +Lint and Format Check Set up job 2026-05-12T20:40:22.1679553Z Contents: write +Lint and Format Check Set up job 2026-05-12T20:40:22.1680145Z Deployments: write +Lint and Format Check Set up job 2026-05-12T20:40:22.1680609Z Discussions: write +Lint and Format Check Set up job 2026-05-12T20:40:22.1681078Z Issues: write +Lint and Format Check Set up job 2026-05-12T20:40:22.1681642Z Metadata: read +Lint and Format Check Set up job 2026-05-12T20:40:22.1682082Z Models: read +Lint and Format Check Set up job 2026-05-12T20:40:22.1682544Z Packages: write +Lint and Format Check Set up job 2026-05-12T20:40:22.1683174Z Pages: write +Lint and Format Check Set up job 2026-05-12T20:40:22.1683666Z PullRequests: write +Lint and Format Check Set up job 2026-05-12T20:40:22.1684147Z RepositoryProjects: write +Lint and Format Check Set up job 2026-05-12T20:40:22.1684752Z SecurityEvents: write +Lint and Format Check Set up job 2026-05-12T20:40:22.1685477Z Statuses: write +Lint and Format Check Set up job 2026-05-12T20:40:22.1685987Z VulnerabilityAlerts: read +Lint and Format Check Set up job 2026-05-12T20:40:22.1686647Z ##[endgroup] +Lint and Format Check Set up job 2026-05-12T20:40:22.1688597Z Secret source: Actions +Lint and Format Check Set up job 2026-05-12T20:40:22.1689580Z Prepare workflow directory +Lint and Format Check Set up job 2026-05-12T20:40:22.2095705Z Prepare all required actions +Lint and Format Check Set up job 2026-05-12T20:40:22.2132126Z Getting action download info +Lint and Format Check Set up job 2026-05-12T20:40:22.5489787Z Download action repository 'actions/checkout@v6' (SHA:de0fac2e4500dabe0009e67214ff5f5447ce83dd) +Lint and Format Check Set up job 2026-05-12T20:40:22.6854977Z Download action repository 'actions/setup-dotnet@v5' (SHA:c2fa09f4bde5ebb9d1777cf28262a3eb3db3ced7) +Lint and Format Check Set up job 2026-05-12T20:40:22.8506744Z Download action repository 'actions/setup-node@v6' (SHA:48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e) +Lint and Format Check Set up job 2026-05-12T20:40:23.1702329Z Complete job name: Lint and Format Check +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.2556273Z ##[group]Run actions/checkout@v6 +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.2557629Z with: +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.2558363Z repository: link-foundation/link-cli +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.2559610Z token: *** +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.2560299Z ssh-strict: true +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.2561024Z ssh-user: git +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.2561755Z persist-credentials: true +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.2562588Z clean: true +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.2563309Z sparse-checkout-cone-mode: true +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.2564233Z fetch-depth: 1 +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.2564944Z fetch-tags: false +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.2565925Z show-progress: true +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.2566671Z lfs: false +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.2567377Z submodules: false +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.2568131Z set-safe-directory: true +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.2569185Z env: +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.2569893Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.2570916Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.2571826Z DOTNET_NOLOGO: true +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.2572553Z ##[endgroup] +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.3525965Z Syncing repository: link-foundation/link-cli +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.3529000Z ##[group]Getting Git version info +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.3530325Z Working directory is '/home/runner/work/link-cli/link-cli' +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.3532066Z [command]/usr/bin/git version +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.3640746Z git version 2.53.0 +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.3664089Z ##[endgroup] +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.3678748Z Temporarily overriding HOME='/home/runner/work/_temp/2a46da37-9ad9-412b-b52c-6def9f93c3be' before making global git config changes +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.3682803Z Adding repository directory to the temporary git global config as a safe directory +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.3685977Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/link-cli/link-cli +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.3717875Z Deleting the contents of '/home/runner/work/link-cli/link-cli' +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.3722133Z ##[group]Initializing the repository +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.3727476Z [command]/usr/bin/git init /home/runner/work/link-cli/link-cli +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.3831203Z hint: Using 'master' as the name for the initial branch. This default branch name +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.3833615Z hint: will change to "main" in Git 3.0. To configure the initial branch name +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.3835743Z hint: to use in all of your new repositories, which will suppress this warning, +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.3837164Z hint: call: +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.3837796Z hint: +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.3838617Z hint: git config --global init.defaultBranch +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.3839673Z hint: +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.3840882Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.3843121Z hint: 'development'. The just-created branch can be renamed via this command: +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.3844488Z hint: +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.3845393Z hint: git branch -m +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.3846217Z hint: +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.3847327Z hint: Disable this message with "git config set advice.defaultBranchName false" +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.3849324Z Initialized empty Git repository in /home/runner/work/link-cli/link-cli/.git/ +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.3852255Z [command]/usr/bin/git remote add origin https://github.com/link-foundation/link-cli +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.3875487Z ##[endgroup] +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.3877620Z ##[group]Disabling automatic garbage collection +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.3879917Z [command]/usr/bin/git config --local gc.auto 0 +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.3906979Z ##[endgroup] +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.3908836Z ##[group]Setting up auth +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.3909790Z Removing SSH command configuration +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.3913994Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.3946577Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :" +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.4233620Z Removing HTTP extra header +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.4240068Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.4272650Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :" +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.4479821Z Removing includeIf entries pointing to credentials config files +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.4486279Z [command]/usr/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir: +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.4518414Z [command]/usr/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.4737255Z [command]/usr/bin/git config --file /home/runner/work/_temp/git-credentials-3a05d00f-de64-46f4-9126-4c5449cb4ec0.config http.https://github.com/.extraheader AUTHORIZATION: basic *** +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.4770974Z [command]/usr/bin/git config --local includeIf.gitdir:/home/runner/work/link-cli/link-cli/.git.path /home/runner/work/_temp/git-credentials-3a05d00f-de64-46f4-9126-4c5449cb4ec0.config +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.4800014Z [command]/usr/bin/git config --local includeIf.gitdir:/home/runner/work/link-cli/link-cli/.git/worktrees/*.path /home/runner/work/_temp/git-credentials-3a05d00f-de64-46f4-9126-4c5449cb4ec0.config +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.4829438Z [command]/usr/bin/git config --local includeIf.gitdir:/github/workspace/.git.path /github/runner_temp/git-credentials-3a05d00f-de64-46f4-9126-4c5449cb4ec0.config +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.4859134Z [command]/usr/bin/git config --local includeIf.gitdir:/github/workspace/.git/worktrees/*.path /github/runner_temp/git-credentials-3a05d00f-de64-46f4-9126-4c5449cb4ec0.config +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.4885642Z ##[endgroup] +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.4887317Z ##[group]Fetching the repository +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:23.4893879Z [command]/usr/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules --depth=1 origin +0c8092c56b0fb11704f89398b6d831cd9bbe007d:refs/remotes/origin/main +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:24.2576524Z From https://github.com/link-foundation/link-cli +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:24.2577688Z * [new ref] 0c8092c56b0fb11704f89398b6d831cd9bbe007d -> origin/main +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:24.2610169Z [command]/usr/bin/git branch --list --remote origin/main +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:24.2633418Z origin/main +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:24.2641219Z [command]/usr/bin/git rev-parse refs/remotes/origin/main +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:24.2664830Z 0c8092c56b0fb11704f89398b6d831cd9bbe007d +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:24.2669895Z ##[endgroup] +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:24.2670891Z ##[group]Determining the checkout info +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:24.2671978Z ##[endgroup] +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:24.2675880Z [command]/usr/bin/git sparse-checkout disable +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:24.2716407Z [command]/usr/bin/git config --local --unset-all extensions.worktreeConfig +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:24.2743803Z ##[group]Checking out the ref +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:24.2748424Z [command]/usr/bin/git checkout --progress --force -B main refs/remotes/origin/main +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:24.3404997Z Switched to a new branch 'main' +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:24.3406915Z branch 'main' set up to track 'origin/main'. +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:24.3419203Z ##[endgroup] +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:24.3458611Z [command]/usr/bin/git log -1 --format=%H +Lint and Format Check Run actions/checkout@v6 2026-05-12T20:40:24.3481704Z 0c8092c56b0fb11704f89398b6d831cd9bbe007d +Lint and Format Check Setup .NET 2026-05-12T20:40:24.3719494Z ##[group]Run actions/setup-dotnet@v5 +Lint and Format Check Setup .NET 2026-05-12T20:40:24.3720125Z with: +Lint and Format Check Setup .NET 2026-05-12T20:40:24.3720608Z dotnet-version: 8.0.x +Lint and Format Check Setup .NET 2026-05-12T20:40:24.3721064Z cache: false +Lint and Format Check Setup .NET 2026-05-12T20:40:24.3721428Z env: +Lint and Format Check Setup .NET 2026-05-12T20:40:24.3722012Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Lint and Format Check Setup .NET 2026-05-12T20:40:24.3722492Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Lint and Format Check Setup .NET 2026-05-12T20:40:24.3723001Z DOTNET_NOLOGO: true +Lint and Format Check Setup .NET 2026-05-12T20:40:24.3723456Z ##[endgroup] +Lint and Format Check Setup .NET 2026-05-12T20:40:24.5035847Z [command]/home/runner/work/_actions/actions/setup-dotnet/v5/externals/install-dotnet.sh --skip-non-versioned-files --runtime dotnet --channel LTS +Lint and Format Check Setup .NET 2026-05-12T20:40:24.7129083Z dotnet-install: Attempting to download using aka.ms link https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.8/dotnet-runtime-10.0.8-linux-x64.tar.gz +Lint and Format Check Setup .NET 2026-05-12T20:40:24.9589806Z dotnet-install: Remote file https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.8/dotnet-runtime-10.0.8-linux-x64.tar.gz size is 36625163 bytes. +Lint and Format Check Setup .NET 2026-05-12T20:40:24.9592101Z dotnet-install: Extracting archive from https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.8/dotnet-runtime-10.0.8-linux-x64.tar.gz +Lint and Format Check Setup .NET 2026-05-12T20:40:25.6478605Z dotnet-install: Downloaded file size is 36625163 bytes. +Lint and Format Check Setup .NET 2026-05-12T20:40:25.6480092Z dotnet-install: The remote and local file sizes are equal. +Lint and Format Check Setup .NET 2026-05-12T20:40:25.6757265Z dotnet-install: Installed version is 10.0.8 +Lint and Format Check Setup .NET 2026-05-12T20:40:25.6811595Z dotnet-install: Adding to current process PATH: `/usr/share/dotnet`. Note: This change will be visible only when sourcing script. +Lint and Format Check Setup .NET 2026-05-12T20:40:25.6813293Z dotnet-install: Note that the script does not resolve dependencies during installation. +Lint and Format Check Setup .NET 2026-05-12T20:40:25.6814892Z dotnet-install: To check the list of dependencies, go to https://learn.microsoft.com/dotnet/core/install, select your operating system and check the "Dependencies" section. +Lint and Format Check Setup .NET 2026-05-12T20:40:25.6816785Z dotnet-install: Installation finished successfully. +Lint and Format Check Setup .NET 2026-05-12T20:40:25.6839813Z [command]/home/runner/work/_actions/actions/setup-dotnet/v5/externals/install-dotnet.sh --skip-non-versioned-files --channel 8.0 +Lint and Format Check Setup .NET 2026-05-12T20:40:25.8697124Z dotnet-install: Attempting to download using aka.ms link https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.421/dotnet-sdk-8.0.421-linux-x64.tar.gz +Lint and Format Check Setup .NET 2026-05-12T20:40:26.9577555Z dotnet-install: Remote file https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.421/dotnet-sdk-8.0.421-linux-x64.tar.gz size is 216612394 bytes. +Lint and Format Check Setup .NET 2026-05-12T20:40:26.9581034Z dotnet-install: Extracting archive from https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.421/dotnet-sdk-8.0.421-linux-x64.tar.gz +Lint and Format Check Setup .NET 2026-05-12T20:40:31.7811557Z dotnet-install: Downloaded file size is 216612394 bytes. +Lint and Format Check Setup .NET 2026-05-12T20:40:31.7812709Z dotnet-install: The remote and local file sizes are equal. +Lint and Format Check Setup .NET 2026-05-12T20:40:32.0215879Z dotnet-install: Installed version is 8.0.421 +Lint and Format Check Setup .NET 2026-05-12T20:40:32.0271460Z dotnet-install: Adding to current process PATH: `/usr/share/dotnet`. Note: This change will be visible only when sourcing script. +Lint and Format Check Setup .NET 2026-05-12T20:40:32.0273039Z dotnet-install: Note that the script does not resolve dependencies during installation. +Lint and Format Check Setup .NET 2026-05-12T20:40:32.0274796Z dotnet-install: To check the list of dependencies, go to https://learn.microsoft.com/dotnet/core/install, select your operating system and check the "Dependencies" section. +Lint and Format Check Setup .NET 2026-05-12T20:40:32.0275984Z dotnet-install: Installation finished successfully. +Lint and Format Check Setup Node.js 2026-05-12T20:40:32.0522683Z ##[group]Run actions/setup-node@v6 +Lint and Format Check Setup Node.js 2026-05-12T20:40:32.0522964Z with: +Lint and Format Check Setup Node.js 2026-05-12T20:40:32.0523138Z node-version: 20.x +Lint and Format Check Setup Node.js 2026-05-12T20:40:32.0523330Z check-latest: false +Lint and Format Check Setup Node.js 2026-05-12T20:40:32.0523640Z token: *** +Lint and Format Check Setup Node.js 2026-05-12T20:40:32.0523833Z package-manager-cache: true +Lint and Format Check Setup Node.js 2026-05-12T20:40:32.0524046Z env: +Lint and Format Check Setup Node.js 2026-05-12T20:40:32.0524229Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Lint and Format Check Setup Node.js 2026-05-12T20:40:32.0524500Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Lint and Format Check Setup Node.js 2026-05-12T20:40:32.0524760Z DOTNET_NOLOGO: true +Lint and Format Check Setup Node.js 2026-05-12T20:40:32.0524958Z DOTNET_ROOT: /usr/share/dotnet +Lint and Format Check Setup Node.js 2026-05-12T20:40:32.0525436Z ##[endgroup] +Lint and Format Check Setup Node.js 2026-05-12T20:40:32.2288505Z Found in cache @ /opt/hostedtoolcache/node/20.20.2/x64 +Lint and Format Check Setup Node.js 2026-05-12T20:40:32.2292369Z ##[group]Environment details +Lint and Format Check Setup Node.js 2026-05-12T20:40:35.5443201Z node: v20.20.2 +Lint and Format Check Setup Node.js 2026-05-12T20:40:35.5443656Z npm: 10.8.2 +Lint and Format Check Setup Node.js 2026-05-12T20:40:35.5443953Z yarn: 1.22.22 +Lint and Format Check Setup Node.js 2026-05-12T20:40:35.5444844Z ##[endgroup] +Lint and Format Check Run release script tests 2026-05-12T20:40:35.5569817Z ##[group]Run node --test csharp/scripts/*.test.mjs +Lint and Format Check Run release script tests 2026-05-12T20:40:35.5570217Z ^[[36;1mnode --test csharp/scripts/*.test.mjs^[[0m +Lint and Format Check Run release script tests 2026-05-12T20:40:35.5601590Z shell: /usr/bin/bash -e {0} +Lint and Format Check Run release script tests 2026-05-12T20:40:35.5601833Z env: +Lint and Format Check Run release script tests 2026-05-12T20:40:35.5602023Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Lint and Format Check Run release script tests 2026-05-12T20:40:35.5602294Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Lint and Format Check Run release script tests 2026-05-12T20:40:35.5602524Z DOTNET_NOLOGO: true +Lint and Format Check Run release script tests 2026-05-12T20:40:35.5602719Z DOTNET_ROOT: /usr/share/dotnet +Lint and Format Check Run release script tests 2026-05-12T20:40:35.5602937Z ##[endgroup] +Lint and Format Check Run release script tests 2026-05-12T20:40:35.6020879Z TAP version 13 +Lint and Format Check Run release script tests 2026-05-12T20:40:35.7880628Z # To /tmp/link-cli-csharp-version-gFes5f/remote.git +Lint and Format Check Run release script tests 2026-05-12T20:40:35.7881988Z # * [new branch] main -> main +Lint and Format Check Run release script tests 2026-05-12T20:40:35.8810221Z # To /tmp/link-cli-csharp-version-gFes5f/remote.git +Lint and Format Check Run release script tests 2026-05-12T20:40:35.8811867Z # ae7d8f5..4a885ff main -> main +Lint and Format Check Run release script tests 2026-05-12T20:40:35.8816286Z # To /tmp/link-cli-csharp-version-gFes5f/remote.git +Lint and Format Check Run release script tests 2026-05-12T20:40:35.8818733Z # * [new tag] csharp-v2.4.0 -> csharp-v2.4.0 +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9037133Z # Subtest: merge-changesets honors the requested directory and package name +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9056246Z ok 1 - merge-changesets honors the requested directory and package name +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9067602Z --- +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9095202Z duration_ms: 39.121115 +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9105797Z ... +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9106788Z # Subtest: create-github-release dry run uses tag prefix and component changelog +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9108312Z ok 2 - create-github-release dry run uses tag prefix and component changelog +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9109212Z --- +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9109721Z duration_ms: 33.725534 +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9110266Z ... +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9111284Z # Subtest: create-github-release dry run reports matching assets without uploading +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9112632Z ok 3 - create-github-release dry run reports matching assets without uploading +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9113828Z --- +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9114312Z duration_ms: 32.983964 +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9114851Z ... +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9116132Z # Subtest: version-and-commit creates a C\# release commit when the next tag is missing +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9117542Z ok 4 - version-and-commit creates a C\# release commit when the next tag is missing +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9118439Z --- +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9118945Z duration_ms: 145.776205 +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9119573Z ... +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9120560Z # Subtest: check-release-needed decide(): changesets take the normal release path +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9121933Z ok 5 - check-release-needed decide(): changesets take the normal release path +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9123032Z --- +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9123669Z duration_ms: 0.305831 +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9124231Z ... +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9125693Z # Subtest: check-release-needed decide(): self-heals when csproj version is missing from NuGet +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9127291Z ok 6 - check-release-needed decide(): self-heals when csproj version is missing from NuGet +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9128208Z --- +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9128685Z duration_ms: 0.691701 +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9129209Z ... +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9130226Z # Subtest: check-release-needed decide(): self-heals when package id is unknown to NuGet +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9131681Z ok 7 - check-release-needed decide(): self-heals when package id is unknown to NuGet +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9132521Z --- +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9132973Z duration_ms: 0.242442 +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9133452Z ... +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9134568Z # Subtest: check-release-needed decide(): self-heals GitHub release when NuGet already has the version +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9136436Z ok 8 - check-release-needed decide(): self-heals GitHub release when NuGet already has the version +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9137383Z --- +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9137891Z duration_ms: 0.170909 +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9138479Z ... +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9139587Z # Subtest: check-release-needed decide(): no-op when both NuGet and GitHub release exist +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9141053Z ok 9 - check-release-needed decide(): no-op when both NuGet and GitHub release exist +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9141942Z --- +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9142760Z duration_ms: 0.286185 +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9143286Z ... +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9144263Z # Subtest: check-release-needed readCsprojInfo() extracts version and package id +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9145869Z ok 10 - check-release-needed readCsprojInfo() extracts version and package id +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9146742Z --- +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9147262Z duration_ms: 0.527164 +Lint and Format Check Run release script tests 2026-05-12T20:40:35.9147779Z ... +Lint and Format Check Run release script tests 2026-05-12T20:40:36.0656979Z # Subtest: check-release-needed CLI writes self-healing outputs when NuGet version is missing +Lint and Format Check Run release script tests 2026-05-12T20:40:36.0659247Z ok 11 - check-release-needed CLI writes self-healing outputs when NuGet version is missing +Lint and Format Check Run release script tests 2026-05-12T20:40:36.0659981Z --- +Lint and Format Check Run release script tests 2026-05-12T20:40:36.0660300Z duration_ms: 170.593926 +Lint and Format Check Run release script tests 2026-05-12T20:40:36.0660672Z ... +Lint and Format Check Run release script tests 2026-05-12T20:40:36.2110312Z # Subtest: check-release-needed CLI short-circuits when NuGet and GitHub already have the release +Lint and Format Check Run release script tests 2026-05-12T20:40:36.2113448Z ok 12 - check-release-needed CLI short-circuits when NuGet and GitHub already have the release +Lint and Format Check Run release script tests 2026-05-12T20:40:36.2114679Z --- +Lint and Format Check Run release script tests 2026-05-12T20:40:36.2115493Z duration_ms: 147.825066 +Lint and Format Check Run release script tests 2026-05-12T20:40:36.2115892Z ... +Lint and Format Check Run release script tests 2026-05-12T20:40:36.2228917Z 1..12 +Lint and Format Check Run release script tests 2026-05-12T20:40:36.2229715Z # tests 12 +Lint and Format Check Run release script tests 2026-05-12T20:40:36.2230058Z # suites 0 +Lint and Format Check Run release script tests 2026-05-12T20:40:36.2230287Z # pass 12 +Lint and Format Check Run release script tests 2026-05-12T20:40:36.2231058Z # fail 0 +Lint and Format Check Run release script tests 2026-05-12T20:40:36.2234764Z # cancelled 0 +Lint and Format Check Run release script tests 2026-05-12T20:40:36.2235548Z # skipped 0 +Lint and Format Check Run release script tests 2026-05-12T20:40:36.2235909Z # todo 0 +Lint and Format Check Run release script tests 2026-05-12T20:40:36.2241787Z # duration_ms 630.87203 +Lint and Format Check Restore dependencies 2026-05-12T20:40:36.2320919Z ##[group]Run dotnet restore +Lint and Format Check Restore dependencies 2026-05-12T20:40:36.2321198Z ^[[36;1mdotnet restore^[[0m +Lint and Format Check Restore dependencies 2026-05-12T20:40:36.2342937Z shell: /usr/bin/bash -e {0} +Lint and Format Check Restore dependencies 2026-05-12T20:40:36.2343157Z env: +Lint and Format Check Restore dependencies 2026-05-12T20:40:36.2343350Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Lint and Format Check Restore dependencies 2026-05-12T20:40:36.2343772Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Lint and Format Check Restore dependencies 2026-05-12T20:40:36.2344007Z DOTNET_NOLOGO: true +Lint and Format Check Restore dependencies 2026-05-12T20:40:36.2344198Z DOTNET_ROOT: /usr/share/dotnet +Lint and Format Check Restore dependencies 2026-05-12T20:40:36.2344416Z ##[endgroup] +Lint and Format Check Restore dependencies 2026-05-12T20:40:38.7876475Z Determining projects to restore... +Lint and Format Check Restore dependencies 2026-05-12T20:40:43.6433878Z Restored /home/runner/work/link-cli/link-cli/csharp/Foundation.Data.Doublets.Cli.Tests/Foundation.Data.Doublets.Cli.Tests.csproj (in 4.2 sec). +Lint and Format Check Restore dependencies 2026-05-12T20:40:43.6437219Z Restored /home/runner/work/link-cli/link-cli/csharp/Foundation.Data.Doublets.Cli/Foundation.Data.Doublets.Cli.csproj (in 4.2 sec). +Lint and Format Check Build 2026-05-12T20:40:43.6822242Z ##[group]Run dotnet build --no-restore --configuration Release +Lint and Format Check Build 2026-05-12T20:40:43.6822710Z ^[[36;1mdotnet build --no-restore --configuration Release^[[0m +Lint and Format Check Build 2026-05-12T20:40:43.6843426Z shell: /usr/bin/bash -e {0} +Lint and Format Check Build 2026-05-12T20:40:43.6843650Z env: +Lint and Format Check Build 2026-05-12T20:40:43.6843840Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Lint and Format Check Build 2026-05-12T20:40:43.6844104Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Lint and Format Check Build 2026-05-12T20:40:43.6844351Z DOTNET_NOLOGO: true +Lint and Format Check Build 2026-05-12T20:40:43.6844545Z DOTNET_ROOT: /usr/share/dotnet +Lint and Format Check Build 2026-05-12T20:40:43.6844766Z ##[endgroup] +Lint and Format Check Build 2026-05-12T20:40:49.6916497Z Foundation.Data.Doublets.Cli -> /home/runner/work/link-cli/link-cli/csharp/Foundation.Data.Doublets.Cli/bin/Release/net8/Foundation.Data.Doublets.Cli.dll +Lint and Format Check Build 2026-05-12T20:40:51.0544787Z Foundation.Data.Doublets.Cli.Tests -> /home/runner/work/link-cli/link-cli/csharp/Foundation.Data.Doublets.Cli.Tests/bin/Release/net8/Foundation.Data.Doublets.Cli.Tests.dll +Lint and Format Check Build 2026-05-12T20:40:51.0747451Z +Lint and Format Check Build 2026-05-12T20:40:51.0753795Z Build succeeded. +Lint and Format Check Build 2026-05-12T20:40:51.0754497Z 0 Warning(s) +Lint and Format Check Build 2026-05-12T20:40:51.0754796Z 0 Error(s) +Lint and Format Check Build 2026-05-12T20:40:51.0755758Z +Lint and Format Check Build 2026-05-12T20:40:51.0756108Z Time Elapsed 00:00:07.21 +Lint and Format Check Post Setup Node.js 2026-05-12T20:40:51.0959481Z Post job cleanup. +Lint and Format Check Post Setup .NET 2026-05-12T20:40:51.2275733Z Post job cleanup. +Lint and Format Check Post Run actions/checkout@v6 2026-05-12T20:40:51.3562795Z Post job cleanup. +Lint and Format Check Post Run actions/checkout@v6 2026-05-12T20:40:51.4383342Z [command]/usr/bin/git version +Lint and Format Check Post Run actions/checkout@v6 2026-05-12T20:40:51.4420404Z git version 2.53.0 +Lint and Format Check Post Run actions/checkout@v6 2026-05-12T20:40:51.4460590Z Temporarily overriding HOME='/home/runner/work/_temp/c3edcb8d-a752-465d-89b4-4b75d4c1b2c3' before making global git config changes +Lint and Format Check Post Run actions/checkout@v6 2026-05-12T20:40:51.4461547Z Adding repository directory to the temporary git global config as a safe directory +Lint and Format Check Post Run actions/checkout@v6 2026-05-12T20:40:51.4465926Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/link-cli/link-cli +Lint and Format Check Post Run actions/checkout@v6 2026-05-12T20:40:51.4494833Z Removing SSH command configuration +Lint and Format Check Post Run actions/checkout@v6 2026-05-12T20:40:51.4501651Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand +Lint and Format Check Post Run actions/checkout@v6 2026-05-12T20:40:51.4535300Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :" +Lint and Format Check Post Run actions/checkout@v6 2026-05-12T20:40:51.4750166Z Removing HTTP extra header +Lint and Format Check Post Run actions/checkout@v6 2026-05-12T20:40:51.4754718Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader +Lint and Format Check Post Run actions/checkout@v6 2026-05-12T20:40:51.4788189Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :" +Lint and Format Check Post Run actions/checkout@v6 2026-05-12T20:40:51.5006358Z Removing includeIf entries pointing to credentials config files +Lint and Format Check Post Run actions/checkout@v6 2026-05-12T20:40:51.5013173Z [command]/usr/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir: +Lint and Format Check Post Run actions/checkout@v6 2026-05-12T20:40:51.5037655Z includeif.gitdir:/home/runner/work/link-cli/link-cli/.git.path +Lint and Format Check Post Run actions/checkout@v6 2026-05-12T20:40:51.5038789Z includeif.gitdir:/home/runner/work/link-cli/link-cli/.git/worktrees/*.path +Lint and Format Check Post Run actions/checkout@v6 2026-05-12T20:40:51.5039723Z includeif.gitdir:/github/workspace/.git.path +Lint and Format Check Post Run actions/checkout@v6 2026-05-12T20:40:51.5040574Z includeif.gitdir:/github/workspace/.git/worktrees/*.path +Lint and Format Check Post Run actions/checkout@v6 2026-05-12T20:40:51.5047918Z [command]/usr/bin/git config --local --get-all includeif.gitdir:/home/runner/work/link-cli/link-cli/.git.path +Lint and Format Check Post Run actions/checkout@v6 2026-05-12T20:40:51.5069395Z /home/runner/work/_temp/git-credentials-3a05d00f-de64-46f4-9126-4c5449cb4ec0.config +Lint and Format Check Post Run actions/checkout@v6 2026-05-12T20:40:51.5080755Z [command]/usr/bin/git config --local --unset includeif.gitdir:/home/runner/work/link-cli/link-cli/.git.path /home/runner/work/_temp/git-credentials-3a05d00f-de64-46f4-9126-4c5449cb4ec0.config +Lint and Format Check Post Run actions/checkout@v6 2026-05-12T20:40:51.5114723Z [command]/usr/bin/git config --local --get-all includeif.gitdir:/home/runner/work/link-cli/link-cli/.git/worktrees/*.path +Lint and Format Check Post Run actions/checkout@v6 2026-05-12T20:40:51.5136376Z /home/runner/work/_temp/git-credentials-3a05d00f-de64-46f4-9126-4c5449cb4ec0.config +Lint and Format Check Post Run actions/checkout@v6 2026-05-12T20:40:51.5146214Z [command]/usr/bin/git config --local --unset includeif.gitdir:/home/runner/work/link-cli/link-cli/.git/worktrees/*.path /home/runner/work/_temp/git-credentials-3a05d00f-de64-46f4-9126-4c5449cb4ec0.config +Lint and Format Check Post Run actions/checkout@v6 2026-05-12T20:40:51.5176394Z [command]/usr/bin/git config --local --get-all includeif.gitdir:/github/workspace/.git.path +Lint and Format Check Post Run actions/checkout@v6 2026-05-12T20:40:51.5196685Z /github/runner_temp/git-credentials-3a05d00f-de64-46f4-9126-4c5449cb4ec0.config +Lint and Format Check Post Run actions/checkout@v6 2026-05-12T20:40:51.5203883Z [command]/usr/bin/git config --local --unset includeif.gitdir:/github/workspace/.git.path /github/runner_temp/git-credentials-3a05d00f-de64-46f4-9126-4c5449cb4ec0.config +Lint and Format Check Post Run actions/checkout@v6 2026-05-12T20:40:51.5233346Z [command]/usr/bin/git config --local --get-all includeif.gitdir:/github/workspace/.git/worktrees/*.path +Lint and Format Check Post Run actions/checkout@v6 2026-05-12T20:40:51.5253846Z /github/runner_temp/git-credentials-3a05d00f-de64-46f4-9126-4c5449cb4ec0.config +Lint and Format Check Post Run actions/checkout@v6 2026-05-12T20:40:51.5262102Z [command]/usr/bin/git config --local --unset includeif.gitdir:/github/workspace/.git/worktrees/*.path /github/runner_temp/git-credentials-3a05d00f-de64-46f4-9126-4c5449cb4ec0.config +Lint and Format Check Post Run actions/checkout@v6 2026-05-12T20:40:51.5292432Z [command]/usr/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url +Lint and Format Check Post Run actions/checkout@v6 2026-05-12T20:40:51.5504648Z Removing credentials config '/home/runner/work/_temp/git-credentials-3a05d00f-de64-46f4-9126-4c5449cb4ec0.config' +Lint and Format Check Complete job 2026-05-12T20:40:51.5649067Z Cleaning up orphan processes +Lint and Format Check Complete job 2026-05-12T20:40:51.5951529Z Terminate orphan process: pid (2959) (dotnet) +Lint and Format Check Complete job 2026-05-12T20:40:51.5971117Z Terminate orphan process: pid (3035) (VBCSCompiler) +Test (windows-latest) Set up job 2026-05-12T20:40:29.4580523Z Current runner version: '2.334.0' +Test (windows-latest) Set up job 2026-05-12T20:40:30.0001830Z ##[group]Runner Image Provisioner +Test (windows-latest) Set up job 2026-05-12T20:40:30.0002798Z Hosted Compute Agent +Test (windows-latest) Set up job 2026-05-12T20:40:30.0003369Z Version: 20260422.526 +Test (windows-latest) Set up job 2026-05-12T20:40:30.0003944Z Commit: e1a9e573f4d0838b3a7c1b07401aeb29ed3635a9 +Test (windows-latest) Set up job 2026-05-12T20:40:30.0004666Z Build Date: 2026-04-22T09:31:31Z +Test (windows-latest) Set up job 2026-05-12T20:40:30.0005328Z Worker ID: {6239c420-3145-432a-b58a-ff94ac056233} +Test (windows-latest) Set up job 2026-05-12T20:40:30.0006024Z Azure Region: westus +Test (windows-latest) Set up job 2026-05-12T20:40:30.0006527Z ##[endgroup] +Test (windows-latest) Set up job 2026-05-12T20:40:30.0007918Z ##[group]Operating System +Test (windows-latest) Set up job 2026-05-12T20:40:30.0008541Z Microsoft Windows Server 2025 +Test (windows-latest) Set up job 2026-05-12T20:40:30.0009118Z 10.0.26100 +Test (windows-latest) Set up job 2026-05-12T20:40:30.0009608Z Datacenter +Test (windows-latest) Set up job 2026-05-12T20:40:30.0010033Z ##[endgroup] +Test (windows-latest) Set up job 2026-05-12T20:40:30.0010510Z ##[group]Runner Image +Test (windows-latest) Set up job 2026-05-12T20:40:30.0011404Z Image: windows-2025-vs2026 +Test (windows-latest) Set up job 2026-05-12T20:40:30.0012239Z Version: 20260428.85.1 +Test (windows-latest) Set up job 2026-05-12T20:40:30.0013413Z Included Software: https://github.com/actions/runner-images/blob/win25-vs2026/20260428.85/images/windows/Windows2025-VS2026-Readme.md +Test (windows-latest) Set up job 2026-05-12T20:40:30.0015538Z Image Release: https://github.com/actions/runner-images/releases/tag/win25-vs2026%2F20260428.85 +Test (windows-latest) Set up job 2026-05-12T20:40:30.0016530Z ##[endgroup] +Test (windows-latest) Set up job 2026-05-12T20:40:30.0019625Z ##[group]GITHUB_TOKEN Permissions +Test (windows-latest) Set up job 2026-05-12T20:40:30.0021767Z Actions: write +Test (windows-latest) Set up job 2026-05-12T20:40:30.0022504Z ArtifactMetadata: write +Test (windows-latest) Set up job 2026-05-12T20:40:30.0023106Z Attestations: write +Test (windows-latest) Set up job 2026-05-12T20:40:30.0023641Z Checks: write +Test (windows-latest) Set up job 2026-05-12T20:40:30.0024195Z CodeQuality: write +Test (windows-latest) Set up job 2026-05-12T20:40:30.0024720Z Contents: write +Test (windows-latest) Set up job 2026-05-12T20:40:30.0025251Z Deployments: write +Test (windows-latest) Set up job 2026-05-12T20:40:30.0025785Z Discussions: write +Test (windows-latest) Set up job 2026-05-12T20:40:30.0026366Z Issues: write +Test (windows-latest) Set up job 2026-05-12T20:40:30.0026893Z Metadata: read +Test (windows-latest) Set up job 2026-05-12T20:40:30.0027435Z Models: read +Test (windows-latest) Set up job 2026-05-12T20:40:30.0027923Z Packages: write +Test (windows-latest) Set up job 2026-05-12T20:40:30.0028524Z Pages: write +Test (windows-latest) Set up job 2026-05-12T20:40:30.0029068Z PullRequests: write +Test (windows-latest) Set up job 2026-05-12T20:40:30.0029614Z RepositoryProjects: write +Test (windows-latest) Set up job 2026-05-12T20:40:30.0030246Z SecurityEvents: write +Test (windows-latest) Set up job 2026-05-12T20:40:30.0030782Z Statuses: write +Test (windows-latest) Set up job 2026-05-12T20:40:30.0031678Z VulnerabilityAlerts: read +Test (windows-latest) Set up job 2026-05-12T20:40:30.0032482Z ##[endgroup] +Test (windows-latest) Set up job 2026-05-12T20:40:30.0034840Z Secret source: Actions +Test (windows-latest) Set up job 2026-05-12T20:40:30.0035643Z Prepare workflow directory +Test (windows-latest) Set up job 2026-05-12T20:40:30.0443029Z Prepare all required actions +Test (windows-latest) Set up job 2026-05-12T20:40:30.0481863Z Getting action download info +Test (windows-latest) Set up job 2026-05-12T20:40:30.4488574Z Download action repository 'actions/checkout@v6' (SHA:de0fac2e4500dabe0009e67214ff5f5447ce83dd) +Test (windows-latest) Set up job 2026-05-12T20:40:31.3714639Z Download action repository 'actions/setup-dotnet@v5' (SHA:c2fa09f4bde5ebb9d1777cf28262a3eb3db3ced7) +Test (windows-latest) Set up job 2026-05-12T20:40:31.8442278Z Download action repository 'codecov/codecov-action@v5' (SHA:75cd11691c0faa626561e295848008c8a7dddffe) +Test (windows-latest) Set up job 2026-05-12T20:40:32.3376602Z Getting action download info +Test (windows-latest) Set up job 2026-05-12T20:40:32.5524025Z Download action repository 'actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea' (SHA:60a0d83039c74a4aee543508d2ffcb1c3799cdea) +Test (windows-latest) Set up job 2026-05-12T20:40:33.0030339Z Complete job name: Test (windows-latest) +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:33.2321546Z ##[group]Run actions/checkout@v6 +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:33.2322883Z with: +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:33.2323480Z repository: link-foundation/link-cli +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:33.2324615Z token: *** +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:33.2325144Z ssh-strict: true +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:33.2325700Z ssh-user: git +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:33.2326282Z persist-credentials: true +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:33.2326970Z clean: true +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:33.2327531Z sparse-checkout-cone-mode: true +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:33.2328154Z fetch-depth: 1 +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:33.2328610Z fetch-tags: false +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:33.2329080Z show-progress: true +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:33.2329564Z lfs: false +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:33.2329986Z submodules: false +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:33.2330504Z set-safe-directory: true +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:33.2331225Z env: +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:33.2331688Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:33.2332398Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:33.2334956Z DOTNET_NOLOGO: true +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:33.2335443Z ##[endgroup] +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:33.3810220Z Syncing repository: link-foundation/link-cli +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:33.3812308Z ##[group]Getting Git version info +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:33.3813095Z Working directory is 'D:\a\link-cli\link-cli' +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:33.4706303Z [command]"C:\Program Files\Git\bin\git.exe" version +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:33.8532774Z git version 2.54.0.windows.1 +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:33.8581661Z ##[endgroup] +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:33.8601774Z Temporarily overriding HOME='D:\a\_temp\10e7bf1c-a16e-45c8-9e12-2fa54a2bd7b2' before making global git config changes +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:33.8603781Z Adding repository directory to the temporary git global config as a safe directory +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:33.8615016Z [command]"C:\Program Files\Git\bin\git.exe" config --global --add safe.directory D:\a\link-cli\link-cli +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:33.8935827Z Deleting the contents of 'D:\a\link-cli\link-cli' +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:33.8942304Z ##[group]Initializing the repository +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:33.8951078Z [command]"C:\Program Files\Git\bin\git.exe" init D:\a\link-cli\link-cli +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:33.9797037Z Initialized empty Git repository in D:/a/link-cli/link-cli/.git/ +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:33.9843218Z [command]"C:\Program Files\Git\bin\git.exe" remote add origin https://github.com/link-foundation/link-cli +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:34.0159934Z ##[endgroup] +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:34.0160930Z ##[group]Disabling automatic garbage collection +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:34.0168949Z [command]"C:\Program Files\Git\bin\git.exe" config --local gc.auto 0 +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:34.0473698Z ##[endgroup] +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:34.0474610Z ##[group]Setting up auth +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:34.0476635Z Removing SSH command configuration +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:34.0488465Z [command]"C:\Program Files\Git\bin\git.exe" config --local --name-only --get-regexp core\.sshCommand +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:34.0794519Z [command]"C:\Program Files\Git\bin\git.exe" submodule foreach --recursive "sh -c \"git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :\"" +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:35.3226207Z Removing HTTP extra header +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:35.3241203Z [command]"C:\Program Files\Git\bin\git.exe" config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:35.3528045Z [command]"C:\Program Files\Git\bin\git.exe" submodule foreach --recursive "sh -c \"git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :\"" +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:35.8750708Z Removing includeIf entries pointing to credentials config files +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:35.8751684Z [command]"C:\Program Files\Git\bin\git.exe" config --local --name-only --get-regexp ^includeIf\.gitdir: +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:35.9042970Z [command]"C:\Program Files\Git\bin\git.exe" submodule foreach --recursive "git config --local --show-origin --name-only --get-regexp remote.origin.url" +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:36.4527661Z [command]"C:\Program Files\Git\bin\git.exe" config --file D:\a\_temp\git-credentials-4826141e-18f4-43d6-8165-8f06a711b9f5.config http.https://github.com/.extraheader "AUTHORIZATION: basic ***" +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:36.4836728Z [command]"C:\Program Files\Git\bin\git.exe" config --local includeIf.gitdir:D:/a/link-cli/link-cli/.git.path D:\a\_temp\git-credentials-4826141e-18f4-43d6-8165-8f06a711b9f5.config +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:36.5129269Z [command]"C:\Program Files\Git\bin\git.exe" config --local includeIf.gitdir:D:/a/link-cli/link-cli/.git/worktrees/*.path D:\a\_temp\git-credentials-4826141e-18f4-43d6-8165-8f06a711b9f5.config +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:36.5440744Z [command]"C:\Program Files\Git\bin\git.exe" config --local includeIf.gitdir:/github/workspace/.git.path /github/runner_temp/git-credentials-4826141e-18f4-43d6-8165-8f06a711b9f5.config +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:36.5749931Z [command]"C:\Program Files\Git\bin\git.exe" config --local includeIf.gitdir:/github/workspace/.git/worktrees/*.path /github/runner_temp/git-credentials-4826141e-18f4-43d6-8165-8f06a711b9f5.config +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:36.6056727Z ##[endgroup] +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:36.6057346Z ##[group]Fetching the repository +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:36.6073905Z [command]"C:\Program Files\Git\bin\git.exe" -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules --depth=1 origin +0c8092c56b0fb11704f89398b6d831cd9bbe007d:refs/remotes/origin/main +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:38.0000126Z From https://github.com/link-foundation/link-cli +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:38.0000889Z * [new ref] 0c8092c56b0fb11704f89398b6d831cd9bbe007d -> origin/main +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:38.0222624Z [command]"C:\Program Files\Git\bin\git.exe" branch --list --remote origin/main +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:38.0492493Z origin/main +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:38.0532970Z [command]"C:\Program Files\Git\bin\git.exe" rev-parse refs/remotes/origin/main +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:38.0792658Z 0c8092c56b0fb11704f89398b6d831cd9bbe007d +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:38.0826573Z ##[endgroup] +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:38.0827126Z ##[group]Determining the checkout info +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:38.0829484Z ##[endgroup] +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:38.0839631Z [command]"C:\Program Files\Git\bin\git.exe" sparse-checkout disable +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:38.1190176Z [command]"C:\Program Files\Git\bin\git.exe" config --local --unset-all extensions.worktreeConfig +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:38.1492384Z ##[group]Checking out the ref +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:38.1501835Z [command]"C:\Program Files\Git\bin\git.exe" checkout --progress --force -B main refs/remotes/origin/main +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:38.3579848Z Switched to a new branch 'main' +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:38.3596678Z branch 'main' set up to track 'origin/main'. +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:38.3673894Z ##[endgroup] +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:38.4032558Z [command]"C:\Program Files\Git\bin\git.exe" log -1 --format=%H +Test (windows-latest) Run actions/checkout@v6 2026-05-12T20:40:38.4302109Z 0c8092c56b0fb11704f89398b6d831cd9bbe007d +Test (windows-latest) Setup .NET 2026-05-12T20:40:38.4726859Z ##[group]Run actions/setup-dotnet@v5 +Test (windows-latest) Setup .NET 2026-05-12T20:40:38.4727318Z with: +Test (windows-latest) Setup .NET 2026-05-12T20:40:38.4727545Z dotnet-version: 8.0.x +Test (windows-latest) Setup .NET 2026-05-12T20:40:38.4727808Z cache: false +Test (windows-latest) Setup .NET 2026-05-12T20:40:38.4728169Z env: +Test (windows-latest) Setup .NET 2026-05-12T20:40:38.4728590Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Test (windows-latest) Setup .NET 2026-05-12T20:40:38.4729068Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Test (windows-latest) Setup .NET 2026-05-12T20:40:38.4729472Z DOTNET_NOLOGO: true +Test (windows-latest) Setup .NET 2026-05-12T20:40:38.4729703Z ##[endgroup] +Test (windows-latest) Setup .NET 2026-05-12T20:40:38.8249863Z [command]"C:\Program Files\PowerShell\7\pwsh.exe" -NoLogo -Sta -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command & 'D:\a\_actions\actions\setup-dotnet\v5\externals\install-dotnet.ps1' -SkipNonVersionedFiles -Runtime dotnet -Channel LTS +Test (windows-latest) Setup .NET 2026-05-12T20:40:52.4895991Z dotnet-install: Downloaded file https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.8/dotnet-runtime-10.0.8-win-x64.zip size is 36821721 bytes. +Test (windows-latest) Setup .NET 2026-05-12T20:40:52.4901460Z dotnet-install: Either downloaded or local package size can not be measured. One of them may be corrupted. +Test (windows-latest) Setup .NET 2026-05-12T20:40:52.4924391Z dotnet-install: Extracting the archive. +Test (windows-latest) Setup .NET 2026-05-12T20:40:54.0408102Z dotnet-install: Note that the script does not ensure your Windows version is supported during the installation. +Test (windows-latest) Setup .NET 2026-05-12T20:40:54.0414679Z dotnet-install: To check the list of supported versions, go to https://learn.microsoft.com/dotnet/core/install/windows#supported-versions +Test (windows-latest) Setup .NET 2026-05-12T20:40:54.0420863Z dotnet-install: Installed version is 10.0.8 +Test (windows-latest) Setup .NET 2026-05-12T20:40:54.0426957Z dotnet-install: Installation finished +Test (windows-latest) Setup .NET 2026-05-12T20:40:54.3753092Z [command]"C:\Program Files\PowerShell\7\pwsh.exe" -NoLogo -Sta -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command & 'D:\a\_actions\actions\setup-dotnet\v5\externals\install-dotnet.ps1' -SkipNonVersionedFiles -Channel 8.0 +Test (windows-latest) Setup .NET 2026-05-12T20:40:59.8258965Z dotnet-install: Downloaded file https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.421/dotnet-sdk-8.0.421-win-x64.zip size is 285081859 bytes. +Test (windows-latest) Setup .NET 2026-05-12T20:40:59.8267037Z dotnet-install: Either downloaded or local package size can not be measured. One of them may be corrupted. +Test (windows-latest) Setup .NET 2026-05-12T20:40:59.8293509Z dotnet-install: Extracting the archive. +Test (windows-latest) Setup .NET 2026-05-12T20:41:32.2046849Z dotnet-install: Note that the script does not ensure your Windows version is supported during the installation. +Test (windows-latest) Setup .NET 2026-05-12T20:41:32.2051982Z dotnet-install: To check the list of supported versions, go to https://learn.microsoft.com/dotnet/core/install/windows#supported-versions +Test (windows-latest) Setup .NET 2026-05-12T20:41:32.2058529Z dotnet-install: Installed version is 8.0.421 +Test (windows-latest) Setup .NET 2026-05-12T20:41:32.2065379Z dotnet-install: Installation finished +Test (windows-latest) Restore dependencies 2026-05-12T20:41:32.2860652Z ##[group]Run dotnet restore +Test (windows-latest) Restore dependencies 2026-05-12T20:41:32.2861012Z ^[[36;1mdotnet restore^[[0m +Test (windows-latest) Restore dependencies 2026-05-12T20:41:32.2928381Z shell: C:\Program Files\PowerShell\7\pwsh.EXE -command ". '{0}'" +Test (windows-latest) Restore dependencies 2026-05-12T20:41:32.2928738Z env: +Test (windows-latest) Restore dependencies 2026-05-12T20:41:32.2928932Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Test (windows-latest) Restore dependencies 2026-05-12T20:41:32.2929202Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Test (windows-latest) Restore dependencies 2026-05-12T20:41:32.2929451Z DOTNET_NOLOGO: true +Test (windows-latest) Restore dependencies 2026-05-12T20:41:32.2929655Z DOTNET_ROOT: C:\Program Files\dotnet +Test (windows-latest) Restore dependencies 2026-05-12T20:41:32.2929895Z ##[endgroup] +Test (windows-latest) Restore dependencies 2026-05-12T20:41:41.0204813Z Determining projects to restore... +Test (windows-latest) Restore dependencies 2026-05-12T20:41:58.6196745Z Restored D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli\Foundation.Data.Doublets.Cli.csproj (in 15.99 sec). +Test (windows-latest) Restore dependencies 2026-05-12T20:41:59.9337163Z Restored D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\Foundation.Data.Doublets.Cli.Tests.csproj (in 17.35 sec). +Test (windows-latest) Build 2026-05-12T20:42:00.0889975Z ##[group]Run dotnet build --no-restore --configuration Release +Test (windows-latest) Build 2026-05-12T20:42:00.0890545Z ^[[36;1mdotnet build --no-restore --configuration Release^[[0m +Test (windows-latest) Build 2026-05-12T20:42:00.0949959Z shell: C:\Program Files\PowerShell\7\pwsh.EXE -command ". '{0}'" +Test (windows-latest) Build 2026-05-12T20:42:00.0950292Z env: +Test (windows-latest) Build 2026-05-12T20:42:00.0950495Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Test (windows-latest) Build 2026-05-12T20:42:00.0950747Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Test (windows-latest) Build 2026-05-12T20:42:00.0950980Z DOTNET_NOLOGO: true +Test (windows-latest) Build 2026-05-12T20:42:00.0951177Z DOTNET_ROOT: C:\Program Files\dotnet +Test (windows-latest) Build 2026-05-12T20:42:00.0951406Z ##[endgroup] +Test (windows-latest) Build 2026-05-12T20:42:20.1321071Z Foundation.Data.Doublets.Cli -> D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli\bin\Release\net8\Foundation.Data.Doublets.Cli.dll +Test (windows-latest) Build 2026-05-12T20:42:21.7397336Z Foundation.Data.Doublets.Cli.Tests -> D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\bin\Release\net8\Foundation.Data.Doublets.Cli.Tests.dll +Test (windows-latest) Build 2026-05-12T20:42:21.7845837Z +Test (windows-latest) Build 2026-05-12T20:42:21.7853773Z Build succeeded. +Test (windows-latest) Build 2026-05-12T20:42:21.7912224Z 0 Warning(s) +Test (windows-latest) Build 2026-05-12T20:42:21.7913720Z 0 Error(s) +Test (windows-latest) Build 2026-05-12T20:42:21.7914101Z +Test (windows-latest) Build 2026-05-12T20:42:21.7914525Z Time Elapsed 00:00:21.19 +Test (windows-latest) Run tests 2026-05-12T20:42:21.9279650Z ##[group]Run dotnet test --no-build --configuration Release --verbosity normal --collect:"XPlat Code Coverage" +Test (windows-latest) Run tests 2026-05-12T20:42:21.9281079Z ^[[36;1mdotnet test --no-build --configuration Release --verbosity normal --collect:"XPlat Code Coverage"^[[0m +Test (windows-latest) Run tests 2026-05-12T20:42:21.9380794Z shell: C:\Program Files\PowerShell\7\pwsh.EXE -command ". '{0}'" +Test (windows-latest) Run tests 2026-05-12T20:42:21.9381424Z env: +Test (windows-latest) Run tests 2026-05-12T20:42:21.9381742Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Test (windows-latest) Run tests 2026-05-12T20:42:21.9382222Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Test (windows-latest) Run tests 2026-05-12T20:42:21.9382655Z DOTNET_NOLOGO: true +Test (windows-latest) Run tests 2026-05-12T20:42:21.9383019Z DOTNET_ROOT: C:\Program Files\dotnet +Test (windows-latest) Run tests 2026-05-12T20:42:21.9383423Z ##[endgroup] +Test (windows-latest) Run tests 2026-05-12T20:42:22.4258256Z Build started 5/12/2026 8:42:22 PM. +Test (windows-latest) Run tests 2026-05-12T20:42:22.5794806Z 1>Project "D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.sln" on node 1 (VSTest target(s)). +Test (windows-latest) Run tests 2026-05-12T20:42:22.5796081Z 1>ValidateSolutionConfiguration: +Test (windows-latest) Run tests 2026-05-12T20:42:22.5797457Z Building solution configuration "Release|Any CPU". +Test (windows-latest) Run tests 2026-05-12T20:42:22.9686274Z Test run for D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\bin\Release\net8\Foundation.Data.Doublets.Cli.Tests.dll (.NETCoreApp,Version=v8.0) +Test (windows-latest) Run tests 2026-05-12T20:42:24.4120612Z A total of 1 test files matched the specified pattern. +Test (windows-latest) Run tests 2026-05-12T20:42:26.0604979Z [xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v3.1.5+1b188a7b0a (64-bit .NET 8.0.27) +Test (windows-latest) Run tests 2026-05-12T20:42:26.1399761Z [xUnit.net 00:00:00.09] Discovering: Foundation.Data.Doublets.Cli.Tests +Test (windows-latest) Run tests 2026-05-12T20:42:26.2155464Z [xUnit.net 00:00:00.17] Discovered: Foundation.Data.Doublets.Cli.Tests +Test (windows-latest) Run tests 2026-05-12T20:42:26.2574753Z [xUnit.net 00:00:00.21] Starting: Foundation.Data.Doublets.Cli.Tests +Test (windows-latest) Run tests 2026-05-12T20:42:26.4053750Z [xUnit.net 00:00:00.36] Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.WriteToFile_WritesCompleteDatabaseAsLinoLines [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:26.4056081Z [xUnit.net 00:00:00.36] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpta3q4f.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.4057588Z [xUnit.net 00:00:00.36] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.4062925Z [xUnit.net 00:00:00.36] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.4065321Z [xUnit.net 00:00:00.36] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseOutputTests.cs(162,0): at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.WithNamedLinks(Action`1 test) +Test (windows-latest) Run tests 2026-05-12T20:42:26.4068375Z [xUnit.net 00:00:00.36] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseOutputTests.cs(94,0): at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.WriteToFile_WritesCompleteDatabaseAsLinoLines() +Test (windows-latest) Run tests 2026-05-12T20:42:26.4071921Z [xUnit.net 00:00:00.36] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.4073652Z [xUnit.net 00:00:00.36] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.4096639Z [xUnit.net 00:00:00.36] Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.FormatStructure_RendersLeftBranchWithLinkIndexes [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:26.4098894Z [xUnit.net 00:00:00.36] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpdcykci.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.4100321Z [xUnit.net 00:00:00.36] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.4100972Z [xUnit.net 00:00:00.36] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.4102151Z [xUnit.net 00:00:00.36] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseOutputTests.cs(162,0): at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.WithNamedLinks(Action`1 test) +Test (windows-latest) Run tests 2026-05-12T20:42:26.4104979Z [xUnit.net 00:00:00.36] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseOutputTests.cs(119,0): at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.FormatStructure_RendersLeftBranchWithLinkIndexes() +Test (windows-latest) Run tests 2026-05-12T20:42:26.4110462Z [xUnit.net 00:00:00.36] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.4112196Z [xUnit.net 00:00:00.36] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.4198842Z [xUnit.net 00:00:00.37] Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.FormatStructure_RendersRepeatedSourceAndTargetAsReferenceOnRight [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:26.4201305Z [xUnit.net 00:00:00.37] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpiraqz3.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.4203066Z [xUnit.net 00:00:00.37] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.4204170Z [xUnit.net 00:00:00.37] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.4212535Z [xUnit.net 00:00:00.37] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseOutputTests.cs(162,0): at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.WithNamedLinks(Action`1 test) +Test (windows-latest) Run tests 2026-05-12T20:42:26.4216309Z [xUnit.net 00:00:00.37] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseOutputTests.cs(135,0): at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.FormatStructure_RendersRepeatedSourceAndTargetAsReferenceOnRight() +Test (windows-latest) Run tests 2026-05-12T20:42:26.4220191Z [xUnit.net 00:00:00.37] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.4221722Z [xUnit.net 00:00:00.37] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.4319528Z [xUnit.net 00:00:00.39] Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.FormatDatabase_EscapesNamesThatNeedQuoting [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:26.4323262Z [xUnit.net 00:00:00.39] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmph4q2n0.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.4324640Z [xUnit.net 00:00:00.39] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.4325082Z [xUnit.net 00:00:00.39] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.4326469Z [xUnit.net 00:00:00.39] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseOutputTests.cs(162,0): at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.WithNamedLinks(Action`1 test) +Test (windows-latest) Run tests 2026-05-12T20:42:26.4329318Z [xUnit.net 00:00:00.39] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseOutputTests.cs(48,0): at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.FormatDatabase_EscapesNamesThatNeedQuoting() +Test (windows-latest) Run tests 2026-05-12T20:42:26.4331175Z [xUnit.net 00:00:00.39] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.4332106Z [xUnit.net 00:00:00.39] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.4358453Z [xUnit.net 00:00:00.39] Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.FormatDatabase_UsesNamesForIndexesSourcesAndTargets_WhenNamesExist [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:26.4360838Z [xUnit.net 00:00:00.39] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpezuocc.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.4362194Z [xUnit.net 00:00:00.39] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.4362892Z [xUnit.net 00:00:00.39] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.4364979Z [xUnit.net 00:00:00.39] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseOutputTests.cs(162,0): at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.WithNamedLinks(Action`1 test) +Test (windows-latest) Run tests 2026-05-12T20:42:26.4369932Z [xUnit.net 00:00:00.39] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseOutputTests.cs(25,0): at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.FormatDatabase_UsesNamesForIndexesSourcesAndTargets_WhenNamesExist() +Test (windows-latest) Run tests 2026-05-12T20:42:26.4371564Z [xUnit.net 00:00:00.39] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.4372488Z [xUnit.net 00:00:00.39] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.4393974Z [xUnit.net 00:00:00.39] Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.FormatDatabase_SelectsQuoteStyleForNamesContainingQuotes [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:26.4396288Z [xUnit.net 00:00:00.39] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpsf04ad.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.4397599Z [xUnit.net 00:00:00.39] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.4398286Z [xUnit.net 00:00:00.39] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.4400647Z [xUnit.net 00:00:00.39] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseOutputTests.cs(162,0): at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.WithNamedLinks(Action`1 test) +Test (windows-latest) Run tests 2026-05-12T20:42:26.4404437Z [xUnit.net 00:00:00.39] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseOutputTests.cs(71,0): at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.FormatDatabase_SelectsQuoteStyleForNamesContainingQuotes() +Test (windows-latest) Run tests 2026-05-12T20:42:26.4407630Z [xUnit.net 00:00:00.39] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.4409415Z [xUnit.net 00:00:00.39] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.4774473Z [Trace] Constructing SimpleLinksDecorator with names DB: C:\Users\runneradmin\AppData\Local\Temp\tmpkyinga.names.links +Test (windows-latest) Run tests 2026-05-12T20:42:26.5211106Z Passed Foundation.Data.Doublets.Cli.Tests.PinnedTypesTests.Should_Terminate_Enumeration_When_Iterated_Without_Take [86 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.5213697Z Failed Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.WriteToFile_WritesCompleteDatabaseAsLinoLines [89 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.5215181Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:26.5216472Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpta3q4f.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.5217893Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.5218521Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5220465Z at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.WithNamedLinks(Action`1 test) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseOutputTests.cs:line 162 +Test (windows-latest) Run tests 2026-05-12T20:42:26.5223656Z at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.WriteToFile_WritesCompleteDatabaseAsLinoLines() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseOutputTests.cs:line 94 +Test (windows-latest) Run tests 2026-05-12T20:42:26.5226801Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5228214Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5230095Z [xUnit.net 00:00:00.42] Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.FormatDatabase_UsesNumberedReferences_WhenLinksHaveNoNames [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:26.5232656Z [xUnit.net 00:00:00.43] Foundation.Data.Doublets.Cli.Tests.SimpleLinksDecoratorTests.CanConstructSimpleLinksDecorator [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:26.5234522Z Failed Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.FormatStructure_RendersLeftBranchWithLinkIndexes [6 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.5236456Z [xUnit.net 00:00:00.43] Foundation.Data.Doublets.Cli.Tests.SimpleLinksDecoratorTests.Delete_WithRestriction_DoesNotThrow [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:26.5238539Z [xUnit.net 00:00:00.43] Foundation.Data.Doublets.Cli.Tests.SimpleLinksDecoratorTests.DeleteAfterGetOrCreate_DoesNotThrow_WithTracing [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:26.5240599Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:26.5241804Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpdcykci.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.5243374Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.5243792Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5246781Z at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.WithNamedLinks(Action`1 test) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseOutputTests.cs:line 162 +Test (windows-latest) Run tests 2026-05-12T20:42:26.5250040Z at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.FormatStructure_RendersLeftBranchWithLinkIndexes() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseOutputTests.cs:line 119 +Test (windows-latest) Run tests 2026-05-12T20:42:26.5252383Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5254644Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5256401Z Passed Foundation.Data.Doublets.Cli.Tests.PinnedTypesTests.Should_Validate_Existing_Links_With_Ulong [33 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.5258232Z Failed Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.FormatStructure_RendersRepeatedSourceAndTargetAsReferenceOnRight [21 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.5259545Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:26.5260627Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpiraqz3.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.5261819Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.5262228Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5263888Z at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.WithNamedLinks(Action`1 test) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseOutputTests.cs:line 162 +Test (windows-latest) Run tests 2026-05-12T20:42:26.5267024Z at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.FormatStructure_RendersRepeatedSourceAndTargetAsReferenceOnRight() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseOutputTests.cs:line 135 +Test (windows-latest) Run tests 2026-05-12T20:42:26.5269515Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5270913Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5272403Z Failed Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.FormatDatabase_EscapesNamesThatNeedQuoting [12 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.5273482Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:26.5274539Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmph4q2n0.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.5276083Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.5276340Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5277226Z at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.WithNamedLinks(Action`1 test) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseOutputTests.cs:line 162 +Test (windows-latest) Run tests 2026-05-12T20:42:26.5278719Z at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.FormatDatabase_EscapesNamesThatNeedQuoting() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseOutputTests.cs:line 48 +Test (windows-latest) Run tests 2026-05-12T20:42:26.5280716Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5281884Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5283437Z Failed Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.FormatDatabase_UsesNamesForIndexesSourcesAndTargets_WhenNamesExist [3 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.5284642Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:26.5285642Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpezuocc.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.5286564Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.5286799Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5287683Z at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.WithNamedLinks(Action`1 test) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseOutputTests.cs:line 162 +Test (windows-latest) Run tests 2026-05-12T20:42:26.5289247Z at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.FormatDatabase_UsesNamesForIndexesSourcesAndTargets_WhenNamesExist() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseOutputTests.cs:line 25 +Test (windows-latest) Run tests 2026-05-12T20:42:26.5290484Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5291391Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5292208Z Failed Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.FormatDatabase_SelectsQuoteStyleForNamesContainingQuotes [3 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.5292820Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:26.5293391Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpsf04ad.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.5294012Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.5294239Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5295096Z at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.WithNamedLinks(Action`1 test) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseOutputTests.cs:line 162 +Test (windows-latest) Run tests 2026-05-12T20:42:26.5297062Z at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.FormatDatabase_SelectsQuoteStyleForNamesContainingQuotes() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseOutputTests.cs:line 71 +Test (windows-latest) Run tests 2026-05-12T20:42:26.5298280Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5298987Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5300004Z [xUnit.net 00:00:00.42] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpl1dahp.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.5300751Z [xUnit.net 00:00:00.42] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.5301144Z [xUnit.net 00:00:00.42] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5302293Z [xUnit.net 00:00:00.42] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseOutputTests.cs(162,0): at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.WithNamedLinks(Action`1 test) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5304044Z [xUnit.net 00:00:00.42] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseOutputTests.cs(11,0): at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.FormatDatabase_UsesNumberedReferences_WhenLinksHaveNoNames() +Test (windows-latest) Run tests 2026-05-12T20:42:26.5305510Z [xUnit.net 00:00:00.42] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5307505Z [xUnit.net 00:00:00.42] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5308599Z [xUnit.net 00:00:00.43] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpwwj11z.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.5309369Z [xUnit.net 00:00:00.43] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.5309762Z [xUnit.net 00:00:00.43] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5310928Z [xUnit.net 00:00:00.43] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\SimpleLinksDecoratorTests.cs(23,0): at Foundation.Data.Doublets.Cli.Tests.SimpleLinksDecoratorTests.CanConstructSimpleLinksDecorator() +Test (windows-latest) Run tests 2026-05-12T20:42:26.5312279Z [xUnit.net 00:00:00.43] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5313200Z [xUnit.net 00:00:00.43] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5314252Z [xUnit.net 00:00:00.43] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpqhcmg4.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.5314989Z [xUnit.net 00:00:00.43] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.5315378Z [xUnit.net 00:00:00.43] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5317688Z [xUnit.net 00:00:00.43] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\SimpleLinksDecoratorTests.cs(48,0): at Foundation.Data.Doublets.Cli.Tests.SimpleLinksDecoratorTests.Delete_WithRestriction_DoesNotThrow() +Test (windows-latest) Run tests 2026-05-12T20:42:26.5319052Z [xUnit.net 00:00:00.43] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5319982Z [xUnit.net 00:00:00.43] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5321056Z [xUnit.net 00:00:00.43] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpkyinga.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.5322608Z [xUnit.net 00:00:00.43] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.5323832Z [xUnit.net 00:00:00.44] Foundation.Data.Doublets.Cli.Tests.SimpleLinksDecoratorTests.DeleteAfterGetOrCreate_DoesNotThrow [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:26.5324700Z [xUnit.net 00:00:00.43] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5326920Z [xUnit.net 00:00:00.43] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\SimpleLinksDecoratorTests.cs(85,0): at Foundation.Data.Doublets.Cli.Tests.SimpleLinksDecoratorTests.DeleteAfterGetOrCreate_DoesNotThrow_WithTracing() +Test (windows-latest) Run tests 2026-05-12T20:42:26.5328764Z [xUnit.net 00:00:00.43] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5329698Z [xUnit.net 00:00:00.43] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5330770Z [xUnit.net 00:00:00.44] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp2hxwh1.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.5331509Z [xUnit.net 00:00:00.44] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.5331898Z [xUnit.net 00:00:00.44] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5333061Z [xUnit.net 00:00:00.44] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\SimpleLinksDecoratorTests.cs(67,0): at Foundation.Data.Doublets.Cli.Tests.SimpleLinksDecoratorTests.DeleteAfterGetOrCreate_DoesNotThrow() +Test (windows-latest) Run tests 2026-05-12T20:42:26.5334412Z [xUnit.net 00:00:00.44] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5336868Z [xUnit.net 00:00:00.44] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5338628Z Failed Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.FormatDatabase_UsesNumberedReferences_WhenLinksHaveNoNames [3 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.5339534Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:26.5340149Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpl1dahp.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.5340778Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.5341014Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5341898Z at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.WithNamedLinks(Action`1 test) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseOutputTests.cs:line 162 +Test (windows-latest) Run tests 2026-05-12T20:42:26.5344111Z at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.FormatDatabase_UsesNumberedReferences_WhenLinksHaveNoNames() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseOutputTests.cs:line 11 +Test (windows-latest) Run tests 2026-05-12T20:42:26.5346497Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5347841Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5349314Z Passed Foundation.Data.Doublets.Cli.Tests.PinnedTypesTests.Should_Destructure_PinnedTypes [35 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.5350717Z Failed Foundation.Data.Doublets.Cli.Tests.SimpleLinksDecoratorTests.CanConstructSimpleLinksDecorator [10 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.5351755Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:26.5352825Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpwwj11z.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.5354007Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.5354410Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5356566Z at Foundation.Data.Doublets.Cli.Tests.SimpleLinksDecoratorTests.CanConstructSimpleLinksDecorator() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\SimpleLinksDecoratorTests.cs:line 23 +Test (windows-latest) Run tests 2026-05-12T20:42:26.5358816Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5360194Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5361604Z Failed Foundation.Data.Doublets.Cli.Tests.SimpleLinksDecoratorTests.Delete_WithRestriction_DoesNotThrow [8 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.5362580Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:26.5363636Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpqhcmg4.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.5364836Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.5365250Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5366887Z at Foundation.Data.Doublets.Cli.Tests.SimpleLinksDecoratorTests.Delete_WithRestriction_DoesNotThrow() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\SimpleLinksDecoratorTests.cs:line 48 +Test (windows-latest) Run tests 2026-05-12T20:42:26.5368689Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5369422Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5370224Z Failed Foundation.Data.Doublets.Cli.Tests.SimpleLinksDecoratorTests.DeleteAfterGetOrCreate_DoesNotThrow_WithTracing [3 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.5370815Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:26.5371408Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpkyinga.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.5372258Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.5372488Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5373485Z at Foundation.Data.Doublets.Cli.Tests.SimpleLinksDecoratorTests.DeleteAfterGetOrCreate_DoesNotThrow_WithTracing() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\SimpleLinksDecoratorTests.cs:line 85 +Test (windows-latest) Run tests 2026-05-12T20:42:26.5374690Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5375421Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5376183Z Failed Foundation.Data.Doublets.Cli.Tests.SimpleLinksDecoratorTests.DeleteAfterGetOrCreate_DoesNotThrow [2 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.5377170Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:26.5377759Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp2hxwh1.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.5378402Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.5378627Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5379571Z at Foundation.Data.Doublets.Cli.Tests.SimpleLinksDecoratorTests.DeleteAfterGetOrCreate_DoesNotThrow() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\SimpleLinksDecoratorTests.cs:line 67 +Test (windows-latest) Run tests 2026-05-12T20:42:26.5380733Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5381553Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5382234Z Passed Foundation.Data.Doublets.Cli.Tests.PinnedTypesTests.Should_Validate_Existing_Links [28 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.5382898Z Passed Foundation.Data.Doublets.Cli.Tests.PinnedTypesTests.Should_Reset_Enumerator [21 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.5812698Z [Test] All links: (1: 2->1) (2: 1->2) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5838244Z [xUnit.net 00:00:00.54] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.SwapSourceAndTargetForAllLinksUsingVariablesTest [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:26.5842572Z [xUnit.net 00:00:00.54] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpkoyw14.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.5844480Z [xUnit.net 00:00:00.54] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.5845245Z [xUnit.net 00:00:00.54] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5847753Z [xUnit.net 00:00:00.54] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5851243Z [xUnit.net 00:00:00.54] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(446,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.SwapSourceAndTargetForAllLinksUsingVariablesTest() +Test (windows-latest) Run tests 2026-05-12T20:42:26.5855060Z [xUnit.net 00:00:00.54] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5857107Z [xUnit.net 00:00:00.54] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5912610Z [xUnit.net 00:00:00.54] Foundation.Data.Doublets.Cli.Tests.LinoDatabaseInputTests.ImportText_ReproducesNumberedLinksAtTheirExplicitIndexes [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:26.5915334Z [xUnit.net 00:00:00.54] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpxhkc4e.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.5916732Z [xUnit.net 00:00:00.55] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.5917794Z [xUnit.net 00:00:00.55] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5919871Z [xUnit.net 00:00:00.55] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseInputTests.cs(108,0): at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseInputTests.WithNamedLinks(Action`1 test) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5923199Z [xUnit.net 00:00:00.55] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseInputTests.cs(12,0): at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseInputTests.ImportText_ReproducesNumberedLinksAtTheirExplicitIndexes() +Test (windows-latest) Run tests 2026-05-12T20:42:26.5925893Z [xUnit.net 00:00:00.55] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.5927602Z [xUnit.net 00:00:00.55] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6007183Z [xUnit.net 00:00:00.55] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.NameLookupConsistencyTest [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:26.6010059Z [xUnit.net 00:00:00.55] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpre0yu5.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.6012056Z [xUnit.net 00:00:00.55] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6013421Z [xUnit.net 00:00:00.55] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6019310Z [xUnit.net 00:00:00.55] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6023830Z [xUnit.net 00:00:00.55] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1137,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.NameLookupConsistencyTest() +Test (windows-latest) Run tests 2026-05-12T20:42:26.6026492Z [xUnit.net 00:00:00.55] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6028737Z [xUnit.net 00:00:00.55] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6058449Z [xUnit.net 00:00:00.56] Foundation.Data.Doublets.Cli.Tests.LinoDatabaseInputTests.ImportText_TreatsOutOfRangeNumbersAsNames [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:26.6061077Z [xUnit.net 00:00:00.56] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpmsjvmb.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.6061881Z [xUnit.net 00:00:00.56] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6062288Z [xUnit.net 00:00:00.56] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6063419Z [xUnit.net 00:00:00.56] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseInputTests.cs(108,0): at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseInputTests.WithNamedLinks(Action`1 test) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6065112Z [xUnit.net 00:00:00.56] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseInputTests.cs(57,0): at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseInputTests.ImportText_TreatsOutOfRangeNumbersAsNames() +Test (windows-latest) Run tests 2026-05-12T20:42:26.6066447Z [xUnit.net 00:00:00.56] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6068313Z [xUnit.net 00:00:00.56] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6093225Z Passed Foundation.Data.Doublets.Cli.Tests.PinnedTypesTests.Should_Throw_Exception_For_Invalid_Link_Structure [31 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.6095030Z Passed Foundation.Data.Doublets.Cli.Tests.PinnedTypesTests.Should_Create_And_Iterate_Over_Types [26 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.6098106Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.SwapSourceAndTargetForAllLinksUsingVariablesTest [138 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.6099450Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6100569Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpkoyw14.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.6101782Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6102176Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6104142Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:26.6107623Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.SwapSourceAndTargetForAllLinksUsingVariablesTest() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 446 +Test (windows-latest) Run tests 2026-05-12T20:42:26.6110166Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6111539Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6113387Z Passed Foundation.Data.Doublets.Cli.Tests.PinnedTypesTests.Should_Create_And_Iterate_Over_Types_With_RealDataStore [25 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.6115510Z Failed Foundation.Data.Doublets.Cli.Tests.LinoDatabaseInputTests.ImportText_ReproducesNumberedLinksAtTheirExplicitIndexes [7 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.6116693Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6117711Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpxhkc4e.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.6118860Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6119293Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6129676Z at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseInputTests.WithNamedLinks(Action`1 test) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseInputTests.cs:line 108 +Test (windows-latest) Run tests 2026-05-12T20:42:26.6132680Z at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseInputTests.ImportText_ReproducesNumberedLinksAtTheirExplicitIndexes() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseInputTests.cs:line 12 +Test (windows-latest) Run tests 2026-05-12T20:42:26.6135438Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6136885Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6138407Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.NameLookupConsistencyTest [16 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.6139487Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6140597Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpre0yu5.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.6141834Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6142245Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6144204Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:26.6147394Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.NameLookupConsistencyTest() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1137 +Test (windows-latest) Run tests 2026-05-12T20:42:26.6149640Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6150951Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6152610Z Failed Foundation.Data.Doublets.Cli.Tests.LinoDatabaseInputTests.ImportText_TreatsOutOfRangeNumbersAsNames [14 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.6153986Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6155047Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpmsjvmb.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.6156247Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6156660Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6158310Z at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseInputTests.WithNamedLinks(Action`1 test) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseInputTests.cs:line 108 +Test (windows-latest) Run tests 2026-05-12T20:42:26.6161144Z at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseInputTests.ImportText_TreatsOutOfRangeNumbersAsNames() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseInputTests.cs:line 57 +Test (windows-latest) Run tests 2026-05-12T20:42:26.6163352Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6164690Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6166320Z [xUnit.net 00:00:00.57] Foundation.Data.Doublets.Cli.Tests.LinoDatabaseInputTests.ImportText_UnquotesNamesWrittenByExporter [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:26.6168676Z [xUnit.net 00:00:00.57] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpyxvsmd.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.6170002Z [xUnit.net 00:00:00.57] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6170692Z [xUnit.net 00:00:00.57] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6172779Z [xUnit.net 00:00:00.57] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseInputTests.cs(108,0): at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseInputTests.WithNamedLinks(Action`1 test) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6184590Z [xUnit.net 00:00:00.57] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseInputTests.cs(78,0): at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseInputTests.ImportText_UnquotesNamesWrittenByExporter() +Test (windows-latest) Run tests 2026-05-12T20:42:26.6187119Z [xUnit.net 00:00:00.57] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6188927Z [xUnit.net 00:00:00.57] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6190769Z [xUnit.net 00:00:00.57] Foundation.Data.Doublets.Cli.Tests.LinoDatabaseInputTests.ImportText_CreatesNamedReferencesAsPointLinks [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:26.6194532Z [xUnit.net 00:00:00.57] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp5b22ju.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.6195847Z [xUnit.net 00:00:00.57] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6196267Z [xUnit.net 00:00:00.57] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6197404Z [xUnit.net 00:00:00.57] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseInputTests.cs(108,0): at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseInputTests.WithNamedLinks(Action`1 test) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6199100Z [xUnit.net 00:00:00.57] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseInputTests.cs(32,0): at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseInputTests.ImportText_CreatesNamedReferencesAsPointLinks() +Test (windows-latest) Run tests 2026-05-12T20:42:26.6201645Z [xUnit.net 00:00:00.57] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6212498Z [xUnit.net 00:00:00.57] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6216261Z [xUnit.net 00:00:00.57] Foundation.Data.Doublets.Cli.Tests.Tests.PersistentTransformationDecoratorTests.NeverRemovesMatchingStoredTrigger [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:26.6217767Z [Test] All links: (1: 2->1) (2: 2->2) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6219802Z [xUnit.net 00:00:00.57] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpl4hdj4.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.6232762Z [xUnit.net 00:00:00.57] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6233847Z [xUnit.net 00:00:00.57] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6238541Z [xUnit.net 00:00:00.58] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\PersistentTransformationDecoratorTests.cs(113,0): at Foundation.Data.Doublets.Cli.Tests.Tests.PersistentTransformationDecoratorTests.DeleteIfExists(String path) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6243017Z [xUnit.net 00:00:00.58] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\PersistentTransformationDecoratorTests.cs(90,0): at Foundation.Data.Doublets.Cli.Tests.Tests.PersistentTransformationDecoratorTests.RunWithPersistentLinks(Action`2 action) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6247233Z [xUnit.net 00:00:00.58] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\PersistentTransformationDecoratorTests.cs(60,0): at Foundation.Data.Doublets.Cli.Tests.Tests.PersistentTransformationDecoratorTests.NeverRemovesMatchingStoredTrigger() +Test (windows-latest) Run tests 2026-05-12T20:42:26.6252515Z [xUnit.net 00:00:00.58] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6260630Z [xUnit.net 00:00:00.58] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.SwapEqualSourceAndTargetUsingVariablesHasAllChangesTest [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:26.6263820Z [xUnit.net 00:00:00.58] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6266927Z [xUnit.net 00:00:00.58] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpnilnrz.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.6268337Z [xUnit.net 00:00:00.58] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6269376Z [xUnit.net 00:00:00.58] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6273504Z [xUnit.net 00:00:00.58] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6282661Z [xUnit.net 00:00:00.58] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(465,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.SwapEqualSourceAndTargetUsingVariablesHasAllChangesTest() +Test (windows-latest) Run tests 2026-05-12T20:42:26.6285630Z [xUnit.net 00:00:00.58] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6287267Z [xUnit.net 00:00:00.58] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6316653Z [xUnit.net 00:00:00.59] Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.SetName_OverwriteOldName [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:26.6318698Z [xUnit.net 00:00:00.59] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp25iyqe.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.6320337Z [xUnit.net 00:00:00.59] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6321161Z [xUnit.net 00:00:00.59] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6324154Z [xUnit.net 00:00:00.59] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedLinksDecoratorTests.cs(86,0): at Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.SetName_OverwriteOldName() +Test (windows-latest) Run tests 2026-05-12T20:42:26.6326801Z [xUnit.net 00:00:00.59] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6328598Z [xUnit.net 00:00:00.59] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6357927Z Failed Foundation.Data.Doublets.Cli.Tests.LinoDatabaseInputTests.ImportText_UnquotesNamesWrittenByExporter [6 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.6359207Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6360406Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpyxvsmd.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.6361613Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6362122Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6363816Z at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseInputTests.WithNamedLinks(Action`1 test) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseInputTests.cs:line 108 +Test (windows-latest) Run tests 2026-05-12T20:42:26.6381296Z at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseInputTests.ImportText_UnquotesNamesWrittenByExporter() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseInputTests.cs:line 78 +Test (windows-latest) Run tests 2026-05-12T20:42:26.6383882Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6385241Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6386662Z Failed Foundation.Data.Doublets.Cli.Tests.LinoDatabaseInputTests.ImportText_CreatesNamedReferencesAsPointLinks [5 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.6387690Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6388741Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp5b22ju.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.6389861Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6390261Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6392228Z at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseInputTests.WithNamedLinks(Action`1 test) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseInputTests.cs:line 108 +Test (windows-latest) Run tests 2026-05-12T20:42:26.6395060Z at Foundation.Data.Doublets.Cli.Tests.LinoDatabaseInputTests.ImportText_CreatesNamedReferencesAsPointLinks() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\LinoDatabaseInputTests.cs:line 32 +Test (windows-latest) Run tests 2026-05-12T20:42:26.6397239Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6398616Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6400355Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.PersistentTransformationDecoratorTests.NeverRemovesMatchingStoredTrigger [21 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.6401702Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6402837Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpl4hdj4.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.6403995Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6404409Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6406405Z at Foundation.Data.Doublets.Cli.Tests.Tests.PersistentTransformationDecoratorTests.DeleteIfExists(String path) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\PersistentTransformationDecoratorTests.cs:line 113 +Test (windows-latest) Run tests 2026-05-12T20:42:26.6409919Z at Foundation.Data.Doublets.Cli.Tests.Tests.PersistentTransformationDecoratorTests.RunWithPersistentLinks(Action`2 action) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\PersistentTransformationDecoratorTests.cs:line 90 +Test (windows-latest) Run tests 2026-05-12T20:42:26.6415079Z at Foundation.Data.Doublets.Cli.Tests.Tests.PersistentTransformationDecoratorTests.NeverRemovesMatchingStoredTrigger() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\PersistentTransformationDecoratorTests.cs:line 60 +Test (windows-latest) Run tests 2026-05-12T20:42:26.6418406Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6419176Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6420115Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.SwapEqualSourceAndTargetUsingVariablesHasAllChangesTest [22 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.6420850Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6421465Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpnilnrz.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.6422125Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6422357Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6423414Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:26.6425259Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.SwapEqualSourceAndTargetUsingVariablesHasAllChangesTest() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 465 +Test (windows-latest) Run tests 2026-05-12T20:42:26.6427458Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6428174Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6428873Z Failed Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.SetName_OverwriteOldName [8 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.6429352Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6429949Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp25iyqe.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.6430591Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6430822Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6432261Z at Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.SetName_OverwriteOldName() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedLinksDecoratorTests.cs:line 86 +Test (windows-latest) Run tests 2026-05-12T20:42:26.6433403Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6434133Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6435160Z Passed Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.MakeNamesDatabaseFilename_CorrectlyGeneratesFilename(dbFilename: "test.db", expected: "test.names.links") [< 1 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.6436742Z [xUnit.net 00:00:00.59] Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.MakeNamesDatabaseFilename_CorrectlyGeneratesFilename(dbFilename: "/tmp/test.db", expected: "/tmp/test.names.links") [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:26.6438263Z [xUnit.net 00:00:00.60] Foundation.Data.Doublets.Cli.Tests.Tests.PersistentTransformationDecoratorTests.AlwaysTriggerIsStoredInLinksAndAppliedAfterWrite [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:26.6439656Z Passed Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.MakeNamesDatabaseFilename_CorrectlyGeneratesFilename(dbFilename: "a.b.c", expected: "a.b.names.links") [< 1 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.6440574Z [xUnit.net 00:00:00.59] Assert.Equal() Failure: Strings differ +Test (windows-latest) Run tests 2026-05-12T20:42:26.6441174Z [xUnit.net 00:00:00.59] ↓ (pos 0) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6441553Z [xUnit.net 00:00:00.59] Expected: "/tmp/test.names.links" +Test (windows-latest) Run tests 2026-05-12T20:42:26.6442104Z [xUnit.net 00:00:00.59] Actual: "\\tmp\\test.names.links" +Test (windows-latest) Run tests 2026-05-12T20:42:26.6442582Z [xUnit.net 00:00:00.59] ↑ (pos 0) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6442867Z [xUnit.net 00:00:00.59] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6444174Z [xUnit.net 00:00:00.59] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedLinksDecoratorTests.cs(44,0): at Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.MakeNamesDatabaseFilename_CorrectlyGeneratesFilename(String dbFilename, String expected) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6445736Z [xUnit.net 00:00:00.59] at InvokeStub_NamedLinksDecoratorTests.MakeNamesDatabaseFilename_CorrectlyGeneratesFilename(Object, Span`1) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6446878Z [xUnit.net 00:00:00.59] at System.Reflection.MethodBaseInvoker.InvokeWithFewArgs(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6448146Z [xUnit.net 00:00:00.60] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp3xurb2.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.6448899Z [xUnit.net 00:00:00.60] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6449277Z [xUnit.net 00:00:00.60] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6450574Z [xUnit.net 00:00:00.60] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\PersistentTransformationDecoratorTests.cs(113,0): at Foundation.Data.Doublets.Cli.Tests.Tests.PersistentTransformationDecoratorTests.DeleteIfExists(String path) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6453462Z [xUnit.net 00:00:00.60] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\PersistentTransformationDecoratorTests.cs(90,0): at Foundation.Data.Doublets.Cli.Tests.Tests.PersistentTransformationDecoratorTests.RunWithPersistentLinks(Action`2 action) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6455683Z [xUnit.net 00:00:00.60] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\PersistentTransformationDecoratorTests.cs(13,0): at Foundation.Data.Doublets.Cli.Tests.Tests.PersistentTransformationDecoratorTests.AlwaysTriggerIsStoredInLinksAndAppliedAfterWrite() +Test (windows-latest) Run tests 2026-05-12T20:42:26.6457315Z [xUnit.net 00:00:00.60] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6458232Z [xUnit.net 00:00:00.60] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6761364Z [xUnit.net 00:00:00.63] Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.AfterCreation_SetNameAndGetName_ShouldWork [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:26.6786550Z [xUnit.net 00:00:00.63] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp2zt3ef.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.6788283Z [xUnit.net 00:00:00.63] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6803579Z [xUnit.net 00:00:00.63] Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.CanConstructNamedLinksDecorator [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:26.6804982Z [xUnit.net 00:00:00.63] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6810733Z [xUnit.net 00:00:00.63] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedLinksDecoratorTests.cs(147,0): at Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.AfterCreation_SetNameAndGetName_ShouldWork() +Test (windows-latest) Run tests 2026-05-12T20:42:26.6813956Z [xUnit.net 00:00:00.63] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6815732Z [xUnit.net 00:00:00.63] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6817069Z [Trace] Constructing NamedLinksDecorator with names DB: C:\Users\runneradmin\AppData\Local\Temp\tmp1ckcow.names.links +Test (windows-latest) Run tests 2026-05-12T20:42:26.6819099Z [xUnit.net 00:00:00.63] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp1ckcow.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.6820477Z [xUnit.net 00:00:00.63] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6821156Z [xUnit.net 00:00:00.63] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6822446Z [xUnit.net 00:00:00.63] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedLinksDecoratorTests.cs(29,0): at Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.CanConstructNamedLinksDecorator() +Test (windows-latest) Run tests 2026-05-12T20:42:26.6833343Z [xUnit.net 00:00:00.63] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6835377Z [xUnit.net 00:00:00.63] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6839979Z [xUnit.net 00:00:00.64] Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.RemoveName_NonExistent_DoesNotThrow [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:26.6849928Z [xUnit.net 00:00:00.64] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpvsculo.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.6853096Z [xUnit.net 00:00:00.64] Foundation.Data.Doublets.Cli.Tests.Tests.PersistentTransformationDecoratorTests.OnceTriggerDeletesItselfAfterFirstMatch [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:26.6854946Z [xUnit.net 00:00:00.64] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6855657Z [xUnit.net 00:00:00.64] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6857828Z [xUnit.net 00:00:00.64] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedLinksDecoratorTests.cs(127,0): at Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.RemoveName_NonExistent_DoesNotThrow() +Test (windows-latest) Run tests 2026-05-12T20:42:26.6859849Z [xUnit.net 00:00:00.64] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6860799Z [xUnit.net 00:00:00.64] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6861878Z [xUnit.net 00:00:00.64] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpzbuvlz.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.6862660Z [xUnit.net 00:00:00.64] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6863056Z [xUnit.net 00:00:00.64] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6864374Z [xUnit.net 00:00:00.64] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\PersistentTransformationDecoratorTests.cs(113,0): at Foundation.Data.Doublets.Cli.Tests.Tests.PersistentTransformationDecoratorTests.DeleteIfExists(String path) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6866710Z [xUnit.net 00:00:00.64] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\PersistentTransformationDecoratorTests.cs(90,0): at Foundation.Data.Doublets.Cli.Tests.Tests.PersistentTransformationDecoratorTests.RunWithPersistentLinks(Action`2 action) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6869068Z [xUnit.net 00:00:00.64] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\PersistentTransformationDecoratorTests.cs(35,0): at Foundation.Data.Doublets.Cli.Tests.Tests.PersistentTransformationDecoratorTests.OnceTriggerDeletesItselfAfterFirstMatch() +Test (windows-latest) Run tests 2026-05-12T20:42:26.6870941Z [xUnit.net 00:00:00.64] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6872194Z [xUnit.net 00:00:00.64] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6898344Z [xUnit.net 00:00:00.64] Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.RemoveName_ShouldReturnNullAfterRemoval [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:26.6900776Z [xUnit.net 00:00:00.64] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpsy1jtk.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.6902517Z [xUnit.net 00:00:00.64] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6903349Z [xUnit.net 00:00:00.64] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6905885Z [xUnit.net 00:00:00.64] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedLinksDecoratorTests.cs(108,0): at Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.RemoveName_ShouldReturnNullAfterRemoval() +Test (windows-latest) Run tests 2026-05-12T20:42:26.6908802Z [xUnit.net 00:00:00.64] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6910559Z [xUnit.net 00:00:00.64] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6927827Z [xUnit.net 00:00:00.65] Foundation.Data.Doublets.Cli.Tests.Issue62ReviewCoverageTests.ExplicitNumericIdUpdate_CanBeReversedWithAnotherUpdate [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:26.6930868Z [xUnit.net 00:00:00.65] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpuzppjf.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.6933220Z [xUnit.net 00:00:00.65] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6933962Z [xUnit.net 00:00:00.65] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6936584Z [xUnit.net 00:00:00.65] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\Issue62ReviewCoverageTests.cs(61,0): at Foundation.Data.Doublets.Cli.Tests.Issue62ReviewCoverageTests.RunTestWithLinks(Action`1 testAction) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6940119Z [xUnit.net 00:00:00.65] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\Issue62ReviewCoverageTests.cs(15,0): at Foundation.Data.Doublets.Cli.Tests.Issue62ReviewCoverageTests.ExplicitNumericIdUpdate_CanBeReversedWithAnotherUpdate() +Test (windows-latest) Run tests 2026-05-12T20:42:26.6942863Z [xUnit.net 00:00:00.65] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6944573Z [xUnit.net 00:00:00.65] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6958411Z Failed Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.MakeNamesDatabaseFilename_CorrectlyGeneratesFilename(dbFilename: "/tmp/test.db", expected: "/tmp/test.names.links") [1 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.6960078Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6960419Z Assert.Equal() Failure: Strings differ +Test (windows-latest) Run tests 2026-05-12T20:42:26.6961095Z ↓ (pos 0) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6961488Z Expected: "/tmp/test.names.links" +Test (windows-latest) Run tests 2026-05-12T20:42:26.6961955Z Actual: "\\tmp\\test.names.links" +Test (windows-latest) Run tests 2026-05-12T20:42:26.6962436Z ↑ (pos 0) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6962728Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6964655Z at Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.MakeNamesDatabaseFilename_CorrectlyGeneratesFilename(String dbFilename, String expected) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedLinksDecoratorTests.cs:line 44 +Test (windows-latest) Run tests 2026-05-12T20:42:26.6967163Z at InvokeStub_NamedLinksDecoratorTests.MakeNamesDatabaseFilename_CorrectlyGeneratesFilename(Object, Span`1) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6969266Z at System.Reflection.MethodBaseInvoker.InvokeWithFewArgs(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6971572Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.PersistentTransformationDecoratorTests.AlwaysTriggerIsStoredInLinksAndAppliedAfterWrite [20 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.6972848Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6973444Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp3xurb2.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.6974894Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6975135Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6976201Z at Foundation.Data.Doublets.Cli.Tests.Tests.PersistentTransformationDecoratorTests.DeleteIfExists(String path) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\PersistentTransformationDecoratorTests.cs:line 113 +Test (windows-latest) Run tests 2026-05-12T20:42:26.6978023Z at Foundation.Data.Doublets.Cli.Tests.Tests.PersistentTransformationDecoratorTests.RunWithPersistentLinks(Action`2 action) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\PersistentTransformationDecoratorTests.cs:line 90 +Test (windows-latest) Run tests 2026-05-12T20:42:26.6979969Z at Foundation.Data.Doublets.Cli.Tests.Tests.PersistentTransformationDecoratorTests.AlwaysTriggerIsStoredInLinksAndAppliedAfterWrite() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\PersistentTransformationDecoratorTests.cs:line 13 +Test (windows-latest) Run tests 2026-05-12T20:42:26.6981398Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6982111Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6982876Z Failed Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.AfterCreation_SetNameAndGetName_ShouldWork [38 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.6983537Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6984120Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp2zt3ef.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.6984752Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6985344Z [xUnit.net 00:00:00.65] Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.SetNameAndGetName_ShouldReturnSameName [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:26.6985992Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6986940Z at Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.AfterCreation_SetNameAndGetName_ShouldWork() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedLinksDecoratorTests.cs:line 147 +Test (windows-latest) Run tests 2026-05-12T20:42:26.6988576Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6989297Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6990049Z Failed Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.CanConstructNamedLinksDecorator [3 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.6990577Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6991155Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp1ckcow.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.6991776Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6991998Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6992916Z at Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.CanConstructNamedLinksDecorator() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedLinksDecoratorTests.cs:line 29 +Test (windows-latest) Run tests 2026-05-12T20:42:26.6994056Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6994764Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6995489Z Failed Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.RemoveName_NonExistent_DoesNotThrow [3 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.6996007Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6996570Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpvsculo.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.6997201Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.6997422Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.6998892Z at Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.RemoveName_NonExistent_DoesNotThrow() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedLinksDecoratorTests.cs:line 127 +Test (windows-latest) Run tests 2026-05-12T20:42:26.7000024Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.7000738Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.7001659Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.PersistentTransformationDecoratorTests.OnceTriggerDeletesItselfAfterFirstMatch [41 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.7002367Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:26.7002957Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpzbuvlz.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.7003584Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.7003821Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.7004941Z at Foundation.Data.Doublets.Cli.Tests.Tests.PersistentTransformationDecoratorTests.DeleteIfExists(String path) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\PersistentTransformationDecoratorTests.cs:line 113 +Test (windows-latest) Run tests 2026-05-12T20:42:26.7007248Z at Foundation.Data.Doublets.Cli.Tests.Tests.PersistentTransformationDecoratorTests.RunWithPersistentLinks(Action`2 action) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\PersistentTransformationDecoratorTests.cs:line 90 +Test (windows-latest) Run tests 2026-05-12T20:42:26.7009281Z at Foundation.Data.Doublets.Cli.Tests.Tests.PersistentTransformationDecoratorTests.OnceTriggerDeletesItselfAfterFirstMatch() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\PersistentTransformationDecoratorTests.cs:line 35 +Test (windows-latest) Run tests 2026-05-12T20:42:26.7010634Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.7011359Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.7012126Z Failed Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.RemoveName_ShouldReturnNullAfterRemoval [6 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.7012664Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:26.7013239Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpsy1jtk.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.7013864Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.7014087Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.7015025Z at Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.RemoveName_ShouldReturnNullAfterRemoval() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedLinksDecoratorTests.cs:line 108 +Test (windows-latest) Run tests 2026-05-12T20:42:26.7016181Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.7016907Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.7017744Z Failed Foundation.Data.Doublets.Cli.Tests.Issue62ReviewCoverageTests.ExplicitNumericIdUpdate_CanBeReversedWithAnotherUpdate [8 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.7018370Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:26.7018974Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpuzppjf.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.7019628Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.7019856Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.7020774Z at Foundation.Data.Doublets.Cli.Tests.Issue62ReviewCoverageTests.RunTestWithLinks(Action`1 testAction) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\Issue62ReviewCoverageTests.cs:line 61 +Test (windows-latest) Run tests 2026-05-12T20:42:26.7022383Z at Foundation.Data.Doublets.Cli.Tests.Issue62ReviewCoverageTests.ExplicitNumericIdUpdate_CanBeReversedWithAnotherUpdate() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\Issue62ReviewCoverageTests.cs:line 15 +Test (windows-latest) Run tests 2026-05-12T20:42:26.7024148Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.7024856Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.7026309Z [xUnit.net 00:00:00.65] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpqr0blm.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.7027069Z [xUnit.net 00:00:00.65] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.7027452Z [xUnit.net 00:00:00.65] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.7028651Z [xUnit.net 00:00:00.65] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedLinksDecoratorTests.cs(63,0): at Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.SetNameAndGetName_ShouldReturnSameName() +Test (windows-latest) Run tests 2026-05-12T20:42:26.7029993Z [xUnit.net 00:00:00.65] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.7030911Z [xUnit.net 00:00:00.65] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.7150263Z [xUnit.net 00:00:00.67] Foundation.Data.Doublets.Cli.Tests.Issue62ReviewCoverageTests.NamedLink_CreateDeleteRecreate_DoesNotLeaveStaleNameMapping [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:26.7180032Z [xUnit.net 00:00:00.67] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpuyqao5.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.7186311Z [xUnit.net 00:00:00.67] Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.DeleteLink_RemovesNameAutomatically [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:26.7188253Z [xUnit.net 00:00:00.67] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.7189501Z [xUnit.net 00:00:00.67] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MultipleUpdatesTest [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:26.7190904Z [xUnit.net 00:00:00.67] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.7192502Z [xUnit.net 00:00:00.67] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\Issue62ReviewCoverageTests.cs(61,0): at Foundation.Data.Doublets.Cli.Tests.Issue62ReviewCoverageTests.RunTestWithLinks(Action`1 testAction) +Test (windows-latest) Run tests 2026-05-12T20:42:26.7194389Z [xUnit.net 00:00:00.67] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\Issue62ReviewCoverageTests.cs(31,0): at Foundation.Data.Doublets.Cli.Tests.Issue62ReviewCoverageTests.NamedLink_CreateDeleteRecreate_DoesNotLeaveStaleNameMapping() +Test (windows-latest) Run tests 2026-05-12T20:42:26.7195830Z [xUnit.net 00:00:00.67] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.7196801Z [xUnit.net 00:00:00.67] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.7197912Z [xUnit.net 00:00:00.67] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpszdcxf.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.7198683Z [xUnit.net 00:00:00.67] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.7199082Z [xUnit.net 00:00:00.67] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.7199480Z [Test] All links: (1: 1->2) (2: 2->1) +Test (windows-latest) Run tests 2026-05-12T20:42:26.7200520Z [xUnit.net 00:00:00.67] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedLinksDecoratorTests.cs(171,0): at Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.DeleteLink_RemovesNameAutomatically() +Test (windows-latest) Run tests 2026-05-12T20:42:26.7201857Z [xUnit.net 00:00:00.67] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.7212112Z [xUnit.net 00:00:00.67] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.7213536Z [xUnit.net 00:00:00.67] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpzmmrxp.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.7214494Z [xUnit.net 00:00:00.67] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.7215011Z [xUnit.net 00:00:00.67] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.7216684Z [xUnit.net 00:00:00.67] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:26.7218632Z [xUnit.net 00:00:00.67] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(576,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MultipleUpdatesTest() +Test (windows-latest) Run tests 2026-05-12T20:42:26.7219972Z [xUnit.net 00:00:00.67] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.7220878Z [xUnit.net 00:00:00.67] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.7498955Z Failed Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.SetNameAndGetName_ShouldReturnSameName [3 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.7500759Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:26.7501872Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpqr0blm.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.7503366Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.7503782Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.7505454Z at Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.SetNameAndGetName_ShouldReturnSameName() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedLinksDecoratorTests.cs:line 63 +Test (windows-latest) Run tests 2026-05-12T20:42:26.7506679Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.7507410Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.7508271Z Failed Foundation.Data.Doublets.Cli.Tests.Issue62ReviewCoverageTests.NamedLink_CreateDeleteRecreate_DoesNotLeaveStaleNameMapping [21 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.7508903Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:26.7509501Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpuyqao5.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.7510412Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.7510646Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.7511584Z at Foundation.Data.Doublets.Cli.Tests.Issue62ReviewCoverageTests.RunTestWithLinks(Action`1 testAction) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\Issue62ReviewCoverageTests.cs:line 61 +Test (windows-latest) Run tests 2026-05-12T20:42:26.7513220Z at Foundation.Data.Doublets.Cli.Tests.Issue62ReviewCoverageTests.NamedLink_CreateDeleteRecreate_DoesNotLeaveStaleNameMapping() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\Issue62ReviewCoverageTests.cs:line 31 +Test (windows-latest) Run tests 2026-05-12T20:42:26.7514473Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.7515186Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.7515925Z Failed Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.DeleteLink_RemovesNameAutomatically [21 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.7516445Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:26.7517911Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpszdcxf.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.7518536Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.7518764Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.7519670Z at Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.DeleteLink_RemovesNameAutomatically() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedLinksDecoratorTests.cs:line 171 +Test (windows-latest) Run tests 2026-05-12T20:42:26.7520802Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.7521508Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.7522231Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MultipleUpdatesTest [94 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.7523152Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:26.7523775Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpzmmrxp.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:26.7524423Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:26.7524647Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:26.7525693Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:26.7527491Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MultipleUpdatesTest() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 576 +Test (windows-latest) Run tests 2026-05-12T20:42:26.7528622Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:26.7529322Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:26.7530109Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.CreateAndRetriveUserDefinedTypeTest [13 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.7531020Z Passed Foundation.Data.Doublets.Cli.Tests.PinnedTypesDecoratorTests.Should_Implement_Both_ILinks_And_IPinnedTypes [13 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.7532046Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.CreateAndRetrieveMultipleStringTypesTest(typeName: "UnicodeSymbol") [19 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.8436526Z Passed Foundation.Data.Doublets.Cli.Tests.PinnedTypesDecoratorTests.Should_Support_Deconstruction [29 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.8438555Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.CreateAndRetrieveMultipleStringTypesTest(typeName: "EmptyString") [23 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.8440472Z Passed Foundation.Data.Doublets.Cli.Tests.PinnedTypesDecoratorTests.Should_Work_As_ILinks_Decorator [20 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.8442394Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.CreateAndRetrieveMultipleStringTypesTest(typeName: "String") [29 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.8444254Z Passed Foundation.Data.Doublets.Cli.Tests.PinnedTypesDecoratorTests.Should_Enumerate_PinnedTypes [28 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.8446101Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.CreateAndRetrieveMultipleStringTypesTest(typeName: "Name") [21 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.8448159Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.CreateLinkWithSource2Target2Test [26 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.8450188Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.CreateAndRetrieveMultipleStringTypesTest(typeName: "UnicodeSequence") [16 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.9511672Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.DeleteAllLinksByIndexTest [18 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.9513252Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.CreateAndRetrieveMultipleStringTypesTest(typeName: "Type") [22 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.9514559Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.DeleteAllLinksBySourceAndTargetTest [25 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.9515564Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.NameIsRemovedWhenExternalReferenceIsDeletedTest [35 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.9516483Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.DeleteLinksByAnyTargetTest [22 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.9517282Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.NameExternalReferenceTest [18 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.9518124Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.DeleteLinksByAnySourceTest [15 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:26.9519271Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.CreateAndRetrieveUnicodeStringTest [31 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.0591845Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.DeleteMultipleLinksTest [31 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.0593314Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.CreateAndRetrieveSimpleStringTest [12 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.0594194Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.CreateMultipleLinksTest [13 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.0595116Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.DeletingNonNamedLinkDoesNotAffectOtherNamesTest [35 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.0596117Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.ReverseSourceWithTargetUsingVariablesTest [34 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.0597339Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.CreateAndRetrieveEmptyStringTest [28 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.0598142Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.CreateSingleLinkTest [30 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.0598879Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.RetrieveTypeByNameTest [32 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.1824767Z [Test] All links: (1: 1->1) (3: 3->3) +Test (windows-latest) Run tests 2026-05-12T20:42:27.1837349Z [xUnit.net 00:00:01.14] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreationWithEmptySlotDuringUpdateTest [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:27.1841160Z [xUnit.net 00:00:01.14] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpxxy0ch.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:27.1843367Z [xUnit.net 00:00:01.14] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:27.1844341Z [xUnit.net 00:00:01.14] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:27.1847079Z [xUnit.net 00:00:01.14] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:27.1854497Z [xUnit.net 00:00:01.14] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(633,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreationWithEmptySlotDuringUpdateTest() +Test (windows-latest) Run tests 2026-05-12T20:42:27.1856409Z [xUnit.net 00:00:01.14] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:27.1857320Z [xUnit.net 00:00:01.14] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:27.1876552Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.NoUpdateUsingVariablesTest [35 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.1878243Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.CreateAndRetrieveMultipleStringsTest [31 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.1879903Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.DeleteSingleLinkTest_Source1Target2 [28 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.1881118Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.NameIsRemovedWhenLinkIsDeletedTest [64 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.1882217Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.MixedMultipleUpdatesTest [74 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.1883193Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.ExternalReferenceCanUseNameThatAlreadyExistsInternallyTest [27 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.1884279Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreationWithEmptySlotDuringUpdateTest [464 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.1885249Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:27.1885867Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpxxy0ch.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:27.1886532Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:27.1886758Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:27.1887824Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:27.1889566Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreationWithEmptySlotDuringUpdateTest() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 633 +Test (windows-latest) Run tests 2026-05-12T20:42:27.1890792Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:27.1891658Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:27.1985746Z === Debug: Alternative Scenario === +Test (windows-latest) Run tests 2026-05-12T20:42:27.1986523Z Input changes: +Test (windows-latest) Run tests 2026-05-12T20:42:27.1987139Z 1. (1: 1 2) -> (0: 0 0) +Test (windows-latest) Run tests 2026-05-12T20:42:27.1987814Z 2. (1: 1 2) -> (1: 2 1) +Test (windows-latest) Run tests 2026-05-12T20:42:27.1988848Z 3. (2: 2 1) -> (2: 1 2) +Test (windows-latest) Run tests 2026-05-12T20:42:27.1989577Z Actual simplified changes: +Test (windows-latest) Run tests 2026-05-12T20:42:27.1990170Z 1. (1: 1 2) -> (1: 2 1) +Test (windows-latest) Run tests 2026-05-12T20:42:27.1990757Z 2. (2: 2 1) -> (2: 1 2) +Test (windows-latest) Run tests 2026-05-12T20:42:27.1991335Z Count: 2 +Test (windows-latest) Run tests 2026-05-12T20:42:27.1991846Z === End Debug === +Test (windows-latest) Run tests 2026-05-12T20:42:27.2077546Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.ChangesSimplifierTests.SimplifyChanges_Issue26_AlternativeScenario_NoSimplificationOccurs [16 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.2079181Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.DeleteSingleLinkTest_Source2Target2 [32 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.2080184Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.ChangesSimplifierTests.SimplifyChanges_NoChange_StillKeepsFirstAndLastState [< 1 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.2081465Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.ChangesSimplifierTests.SimplifyChanges_Issue26_UpdateOperationSimplification [< 1 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.2082926Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.ChangesSimplifierTests.SimplifyChanges_SpecificExample_RemovesIntermediateStates [1 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.2084051Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.ChangesSimplifierTests.SimplifyChanges_MultipleChainsFromSameBefore_RemovesIntermediateStates [< 1 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.2085237Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.ChangesSimplifierTests.SimplifyChanges_MultipleBranchesFromSameInitial_ProducesCorrectFinalStates [< 1 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.2086469Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.ChangesSimplifierTests.SimplifyChanges_MultipleBranchesFromSameInitial_ProducesCorrectFinalStates_InCorrectOrder [1 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.3243111Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.ChangesSimplifierTests.SimplifyChanges_SpecificExample_KeepsUnchangedStates [< 1 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.3244400Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.CreationWithEmptySlotDuringUpdateTest [27 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.3245317Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.BasicQueryProcessor.DeleteSingleLinkTest_Source2Target2 [38 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.3246904Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.CreateSingleLinkWithIndexAfterDoubleGapTest [35 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.3247799Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.BasicQueryProcessor.DeleteMultipleLinksTest [31 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.3248582Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.MultipleUpdatesTest [29 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.3249329Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.BasicQueryProcessor.CreateSingleLinkTest [34 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.3250191Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.CreateSingleLinkWithIndexAfterGapTest [29 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.3982353Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.BasicQueryProcessor.UpdateSingleLinkTest [19 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.3983848Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.CreationDuringUpdateTest [15 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.3985001Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.BasicQueryProcessor.CreateLinkWithSource2Target2Test [18 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.3985838Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.UpdateSingleLinkTest [15 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.3986569Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.BasicQueryProcessor.MultipleUpdatesTest [26 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.3987342Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.CreateSingleLinkWithIndexTest [32 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.3988127Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.BasicQueryProcessor.CreateMultipleLinksTest [17 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.3989151Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.DeletionDuringUpdateTest [10 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.4228089Z [xUnit.net 00:00:01.38] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLeftCompositeIntegerChildrenWithoutExtraLeaf_ShouldSucceed [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:27.4229871Z [Test] All links: (1: 1->1) (2: 2->1) +Test (windows-latest) Run tests 2026-05-12T20:42:27.4235362Z [xUnit.net 00:00:01.38] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpvbn0z4.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:27.4238281Z [xUnit.net 00:00:01.38] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:27.4250879Z [xUnit.net 00:00:01.38] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:27.4253758Z [xUnit.net 00:00:01.38] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:27.4258529Z [xUnit.net 00:00:01.38] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1187,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLeftCompositeIntegerChildrenWithoutExtraLeaf_ShouldSucceed() +Test (windows-latest) Run tests 2026-05-12T20:42:27.4279019Z [xUnit.net 00:00:01.38] Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_UsesProvidedPinnedTypesDecorator [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:27.4281085Z [xUnit.net 00:00:01.38] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:27.4302998Z [xUnit.net 00:00:01.38] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:27.4305849Z [xUnit.net 00:00:01.38] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpjvrdkp.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:27.4307343Z [xUnit.net 00:00:01.38] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:27.4308412Z [xUnit.net 00:00:01.38] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:27.4310763Z [xUnit.net 00:00:01.38] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedTypesDecoratorTests.cs(28,0): at Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.Dispose() +Test (windows-latest) Run tests 2026-05-12T20:42:27.4315089Z [xUnit.net 00:00:01.38] /_/src/xunit.execution/Extensions/ReflectionAbstractionExtensions.cs(79,0): at ReflectionAbstractionExtensions.DisposeTestClass(ITest test, Object testClass, IMessageBus messageBus, ExecutionTimer timer, CancellationTokenSource cancellationTokenSource) +Test (windows-latest) Run tests 2026-05-12T20:42:27.4564911Z [xUnit.net 00:00:01.41] Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_CanRemoveNames [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:27.4567070Z [xUnit.net 00:00:01.41] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpz1wlm1.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:27.4567876Z [xUnit.net 00:00:01.41] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:27.4568287Z [xUnit.net 00:00:01.41] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:27.4569762Z [xUnit.net 00:00:01.41] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedTypesDecoratorTests.cs(28,0): at Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.Dispose() +Test (windows-latest) Run tests 2026-05-12T20:42:27.4571614Z [xUnit.net 00:00:01.41] /_/src/xunit.execution/Extensions/ReflectionAbstractionExtensions.cs(79,0): at ReflectionAbstractionExtensions.DisposeTestClass(ITest test, Object testClass, IMessageBus messageBus, ExecutionTimer timer, CancellationTokenSource cancellationTokenSource) +Test (windows-latest) Run tests 2026-05-12T20:42:27.4885101Z [xUnit.net 00:00:01.44] Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_DeleteRemovesAssociatedNames [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:27.4887381Z [xUnit.net 00:00:01.44] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp2cnynn.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:27.4889643Z [xUnit.net 00:00:01.44] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:27.4890547Z [xUnit.net 00:00:01.44] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:27.4892848Z [xUnit.net 00:00:01.44] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedTypesDecoratorTests.cs(28,0): at Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.Dispose() +Test (windows-latest) Run tests 2026-05-12T20:42:27.4896423Z [xUnit.net 00:00:01.44] /_/src/xunit.execution/Extensions/ReflectionAbstractionExtensions.cs(79,0): at ReflectionAbstractionExtensions.DisposeTestClass(ITest test, Object testClass, IMessageBus messageBus, ExecutionTimer timer, CancellationTokenSource cancellationTokenSource) +Test (windows-latest) Run tests 2026-05-12T20:42:27.5172584Z [xUnit.net 00:00:01.47] Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_CanSetAndGetNames [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:27.5174850Z [xUnit.net 00:00:01.47] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpfbaibz.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:27.5177662Z [xUnit.net 00:00:01.47] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:27.5180457Z [xUnit.net 00:00:01.47] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:27.5182769Z [xUnit.net 00:00:01.47] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedTypesDecoratorTests.cs(28,0): at Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.Dispose() +Test (windows-latest) Run tests 2026-05-12T20:42:27.5186164Z [xUnit.net 00:00:01.47] /_/src/xunit.execution/Extensions/ReflectionAbstractionExtensions.cs(79,0): at ReflectionAbstractionExtensions.DisposeTestClass(ITest test, Object testClass, IMessageBus messageBus, ExecutionTimer timer, CancellationTokenSource cancellationTokenSource) +Test (windows-latest) Run tests 2026-05-12T20:42:27.5388568Z [xUnit.net 00:00:01.49] Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_HandlesNonexistentNames [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:27.5390829Z [xUnit.net 00:00:01.49] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpoch3z4.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:27.5392948Z [xUnit.net 00:00:01.49] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:27.5393931Z [xUnit.net 00:00:01.49] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:27.5396455Z [xUnit.net 00:00:01.49] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedTypesDecoratorTests.cs(28,0): at Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.Dispose() +Test (windows-latest) Run tests 2026-05-12T20:42:27.5400503Z [xUnit.net 00:00:01.49] /_/src/xunit.execution/Extensions/ReflectionAbstractionExtensions.cs(79,0): at ReflectionAbstractionExtensions.DisposeTestClass(ITest test, Object testClass, IMessageBus messageBus, ExecutionTimer timer, CancellationTokenSource cancellationTokenSource) +Test (windows-latest) Run tests 2026-05-12T20:42:27.5429904Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.BasicQueryProcessor.DeleteSingleLinkTest_Source1Target2 [29 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.5432066Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLeftCompositeIntegerChildrenWithoutExtraLeaf_ShouldSucceed [238 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.5433590Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:27.5434708Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpvbn0z4.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:27.5435928Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:27.5436332Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:27.5438661Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:27.5440989Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLeftCompositeIntegerChildrenWithoutExtraLeaf_ShouldSucceed() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1187 +Test (windows-latest) Run tests 2026-05-12T20:42:27.5442357Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:27.5443062Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:27.5443876Z Failed Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_UsesProvidedPinnedTypesDecorator [29 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.5444473Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:27.5445068Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpjvrdkp.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:27.5445720Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:27.5445949Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:27.5446962Z at Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.Dispose() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedTypesDecoratorTests.cs:line 28 +Test (windows-latest) Run tests 2026-05-12T20:42:27.5448517Z at ReflectionAbstractionExtensions.DisposeTestClass(ITest test, Object testClass, IMessageBus messageBus, ExecutionTimer timer, CancellationTokenSource cancellationTokenSource) in /_/src/xunit.execution/Extensions/ReflectionAbstractionExtensions.cs:line 79 +Test (windows-latest) Run tests 2026-05-12T20:42:27.5450247Z Failed Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_CanRemoveNames [28 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.5450997Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:27.5451576Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpz1wlm1.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:27.5452196Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:27.5452421Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:27.5453213Z at Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.Dispose() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedTypesDecoratorTests.cs:line 28 +Test (windows-latest) Run tests 2026-05-12T20:42:27.5454992Z at ReflectionAbstractionExtensions.DisposeTestClass(ITest test, Object testClass, IMessageBus messageBus, ExecutionTimer timer, CancellationTokenSource cancellationTokenSource) in /_/src/xunit.execution/Extensions/ReflectionAbstractionExtensions.cs:line 79 +Test (windows-latest) Run tests 2026-05-12T20:42:27.5456394Z Failed Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_DeleteRemovesAssociatedNames [31 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.5456979Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:27.5457545Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp2cnynn.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:27.5458174Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:27.5458393Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:27.5459183Z at Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.Dispose() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedTypesDecoratorTests.cs:line 28 +Test (windows-latest) Run tests 2026-05-12T20:42:27.5460732Z at ReflectionAbstractionExtensions.DisposeTestClass(ITest test, Object testClass, IMessageBus messageBus, ExecutionTimer timer, CancellationTokenSource cancellationTokenSource) in /_/src/xunit.execution/Extensions/ReflectionAbstractionExtensions.cs:line 79 +Test (windows-latest) Run tests 2026-05-12T20:42:27.5462069Z Failed Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_CanSetAndGetNames [29 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.5462601Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:27.5463251Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpfbaibz.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:27.5463872Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:27.5464097Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:27.5464888Z at Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.Dispose() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedTypesDecoratorTests.cs:line 28 +Test (windows-latest) Run tests 2026-05-12T20:42:27.5466997Z at ReflectionAbstractionExtensions.DisposeTestClass(ITest test, Object testClass, IMessageBus messageBus, ExecutionTimer timer, CancellationTokenSource cancellationTokenSource) in /_/src/xunit.execution/Extensions/ReflectionAbstractionExtensions.cs:line 79 +Test (windows-latest) Run tests 2026-05-12T20:42:27.5469251Z Failed Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_HandlesNonexistentNames [21 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.5469812Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:27.5470390Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpoch3z4.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:27.5471200Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:27.5471421Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:27.5472214Z at Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.Dispose() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedTypesDecoratorTests.cs:line 28 +Test (windows-latest) Run tests 2026-05-12T20:42:27.5473966Z at ReflectionAbstractionExtensions.DisposeTestClass(ITest test, Object testClass, IMessageBus messageBus, ExecutionTimer timer, CancellationTokenSource cancellationTokenSource) in /_/src/xunit.execution/Extensions/ReflectionAbstractionExtensions.cs:line 79 +Test (windows-latest) Run tests 2026-05-12T20:42:27.5688727Z [xUnit.net 00:00:01.52] Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_ReassigningExistingNameMovesNameToNewLink [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:27.5691478Z [xUnit.net 00:00:01.52] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmprwvs02.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:27.5693296Z [xUnit.net 00:00:01.52] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:27.5694404Z [xUnit.net 00:00:01.52] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:27.5696348Z [xUnit.net 00:00:01.52] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedTypesDecoratorTests.cs(28,0): at Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.Dispose() +Test (windows-latest) Run tests 2026-05-12T20:42:27.5700144Z [xUnit.net 00:00:01.52] /_/src/xunit.execution/Extensions/ReflectionAbstractionExtensions.cs(79,0): at ReflectionAbstractionExtensions.DisposeTestClass(ITest test, Object testClass, IMessageBus messageBus, ExecutionTimer timer, CancellationTokenSource cancellationTokenSource) +Test (windows-latest) Run tests 2026-05-12T20:42:27.5963064Z [xUnit.net 00:00:01.55] Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_ImplementsILinks [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:27.5967481Z [xUnit.net 00:00:01.55] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpq0yaoi.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:27.5968529Z [xUnit.net 00:00:01.55] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:27.5968949Z [xUnit.net 00:00:01.55] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:27.5970003Z [xUnit.net 00:00:01.55] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedTypesDecoratorTests.cs(28,0): at Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.Dispose() +Test (windows-latest) Run tests 2026-05-12T20:42:27.5971829Z [xUnit.net 00:00:01.55] /_/src/xunit.execution/Extensions/ReflectionAbstractionExtensions.cs(79,0): at ReflectionAbstractionExtensions.DisposeTestClass(ITest test, Object testClass, IMessageBus messageBus, ExecutionTimer timer, CancellationTokenSource cancellationTokenSource) +Test (windows-latest) Run tests 2026-05-12T20:42:27.6013177Z [xUnit.net 00:00:01.56] Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_CanConstructFromDatabaseFilename [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:27.6020446Z [xUnit.net 00:00:01.56] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpkup244.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:27.6021961Z [xUnit.net 00:00:01.56] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:27.6022368Z [xUnit.net 00:00:01.56] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:27.6023660Z [xUnit.net 00:00:01.56] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedTypesDecoratorTests.cs(258,0): at Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_CanConstructFromDatabaseFilename() +Test (windows-latest) Run tests 2026-05-12T20:42:27.6025119Z [xUnit.net 00:00:01.56] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:27.6026053Z [xUnit.net 00:00:01.56] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:27.6297855Z [xUnit.net 00:00:01.58] Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_CanEnumeratePinnedTypes [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:27.6300230Z [xUnit.net 00:00:01.58] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpa1sryg.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:27.6302669Z [xUnit.net 00:00:01.58] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:27.6304086Z [xUnit.net 00:00:01.58] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:27.6306305Z [xUnit.net 00:00:01.58] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedTypesDecoratorTests.cs(28,0): at Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.Dispose() +Test (windows-latest) Run tests 2026-05-12T20:42:27.6309811Z [xUnit.net 00:00:01.58] /_/src/xunit.execution/Extensions/ReflectionAbstractionExtensions.cs(79,0): at ReflectionAbstractionExtensions.DisposeTestClass(ITest test, Object testClass, IMessageBus messageBus, ExecutionTimer timer, CancellationTokenSource cancellationTokenSource) +Test (windows-latest) Run tests 2026-05-12T20:42:27.6628114Z [xUnit.net 00:00:01.62] Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_CanOverwriteNames [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:27.6630674Z [xUnit.net 00:00:01.62] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpxnmhqg.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:27.6632831Z [xUnit.net 00:00:01.62] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:27.6634495Z [xUnit.net 00:00:01.62] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:27.6636715Z [xUnit.net 00:00:01.62] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedTypesDecoratorTests.cs(28,0): at Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.Dispose() +Test (windows-latest) Run tests 2026-05-12T20:42:27.6640453Z [xUnit.net 00:00:01.62] /_/src/xunit.execution/Extensions/ReflectionAbstractionExtensions.cs(79,0): at ReflectionAbstractionExtensions.DisposeTestClass(ITest test, Object testClass, IMessageBus messageBus, ExecutionTimer timer, CancellationTokenSource cancellationTokenSource) +Test (windows-latest) Run tests 2026-05-12T20:42:27.6998466Z [xUnit.net 00:00:01.65] Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_ImplementsIPinnedTypes [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:27.7000849Z [xUnit.net 00:00:01.65] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpu3urez.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:27.7002880Z [xUnit.net 00:00:01.65] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:27.7003820Z [xUnit.net 00:00:01.65] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:27.7005921Z [xUnit.net 00:00:01.65] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedTypesDecoratorTests.cs(28,0): at Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.Dispose() +Test (windows-latest) Run tests 2026-05-12T20:42:27.7008931Z [xUnit.net 00:00:01.65] /_/src/xunit.execution/Extensions/ReflectionAbstractionExtensions.cs(79,0): at ReflectionAbstractionExtensions.DisposeTestClass(ITest test, Object testClass, IMessageBus messageBus, ExecutionTimer timer, CancellationTokenSource cancellationTokenSource) +Test (windows-latest) Run tests 2026-05-12T20:42:27.7124259Z [xUnit.net 00:00:01.67] Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_ImplementsINamedTypes [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:27.7126456Z [xUnit.net 00:00:01.67] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmprxsf2r.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:27.7128556Z [xUnit.net 00:00:01.67] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:27.7131563Z [xUnit.net 00:00:01.67] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:27.7133668Z [xUnit.net 00:00:01.67] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedTypesDecoratorTests.cs(28,0): at Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.Dispose() +Test (windows-latest) Run tests 2026-05-12T20:42:27.7137207Z [xUnit.net 00:00:01.67] /_/src/xunit.execution/Extensions/ReflectionAbstractionExtensions.cs(79,0): at ReflectionAbstractionExtensions.DisposeTestClass(ITest test, Object testClass, IMessageBus messageBus, ExecutionTimer timer, CancellationTokenSource cancellationTokenSource) +Test (windows-latest) Run tests 2026-05-12T20:42:27.7241072Z [xUnit.net 00:00:01.68] Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_CanGetLinkByName [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:27.7243343Z [xUnit.net 00:00:01.68] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpzjvfvg.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:27.7245143Z [xUnit.net 00:00:01.68] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:27.7245868Z [xUnit.net 00:00:01.68] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:27.7247776Z [xUnit.net 00:00:01.68] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedTypesDecoratorTests.cs(28,0): at Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.Dispose() +Test (windows-latest) Run tests 2026-05-12T20:42:27.7251138Z [xUnit.net 00:00:01.68] /_/src/xunit.execution/Extensions/ReflectionAbstractionExtensions.cs(79,0): at ReflectionAbstractionExtensions.DisposeTestClass(ITest test, Object testClass, IMessageBus messageBus, ExecutionTimer timer, CancellationTokenSource cancellationTokenSource) +Test (windows-latest) Run tests 2026-05-12T20:42:27.7275555Z [Test] All links: (21: 21->21) +Test (windows-latest) Run tests 2026-05-12T20:42:27.7288198Z [xUnit.net 00:00:01.68] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Issue20_SubstituteFullPointWithUnboundParts_ShouldKeepFullPoint [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:27.7290913Z [xUnit.net 00:00:01.68] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpcaaggv.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:27.7292689Z [xUnit.net 00:00:01.68] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:27.7293490Z [xUnit.net 00:00:01.68] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:27.7295950Z [xUnit.net 00:00:01.68] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:27.7300339Z [xUnit.net 00:00:01.68] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1553,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Issue20_SubstituteFullPointWithUnboundParts_ShouldKeepFullPoint() +Test (windows-latest) Run tests 2026-05-12T20:42:27.7303459Z [xUnit.net 00:00:01.68] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:27.7309029Z [xUnit.net 00:00:01.68] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:27.7335787Z Failed Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_ReassigningExistingNameMovesNameToNewLink [27 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.7337299Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:27.7338482Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmprwvs02.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:27.7339824Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:27.7340376Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:27.7342028Z at Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.Dispose() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedTypesDecoratorTests.cs:line 28 +Test (windows-latest) Run tests 2026-05-12T20:42:27.7345479Z at ReflectionAbstractionExtensions.DisposeTestClass(ITest test, Object testClass, IMessageBus messageBus, ExecutionTimer timer, CancellationTokenSource cancellationTokenSource) in /_/src/xunit.execution/Extensions/ReflectionAbstractionExtensions.cs:line 79 +Test (windows-latest) Run tests 2026-05-12T20:42:27.7348166Z Failed Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_ImplementsILinks [26 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.7349233Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:27.7350299Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpq0yaoi.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:27.7351477Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:27.7351895Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:27.7353440Z at Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.Dispose() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedTypesDecoratorTests.cs:line 28 +Test (windows-latest) Run tests 2026-05-12T20:42:27.7356811Z at ReflectionAbstractionExtensions.DisposeTestClass(ITest test, Object testClass, IMessageBus messageBus, ExecutionTimer timer, CancellationTokenSource cancellationTokenSource) in /_/src/xunit.execution/Extensions/ReflectionAbstractionExtensions.cs:line 79 +Test (windows-latest) Run tests 2026-05-12T20:42:27.7359561Z Failed Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_CanConstructFromDatabaseFilename [5 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.7360737Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:27.7361784Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpkup244.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:27.7363284Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:27.7363687Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:27.7365542Z at Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_CanConstructFromDatabaseFilename() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedTypesDecoratorTests.cs:line 258 +Test (windows-latest) Run tests 2026-05-12T20:42:27.7367945Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:27.7369338Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:27.7370850Z Failed Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_CanEnumeratePinnedTypes [28 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.7371965Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:27.7373063Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpa1sryg.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:27.7374250Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:27.7375077Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:27.7376631Z at Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.Dispose() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedTypesDecoratorTests.cs:line 28 +Test (windows-latest) Run tests 2026-05-12T20:42:27.7410165Z at ReflectionAbstractionExtensions.DisposeTestClass(ITest test, Object testClass, IMessageBus messageBus, ExecutionTimer timer, CancellationTokenSource cancellationTokenSource) in /_/src/xunit.execution/Extensions/ReflectionAbstractionExtensions.cs:line 79 +Test (windows-latest) Run tests 2026-05-12T20:42:27.7412856Z Failed Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_CanOverwriteNames [32 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.7413936Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:27.7415431Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpxnmhqg.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:27.7416637Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:27.7417043Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:27.7418583Z at Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.Dispose() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedTypesDecoratorTests.cs:line 28 +Test (windows-latest) Run tests 2026-05-12T20:42:27.7421626Z at ReflectionAbstractionExtensions.DisposeTestClass(ITest test, Object testClass, IMessageBus messageBus, ExecutionTimer timer, CancellationTokenSource cancellationTokenSource) in /_/src/xunit.execution/Extensions/ReflectionAbstractionExtensions.cs:line 79 +Test (windows-latest) Run tests 2026-05-12T20:42:27.7424332Z Failed Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_ImplementsIPinnedTypes [36 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.7425468Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:27.7426559Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpu3urez.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:27.7427770Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:27.7428195Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:27.7429741Z at Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.Dispose() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedTypesDecoratorTests.cs:line 28 +Test (windows-latest) Run tests 2026-05-12T20:42:27.7432767Z at ReflectionAbstractionExtensions.DisposeTestClass(ITest test, Object testClass, IMessageBus messageBus, ExecutionTimer timer, CancellationTokenSource cancellationTokenSource) in /_/src/xunit.execution/Extensions/ReflectionAbstractionExtensions.cs:line 79 +Test (windows-latest) Run tests 2026-05-12T20:42:27.7435866Z Failed Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_ImplementsINamedTypes [12 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.7436991Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:27.7438341Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmprxsf2r.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:27.7439516Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:27.7439942Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:27.7441477Z at Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.Dispose() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedTypesDecoratorTests.cs:line 28 +Test (windows-latest) Run tests 2026-05-12T20:42:27.7444496Z at ReflectionAbstractionExtensions.DisposeTestClass(ITest test, Object testClass, IMessageBus messageBus, ExecutionTimer timer, CancellationTokenSource cancellationTokenSource) in /_/src/xunit.execution/Extensions/ReflectionAbstractionExtensions.cs:line 79 +Test (windows-latest) Run tests 2026-05-12T20:42:27.7447151Z Failed Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_CanGetLinkByName [11 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.7448234Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:27.7449302Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpzjvfvg.tmp' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:27.7450482Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:27.7450931Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:27.7452462Z at Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.Dispose() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\NamedTypesDecoratorTests.cs:line 28 +Test (windows-latest) Run tests 2026-05-12T20:42:27.7456680Z at ReflectionAbstractionExtensions.DisposeTestClass(ITest test, Object testClass, IMessageBus messageBus, ExecutionTimer timer, CancellationTokenSource cancellationTokenSource) in /_/src/xunit.execution/Extensions/ReflectionAbstractionExtensions.cs:line 79 +Test (windows-latest) Run tests 2026-05-12T20:42:27.7459617Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Issue20_SubstituteFullPointWithUnboundParts_ShouldKeepFullPoint [306 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:27.7460944Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:27.7462033Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpcaaggv.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:27.7463222Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:27.7463618Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:27.7465569Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:27.7469387Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Issue20_SubstituteFullPointWithUnboundParts_ShouldKeepFullPoint() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1553 +Test (windows-latest) Run tests 2026-05-12T20:42:27.7472485Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:27.7473897Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:28.3243257Z [xUnit.net 00:00:02.28] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MatchAndDelete2LevelNestedLinksTest [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:28.3244667Z [Test] All links: (1: 1->1) (2: 2->2) +Test (windows-latest) Run tests 2026-05-12T20:42:28.3246713Z [xUnit.net 00:00:02.28] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp1ca4go.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:28.3248886Z [xUnit.net 00:00:02.28] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:28.3249957Z [xUnit.net 00:00:02.28] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:28.3252706Z [xUnit.net 00:00:02.28] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:28.3257585Z [xUnit.net 00:00:02.28] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(355,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MatchAndDelete2LevelNestedLinksTest() +Test (windows-latest) Run tests 2026-05-12T20:42:28.3260423Z [xUnit.net 00:00:02.28] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:28.3262200Z [xUnit.net 00:00:02.28] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.3379641Z [Test] Test was cancelled after 1 seconds timeout +Test (windows-latest) Run tests 2026-05-12T20:42:29.3391469Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MatchAndDelete2LevelNestedLinksTest [592 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.5518966Z [xUnit.net 00:00:03.29] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteLinksByAnyTargetTest [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.5520263Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.5521431Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp1ca4go.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.5532673Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.5538239Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.5544404Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.5561765Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MatchAndDelete2LevelNestedLinksTest() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 355 +Test (windows-latest) Run tests 2026-05-12T20:42:29.5564634Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.5568813Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.5576701Z [Trace] Constructing NamedTypesDecorator with names DB: C:\Users\runneradmin\AppData\Local\Temp\tmpbl4bvk.names.links +Test (windows-latest) Run tests 2026-05-12T20:42:29.5626608Z [xUnit.net 00:00:03.50] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpp3px2u.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.5629308Z [xUnit.net 00:00:03.50] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.5630503Z [xUnit.net 00:00:03.50] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.5634477Z [xUnit.net 00:00:03.50] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.5638346Z [xUnit.net 00:00:03.50] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(723,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteLinksByAnyTargetTest() +Test (windows-latest) Run tests 2026-05-12T20:42:29.5669949Z [xUnit.net 00:00:03.52] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateNamedLinkWithStringId_ShouldCreateSingleLink [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.5672521Z [xUnit.net 00:00:03.50] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.5680769Z [xUnit.net 00:00:03.50] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.5684369Z [ProcessQuery] Query: "(() ((link: link link)))" +Test (windows-latest) Run tests 2026-05-12T20:42:29.5686568Z [ProcessQuery] Parser returned 1 top-level link(s). +Test (windows-latest) Run tests 2026-05-12T20:42:29.5695578Z [ProcessQuery] Restriction link => Id="" Values.Count=0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.5696821Z [ProcessQuery] Substitution link => Id="" Values.Count=1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.5698149Z [ProcessQuery] No restriction, but substitution is non-empty => creation scenario. +Test (windows-latest) Run tests 2026-05-12T20:42:29.5699508Z [ValidateLinksExistOrWillBeCreated] Starting validation +Test (windows-latest) Run tests 2026-05-12T20:42:29.5700572Z [ValidateLinksExistOrWillBeCreated] Numeric links to be created: +Test (windows-latest) Run tests 2026-05-12T20:42:29.5701702Z [ValidateLinksExistOrWillBeCreated] Named links to be created: link +Test (windows-latest) Run tests 2026-05-12T20:42:29.5702686Z [Trace] GetByName called for name: 'link' +Test (windows-latest) Run tests 2026-05-12T20:42:29.5703421Z [Trace] GetByName result: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.5713299Z [ValidateReferencesInPattern] Named link 'link' reference validated in substitution pattern +Test (windows-latest) Run tests 2026-05-12T20:42:29.5714575Z [Trace] GetByName called for name: 'link' +Test (windows-latest) Run tests 2026-05-12T20:42:29.5715367Z [Trace] GetByName result: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.5716503Z [ValidateReferencesInPattern] Named link 'link' reference validated in substitution pattern +Test (windows-latest) Run tests 2026-05-12T20:42:29.5717904Z [ValidateLinksExistOrWillBeCreated] Validation completed +Test (windows-latest) Run tests 2026-05-12T20:42:29.5718881Z [Trace] GetByName called for name: 'link' +Test (windows-latest) Run tests 2026-05-12T20:42:29.5719686Z [Trace] GetByName result: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.5720432Z [Trace] Update called with restriction: [1] +Test (windows-latest) Run tests 2026-05-12T20:42:29.5722217Z [Trace] Debug: handlerWrapper invoked - before=1,0,0, after=1,0,0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.5723174Z [Trace] Update result: 4294967295 +Test (windows-latest) Run tests 2026-05-12T20:42:29.5754892Z [xUnit.net 00:00:03.53] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeletionDuringUpdateTest [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.5756827Z [EnsureNestedLinkCreatedRecursively] Created named leaf 'link' => ID=1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.5759634Z [Trace] SetName called for link: 1 with name: 'link' +Test (windows-latest) Run tests 2026-05-12T20:42:29.5760354Z [Trace] RemoveName called for link: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.5760859Z [Trace] RemoveName completed for link: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.5761670Z [Trace] SetName result: 100 +Test (windows-latest) Run tests 2026-05-12T20:42:29.5762340Z [EnsureNestedLinkCreatedRecursively] Updating link ID=1 => Source=1, Target=1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.5763084Z [Trace] Update called with restriction: [1,0,0] +Test (windows-latest) Run tests 2026-05-12T20:42:29.5763986Z [Trace] Debug: handlerWrapper invoked - before=1,0,0, after=1,1,1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.5764913Z [EnsureNestedLinkCreatedRecursively] Update handler: before=(1: 0->0), after=(1: 1->1) +Test (windows-latest) Run tests 2026-05-12T20:42:29.5765487Z [Trace] Update result: 4294967295 +Test (windows-latest) Run tests 2026-05-12T20:42:29.5765827Z [ProcessQuery] Created link ID #1 from substitution pattern. +Test (windows-latest) Run tests 2026-05-12T20:42:29.5766180Z [Test] All links: (1: 1->1) +Test (windows-latest) Run tests 2026-05-12T20:42:29.5766438Z [Trace] GetByName called for name: 'link' +Test (windows-latest) Run tests 2026-05-12T20:42:29.5766864Z [Trace] GetByName result: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.5767126Z [Trace] GetName called for link: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.5767368Z [Trace] GetName result: link +Test (windows-latest) Run tests 2026-05-12T20:42:29.5768179Z [xUnit.net 00:00:03.52] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpbl4bvk.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.5769180Z [xUnit.net 00:00:03.52] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.5769567Z [xUnit.net 00:00:03.52] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.5771215Z [xUnit.net 00:00:03.52] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.5773258Z [xUnit.net 00:00:03.52] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1152,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateNamedLinkWithStringId_ShouldCreateSingleLink() +Test (windows-latest) Run tests 2026-05-12T20:42:29.5775187Z [xUnit.net 00:00:03.52] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.5776341Z [xUnit.net 00:00:03.52] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.5776895Z [Test] All links: (1: 1->1) +Test (windows-latest) Run tests 2026-05-12T20:42:29.5777678Z [xUnit.net 00:00:03.53] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmppkxzgm.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.5778450Z [xUnit.net 00:00:03.53] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.5778832Z [xUnit.net 00:00:03.53] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.5780144Z [xUnit.net 00:00:03.53] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.5782010Z [xUnit.net 00:00:03.53] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(652,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeletionDuringUpdateTest() +Test (windows-latest) Run tests 2026-05-12T20:42:29.5783347Z [xUnit.net 00:00:03.53] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.5784459Z [xUnit.net 00:00:03.53] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.5817737Z [xUnit.net 00:00:03.53] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateNamedLinkWithMissingNamedReferences_ShouldThrowException [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.5820359Z [xUnit.net 00:00:03.54] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpmd0n0c.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.5822559Z [xUnit.net 00:00:03.54] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.5823727Z [xUnit.net 00:00:03.54] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.5827985Z [xUnit.net 00:00:03.54] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.5832280Z [xUnit.net 00:00:03.54] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1743,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateNamedLinkWithMissingNamedReferences_ShouldThrowException() +Test (windows-latest) Run tests 2026-05-12T20:42:29.5834401Z [xUnit.net 00:00:03.54] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.5835317Z [xUnit.net 00:00:03.54] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.5853933Z [Test] All links: (1: 1->1) +Test (windows-latest) Run tests 2026-05-12T20:42:29.5868732Z [xUnit.net 00:00:03.54] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithIntegerId_ShouldCreateSingleLink [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.5871184Z [xUnit.net 00:00:03.54] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmphgfjoh.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.5873064Z [xUnit.net 00:00:03.54] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.5888105Z [xUnit.net 00:00:03.54] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.5898197Z [xUnit.net 00:00:03.54] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.5902126Z [xUnit.net 00:00:03.54] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1172,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithIntegerId_ShouldCreateSingleLink() +Test (windows-latest) Run tests 2026-05-12T20:42:29.5907262Z [xUnit.net 00:00:03.54] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.5908967Z [xUnit.net 00:00:03.54] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.5912279Z [Test] All links: +Test (windows-latest) Run tests 2026-05-12T20:42:29.5926778Z [xUnit.net 00:00:03.55] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteAllLinksByIndexTest [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.5929044Z [xUnit.net 00:00:03.55] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmprvnxue.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.5930838Z [xUnit.net 00:00:03.55] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.5931688Z [xUnit.net 00:00:03.55] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.5937878Z [xUnit.net 00:00:03.55] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.5942061Z [xUnit.net 00:00:03.55] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(810,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteAllLinksByIndexTest() +Test (windows-latest) Run tests 2026-05-12T20:42:29.5943918Z [xUnit.net 00:00:03.55] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.5944836Z [xUnit.net 00:00:03.55] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.5974277Z [Test] All links: (1: 1->1) (2: 2->2) (3: 1->2) +Test (windows-latest) Run tests 2026-05-12T20:42:29.5991937Z [xUnit.net 00:00:03.55] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateNamedFamilyLinksTest [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.5994226Z [xUnit.net 00:00:03.55] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpk1iiim.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.5996033Z [xUnit.net 00:00:03.55] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.5996898Z [xUnit.net 00:00:03.55] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.5999583Z [xUnit.net 00:00:03.55] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6004661Z [xUnit.net 00:00:03.55] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(827,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateNamedFamilyLinksTest() +Test (windows-latest) Run tests 2026-05-12T20:42:29.6007151Z [xUnit.net 00:00:03.55] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6008082Z [xUnit.net 00:00:03.55] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6029198Z [Test] All links: (1: 1->2) (2: 1->1) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6044045Z [xUnit.net 00:00:03.56] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateDuplicatePairWithNumericLinks_ShouldCreateOnlyOneSubLink [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.6046753Z [xUnit.net 00:00:03.56] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpwvpmuj.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.6048844Z [xUnit.net 00:00:03.56] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6050389Z [xUnit.net 00:00:03.56] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6060208Z [xUnit.net 00:00:03.56] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6067848Z [xUnit.net 00:00:03.56] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1308,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateDuplicatePairWithNumericLinks_ShouldCreateOnlyOneSubLink() +Test (windows-latest) Run tests 2026-05-12T20:42:29.6070740Z [xUnit.net 00:00:03.56] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6072238Z [xUnit.net 00:00:03.56] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6091492Z [Test] All links: (1: 1->1) (2: 2->2) (3: 2->1) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6107635Z [xUnit.net 00:00:03.56] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.StringAliasesInVariableRestriction_ShouldConstrainMatchesToNamedLinks [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.6110299Z [xUnit.net 00:00:03.56] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpyunhcr.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.6112893Z [xUnit.net 00:00:03.56] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6113779Z [xUnit.net 00:00:03.56] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6116366Z [xUnit.net 00:00:03.56] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6128341Z [xUnit.net 00:00:03.56] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1506,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.StringAliasesInVariableRestriction_ShouldConstrainMatchesToNamedLinks() +Test (windows-latest) Run tests 2026-05-12T20:42:29.6137502Z [xUnit.net 00:00:03.56] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6141269Z [xUnit.net 00:00:03.56] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6147733Z [Test] All links: (2: 2->2) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6168125Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteLinksByAnyTargetTest [1 s] +Test (windows-latest) Run tests 2026-05-12T20:42:29.6175981Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6177443Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpp3px2u.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.6178985Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6179759Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6185667Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6189046Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteLinksByAnyTargetTest() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 723 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6191283Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6193133Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6194587Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateNamedLinkWithStringId_ShouldCreateSingleLink [224 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.6195454Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6196512Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpbl4bvk.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.6197714Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6198123Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6200110Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6204989Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateNamedLinkWithStringId_ShouldCreateSingleLink() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1152 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6208474Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6209537Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6210313Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeletionDuringUpdateTest [8 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.6211473Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6212104Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmppkxzgm.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.6212776Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6213009Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6214078Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6215740Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeletionDuringUpdateTest() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 652 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6216895Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6217602Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6218537Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateNamedLinkWithMissingNamedReferences_ShouldThrowException [5 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.6219261Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6219867Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpmd0n0c.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.6220616Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6221029Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6223008Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6226247Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateNamedLinkWithMissingNamedReferences_ShouldThrowException() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1743 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6228819Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6242720Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6246254Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithIntegerId_ShouldCreateSingleLink [5 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.6247497Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6248620Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmphgfjoh.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.6249869Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6250284Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6252288Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6256699Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithIntegerId_ShouldCreateSingleLink() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1172 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6259155Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6260520Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6262390Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteAllLinksByIndexTest [5 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.6264209Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6265329Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmprvnxue.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.6266547Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6266960Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6269009Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6272081Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteAllLinksByIndexTest() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 810 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6274355Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6275718Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6277206Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateNamedFamilyLinksTest [6 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.6278292Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6279384Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpk1iiim.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.6280625Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6281026Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6283404Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6287394Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateNamedFamilyLinksTest() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 827 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6290801Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6301361Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6305626Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateDuplicatePairWithNumericLinks_ShouldCreateOnlyOneSubLink [4 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.6307937Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6309350Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpwvpmuj.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.6310603Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6311016Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6313018Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6316586Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateDuplicatePairWithNumericLinks_ShouldCreateOnlyOneSubLink() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1308 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6319171Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6320464Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6322607Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.StringAliasesInVariableRestriction_ShouldConstrainMatchesToNamedLinks [6 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.6324759Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6325847Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpyunhcr.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.6327048Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6327460Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6329426Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6331684Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.StringAliasesInVariableRestriction_ShouldConstrainMatchesToNamedLinks() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1506 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6333113Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6336128Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6356168Z [xUnit.net 00:00:03.57] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateSingleLinkWithIndexAfterGapTest [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.6359048Z [xUnit.net 00:00:03.58] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateDuplicatePairWithNamedLinks_ShouldCreateOnlyOneSubLink [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.6365299Z [xUnit.net 00:00:03.58] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateNamedLinkWithAutoCreateMissingNamedReferences_ShouldCreatePointLinks [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.6368059Z [xUnit.net 00:00:03.59] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateMultipleLinksWithCrossReferences_ShouldSucceed [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.6370514Z [xUnit.net 00:00:03.57] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp4exmei.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.6371924Z [xUnit.net 00:00:03.57] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6373184Z [xUnit.net 00:00:03.57] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6375695Z [xUnit.net 00:00:03.57] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6379032Z [xUnit.net 00:00:03.57] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(46,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateSingleLinkWithIndexAfterGapTest() +Test (windows-latest) Run tests 2026-05-12T20:42:29.6380768Z [xUnit.net 00:00:03.57] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6381702Z [xUnit.net 00:00:03.57] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6382305Z [Test] All links: (1: 1->1) (2: 2->2) (3: 2->1) (4: 3->3) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6383353Z [xUnit.net 00:00:03.58] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp5xyvfw.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.6384660Z [xUnit.net 00:00:03.58] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6385358Z [xUnit.net 00:00:03.58] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6387835Z [xUnit.net 00:00:03.58] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6392976Z [xUnit.net 00:00:03.58] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1267,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateDuplicatePairWithNamedLinks_ShouldCreateOnlyOneSubLink() +Test (windows-latest) Run tests 2026-05-12T20:42:29.6395945Z [xUnit.net 00:00:03.58] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6408693Z [xUnit.net 00:00:03.58] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6411211Z [Test] All links: (1: 1->1) (2: 2->2) (3: 1->2) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6412808Z [xUnit.net 00:00:03.58] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpgpihhi.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.6418057Z [xUnit.net 00:00:03.58] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6418874Z [xUnit.net 00:00:03.58] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6422166Z [xUnit.net 00:00:03.58] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6426376Z [xUnit.net 00:00:03.58] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1772,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateNamedLinkWithAutoCreateMissingNamedReferences_ShouldCreatePointLinks() +Test (windows-latest) Run tests 2026-05-12T20:42:29.6429799Z [xUnit.net 00:00:03.58] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6431479Z [xUnit.net 00:00:03.58] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6432503Z [Test] All links: (1: 1->2) (2: 2->1) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6433954Z [xUnit.net 00:00:03.59] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpgi2kx4.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.6435343Z [xUnit.net 00:00:03.59] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6436853Z [xUnit.net 00:00:03.59] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MakeAllLinksToGoIntoFirstLinkUsingVariablesTest [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.6438739Z [xUnit.net 00:00:03.59] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6441207Z [xUnit.net 00:00:03.59] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6454956Z [xUnit.net 00:00:03.59] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1690,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateMultipleLinksWithCrossReferences_ShouldSucceed() +Test (windows-latest) Run tests 2026-05-12T20:42:29.6456722Z [xUnit.net 00:00:03.59] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6457657Z [xUnit.net 00:00:03.59] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6458231Z [Test] All links: (1: 2->1) (2: 1->1) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6458542Z [Test] ===== Starting UpdateNamedLinkNameTest ===== +Test (windows-latest) Run tests 2026-05-12T20:42:29.6459945Z [xUnit.net 00:00:03.59] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpjrevpc.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.6464376Z [xUnit.net 00:00:03.59] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6468253Z [xUnit.net 00:00:03.59] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6471829Z [xUnit.net 00:00:03.59] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6506641Z [xUnit.net 00:00:03.59] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(517,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MakeAllLinksToGoIntoFirstLinkUsingVariablesTest() +Test (windows-latest) Run tests 2026-05-12T20:42:29.6515165Z [xUnit.net 00:00:03.60] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6517422Z [xUnit.net 00:00:03.60] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6519309Z [Trace] Constructing NamedTypesDecorator with names DB: C:\Users\runneradmin\AppData\Local\Temp\tmp3e2f4z.names.links +Test (windows-latest) Run tests 2026-05-12T20:42:29.6529319Z [Test] Constants: Null=0, Any=4294967292, Continue=4294967295 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6530256Z [Test] Step 1: Creating initial link +Test (windows-latest) Run tests 2026-05-12T20:42:29.6531676Z [Test] Query: (() ((child: father mother))) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6532266Z [ProcessQuery] Query: "(() ((child: father mother)))" +Test (windows-latest) Run tests 2026-05-12T20:42:29.6533085Z [ProcessQuery] Parser returned 1 top-level link(s). +Test (windows-latest) Run tests 2026-05-12T20:42:29.6534241Z [ProcessQuery] Restriction link => Id="" Values.Count=0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6534949Z [ProcessQuery] Substitution link => Id="" Values.Count=1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6535791Z [ProcessQuery] No restriction, but substitution is non-empty => creation scenario. +Test (windows-latest) Run tests 2026-05-12T20:42:29.6536677Z [ValidateLinksExistOrWillBeCreated] Starting validation +Test (windows-latest) Run tests 2026-05-12T20:42:29.6537771Z [ValidateLinksExistOrWillBeCreated] Numeric links to be created: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6538667Z [ValidateLinksExistOrWillBeCreated] Named links to be created: child +Test (windows-latest) Run tests 2026-05-12T20:42:29.6539376Z [Trace] GetByName called for name: 'father' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6539858Z [Trace] GetByName result: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6540290Z [Trace] GetByName called for name: 'mother' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6540833Z [Trace] GetByName result: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6541264Z [Trace] GetByName called for name: 'father' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6542054Z [Trace] GetByName result: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6542925Z [ValidateLinksExistOrWillBeCreated] Auto-creating missing named reference 'father' as point link. +Test (windows-latest) Run tests 2026-05-12T20:42:29.6543843Z [Trace] GetByName called for name: 'father' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6544320Z [Trace] GetByName result: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6544746Z [Trace] Update called with restriction: [1] +Test (windows-latest) Run tests 2026-05-12T20:42:29.6545391Z [Trace] Debug: handlerWrapper invoked - before=1,0,0, after=1,0,0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6546028Z [Trace] Update result: 4294967295 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6546544Z [Trace] SetName called for link: 1 with name: 'father' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6547091Z [Trace] RemoveName called for link: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6547562Z [Trace] RemoveName completed for link: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6548023Z [Trace] SetName result: 108 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6548467Z [Trace] Update called with restriction: [1,0,0] +Test (windows-latest) Run tests 2026-05-12T20:42:29.6549126Z [Trace] Debug: handlerWrapper invoked - before=1,0,0, after=1,1,1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6549736Z [Trace] Update result: 4294967295 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6550182Z [Trace] GetByName called for name: 'mother' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6551401Z [Trace] GetByName result: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6552589Z [ValidateLinksExistOrWillBeCreated] Auto-creating missing named reference 'mother' as point link. +Test (windows-latest) Run tests 2026-05-12T20:42:29.6558380Z [Trace] GetByName called for name: 'mother' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6559077Z [Trace] GetByName result: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6559698Z [Trace] Update called with restriction: [2] +Test (windows-latest) Run tests 2026-05-12T20:42:29.6561976Z [Trace] Debug: handlerWrapper invoked - before=2,0,0, after=2,0,0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6562914Z [Trace] Update result: 4294967295 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6566269Z [Trace] SetName called for link: 2 with name: 'mother' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6567210Z [Trace] RemoveName called for link: 2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6568073Z [Trace] RemoveName completed for link: 2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6569062Z [Trace] SetName result: 110 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6570075Z [Trace] Update called with restriction: [2,0,0] +Test (windows-latest) Run tests 2026-05-12T20:42:29.6571300Z [Trace] Debug: handlerWrapper invoked - before=2,0,0, after=2,2,2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6572437Z [Trace] Update result: 4294967295 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6575637Z [ValidateLinksExistOrWillBeCreated] Validation completed +Test (windows-latest) Run tests 2026-05-12T20:42:29.6577504Z [Trace] GetByName called for name: 'father' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6580261Z [Trace] GetByName result: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6581806Z [EnsureNestedLinkCreatedRecursively] Found existing named leaf 'father' => ID=1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6583528Z [Trace] GetByName called for name: 'mother' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6584516Z [Trace] GetByName result: 2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6587316Z [EnsureNestedLinkCreatedRecursively] Found existing named leaf 'mother' => ID=2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6589275Z [EnsureLinkCreated] Creating link for (S=1, T=2). +Test (windows-latest) Run tests 2026-05-12T20:42:29.6590798Z [EnsureLinkCreated] => assigned new ID=3 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6591952Z [Trace] Update called with restriction: [3] +Test (windows-latest) Run tests 2026-05-12T20:42:29.6592634Z [Trace] Debug: handlerWrapper invoked - before=3,0,0, after=3,1,2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6596596Z [Trace] Update result: 4294967295 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6597614Z [EnsureNestedLinkCreatedRecursively] Created or ensured composite link => Index=0, Source=1, Target=2 => Actual ID=3 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6599056Z [Trace] SetName called for link: 3 with name: 'child' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6599613Z [Trace] RemoveName called for link: 3 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6600097Z [Trace] RemoveName completed for link: 3 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6600899Z [Trace] SetName result: 118 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6601963Z [ProcessQuery] Created link ID #3 from substitution pattern. +Test (windows-latest) Run tests 2026-05-12T20:42:29.6603041Z [Test] Initial link creation completed +Test (windows-latest) Run tests 2026-05-12T20:42:29.6608513Z [Test] Step 2: Verifying initial state +Test (windows-latest) Run tests 2026-05-12T20:42:29.6610720Z [Trace] GetByName called for name: 'child' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6611902Z [Trace] GetByName result: 3 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6613313Z [Test] Initial child ID: 3 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6614589Z [Trace] GetByName called for name: 'father' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6617593Z [Trace] GetByName result: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6618381Z [Test] Initial father ID: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6618843Z [Trace] GetByName called for name: 'mother' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6619313Z [Trace] GetByName result: 2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6619693Z [Test] Initial mother ID: 2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6620095Z [Test] Initial links count: 3 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6620625Z [Test] Initial link: Index=(1: 1->1), Source=1, Target=1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6621275Z [Test] Initial link: Index=(2: 2->2), Source=2, Target=2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6634216Z [Test] Initial link: Index=(3: 1->2), Source=1, Target=2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6638389Z [Test] Initial state verification completed +Test (windows-latest) Run tests 2026-05-12T20:42:29.6640087Z [Test] Step 3: Updating link name from 'child' to 'son' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6640832Z [Test] Query: (((child: father mother)) ((son: father mother))) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6641419Z [Test] Current state before update: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6641883Z [Trace] GetByName called for name: 'child' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6642346Z [Trace] GetByName result: 3 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6642752Z [Test] - child name exists: True +Test (windows-latest) Run tests 2026-05-12T20:42:29.6643193Z [Trace] GetByName called for name: 'son' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6643629Z [Trace] GetByName result: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6644017Z [Test] - son name exists: False +Test (windows-latest) Run tests 2026-05-12T20:42:29.6644465Z [Trace] GetByName called for name: 'father' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6644896Z [Trace] GetByName result: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6645392Z [Test] - father name exists: True +Test (windows-latest) Run tests 2026-05-12T20:42:29.6646261Z [Trace] GetByName called for name: 'mother' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6646773Z [Trace] GetByName result: 2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6647163Z [Test] - mother name exists: True +Test (windows-latest) Run tests 2026-05-12T20:42:29.6647627Z [Test] Starting ProcessQuery for update... +Test (windows-latest) Run tests 2026-05-12T20:42:29.6648097Z [Test] Current links before update: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6648608Z [Test] Link: Index=(1: 1->1), Source=1, Target=1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6649161Z [Test] Link: Index=(2: 2->2), Source=2, Target=2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6649694Z [Test] Link: Index=(3: 1->2), Source=1, Target=2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6650366Z [ProcessQuery] Query: "(((child: father mother)) ((son: father mother)))" +Test (windows-latest) Run tests 2026-05-12T20:42:29.6651501Z [ProcessQuery] Parser returned 1 top-level link(s). +Test (windows-latest) Run tests 2026-05-12T20:42:29.6652172Z [ProcessQuery] Restriction link => Id="" Values.Count=1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6653589Z [ProcessQuery] Substitution link => Id="" Values.Count=1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6654386Z [ProcessQuery] Restriction patterns to parse: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6654967Z [ProcessQuery] Substitution patterns to parse: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6655570Z [ValidateLinksExistOrWillBeCreated] Starting validation +Test (windows-latest) Run tests 2026-05-12T20:42:29.6656297Z [ValidateLinksExistOrWillBeCreated] Numeric links to be created: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6657095Z [ValidateLinksExistOrWillBeCreated] Named links to be created: son +Test (windows-latest) Run tests 2026-05-12T20:42:29.6659310Z [Trace] GetByName called for name: 'child' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6660203Z [Trace] GetByName result: 3 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6660946Z [ValidateReferencesInPattern] Named link 'child' reference validated in restriction pattern +Test (windows-latest) Run tests 2026-05-12T20:42:29.6661733Z [Trace] GetByName called for name: 'father' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6662077Z [Trace] GetByName result: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6662520Z [ValidateReferencesInPattern] Named link 'father' reference validated in restriction pattern +Test (windows-latest) Run tests 2026-05-12T20:42:29.6662990Z [Trace] GetByName called for name: 'mother' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6663261Z [Trace] GetByName result: 2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6663690Z [ValidateReferencesInPattern] Named link 'mother' reference validated in restriction pattern +Test (windows-latest) Run tests 2026-05-12T20:42:29.6664152Z [Trace] GetByName called for name: 'father' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6664411Z [Trace] GetByName result: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6664836Z [ValidateReferencesInPattern] Named link 'father' reference validated in substitution pattern +Test (windows-latest) Run tests 2026-05-12T20:42:29.6665295Z [Trace] GetByName called for name: 'mother' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6665632Z [Trace] GetByName result: 2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6666186Z [ValidateReferencesInPattern] Named link 'mother' reference validated in substitution pattern +Test (windows-latest) Run tests 2026-05-12T20:42:29.6666933Z [ValidateLinksExistOrWillBeCreated] Validation completed +Test (windows-latest) Run tests 2026-05-12T20:42:29.6667521Z [ProcessQuery] Detected single sub-link with 2 sub-values => replaced with one composite restriction pattern. +Test (windows-latest) Run tests 2026-05-12T20:42:29.6668070Z [ProcessQuery] Converting restriction patterns => done. +Test (windows-latest) Run tests 2026-05-12T20:42:29.6668448Z [ProcessQuery] Converting substitution patterns => done. +Test (windows-latest) Run tests 2026-05-12T20:42:29.6668841Z [ProcessQuery] Finding solutions for restriction patterns... +Test (windows-latest) Run tests 2026-05-12T20:42:29.6669183Z [Trace] GetByName called for name: 'child' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6669450Z [Trace] GetByName result: 3 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6669688Z [Trace] GetByName called for name: 'father' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6669950Z [Trace] GetByName result: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6670181Z [Trace] GetByName called for name: 'mother' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6670440Z [Trace] GetByName result: 2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6670772Z [ProcessQuery] Found 1 total solution(s) matching restriction patterns. +Test (windows-latest) Run tests 2026-05-12T20:42:29.6671155Z [Trace] GetByName called for name: 'child' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6671409Z [Trace] GetByName result: 3 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6671636Z [Trace] GetByName called for name: 'father' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6671893Z [Trace] GetByName result: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6672115Z [Trace] GetByName called for name: 'mother' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6672373Z [Trace] GetByName result: 2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6672596Z [Trace] GetByName called for name: 'son' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6673334Z [Trace] GetByName result: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6673576Z [Trace] GetByName called for name: 'father' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6673838Z [Trace] GetByName result: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6674073Z [Trace] GetByName called for name: 'mother' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6674320Z [Trace] GetByName result: 2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6674571Z [ProcessQuery] allSolutionsNoOperation=False +Test (windows-latest) Run tests 2026-05-12T20:42:29.6675055Z [ProcessQuery] Some solutions lead to actual changes => building operations. +Test (windows-latest) Run tests 2026-05-12T20:42:29.6676931Z [Trace] GetByName called for name: 'son' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6677485Z [Trace] GetByName result: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6678304Z [Trace] GetByName called for name: 'father' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6678780Z [Trace] GetByName result: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6679212Z [Trace] GetByName called for name: 'mother' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6679671Z [Trace] GetByName result: 2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6680091Z [Trace] GetByName called for name: 'child' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6680536Z [Trace] GetByName result: 3 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6680950Z [Trace] GetByName called for name: 'father' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6681709Z [Trace] GetByName result: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6682166Z [Trace] GetByName called for name: 'mother' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6682643Z [Trace] GetByName result: 2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6683334Z [ProcessQuery] For a solution => substitution links count=1, restriction links count=1. +Test (windows-latest) Run tests 2026-05-12T20:42:29.6684231Z [ProcessQuery] => 2 operation(s) derived from these patterns. +Test (windows-latest) Run tests 2026-05-12T20:42:29.6684832Z [ProcessQuery] All planned operations => 2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6685377Z [ProcessQuery] Applying all planned operations... +Test (windows-latest) Run tests 2026-05-12T20:42:29.6686148Z [ApplyAllPlannedOperations] Operation: before=(3:1->2), after=(0:0->0) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6686828Z [Trace] GetName called for link: 3 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6687267Z [Trace] GetName result: child +Test (windows-latest) Run tests 2026-05-12T20:42:29.6688380Z [ApplyAllPlannedOperations] Name for before.Index 3 = 'child' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6689534Z [ApplyAllPlannedOperations] Deleting link => ID=3, S=1, T=2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6690260Z [RemoveLinks] Found 1 link(s) matching (ID=3, S=1, T=2). +Test (windows-latest) Run tests 2026-05-12T20:42:29.6690813Z [Trace] RemoveName called for link: 3 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6691301Z [Trace] RemoveName completed for link: 3 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6691763Z [RemoveLinks] Deleting link => ID=3, S=1, T=2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6692251Z [Trace] Delete called with restriction: [3,1,2] +Test (windows-latest) Run tests 2026-05-12T20:42:29.6693205Z [Trace] Debug: this._links is of type: Foundation.Data.Doublets.Cli.PinnedTypesDecorator`1[System.UInt32] +Test (windows-latest) Run tests 2026-05-12T20:42:29.6694455Z [Trace] Debug: Calling underlying _links.Delete +Test (windows-latest) Run tests 2026-05-12T20:42:29.6695116Z [Trace] Debug: handlerWrapper invoked - before=3,1,2, after=3,0,0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6698023Z [Test] Update ChangesHandler called: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6699553Z [Test] - Before state: (3: 1->2) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6705138Z [Test] - After state: (3: 0->0) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6707361Z [Trace] GetByName called for name: 'child' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6707859Z [Trace] GetByName result: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6708307Z [Test] - child name during change: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6708782Z [Trace] GetByName called for name: 'son' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6709236Z [Trace] GetByName result: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6709636Z [Test] - son name during change: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6710103Z [Trace] GetByName called for name: 'father' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6710568Z [Trace] GetByName result: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6710965Z [Test] - father name during change: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6711435Z [Trace] GetByName called for name: 'mother' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6711883Z [Trace] GetByName result: 2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6712270Z [Test] - mother name during change: 2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6712697Z [Test] - All links during change: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6713189Z [Test] Link: Index=(1: 1->1), Source=1, Target=1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6713739Z [Test] Link: Index=(2: 2->2), Source=2, Target=2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6714273Z [Test] Link: Index=(3: 0->0), Source=0, Target=0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6714940Z [Trace] Debug: handlerWrapper invoked - before=3,0,0, after=null +Test (windows-latest) Run tests 2026-05-12T20:42:29.6715809Z [Trace] RemoveName called for link: 3 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6716962Z [Trace] RemoveName completed for link: 3 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6717471Z [Test] Update ChangesHandler called: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6720794Z [Test] - Before state: (3: 0->0) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6721548Z [Test] - After state: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6721971Z [Trace] GetByName called for name: 'child' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6722393Z [Trace] GetByName result: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6722758Z [Test] - child name during change: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6723176Z [Trace] GetByName called for name: 'son' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6723574Z [Trace] GetByName result: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6723931Z [Test] - son name during change: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6724346Z [Trace] GetByName called for name: 'father' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6724752Z [Trace] GetByName result: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6725137Z [Test] - father name during change: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6725573Z [Trace] GetByName called for name: 'mother' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6726003Z [Trace] GetByName result: 2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6726351Z [Test] - mother name during change: 2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6726748Z [Test] - All links during change: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6727204Z [Test] Link: Index=(1: 1->1), Source=1, Target=1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6727727Z [Test] Link: Index=(2: 2->2), Source=2, Target=2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6728202Z [Trace] Debug: Delete result: 4294967295 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6728879Z [ApplyAllPlannedOperations] Operation: before=(0:0->0), after=(4294967292:1->2) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6729607Z [Trace] GetName called for link: 4294967292 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6730061Z [Trace] GetName result: String +Test (windows-latest) Run tests 2026-05-12T20:42:29.6730739Z [ApplyAllPlannedOperations] Name for after.Index 4294967292 = 'String' (pre-op) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6731619Z [ApplyAllPlannedOperations] Creating link => ID=4294967292, S=1, T=2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6732458Z [CreateOrUpdateLink] Detected wildcard substitution => nested create & name. +Test (windows-latest) Run tests 2026-05-12T20:42:29.6733152Z [Trace] GetByName called for name: 'father' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6733605Z [Trace] GetByName result: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6734268Z [EnsureNestedLinkCreatedRecursively] Found existing named leaf 'father' => ID=1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6735006Z [Trace] GetByName called for name: 'mother' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6735460Z [Trace] GetByName result: 2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6736630Z [xUnit.net 00:00:03.62] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.UpdateNamedLinkNameTest [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.6738748Z [xUnit.net 00:00:03.62] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Create6LevelNestedLinksTest [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.6740214Z [EnsureNestedLinkCreatedRecursively] Found existing named leaf 'mother' => ID=2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6740977Z [EnsureLinkCreated] Creating link for (S=1, T=2). +Test (windows-latest) Run tests 2026-05-12T20:42:29.6741765Z [EnsureLinkCreated] => assigned new ID=3 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6742208Z [Test] Update ChangesHandler called: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6742627Z [Test] - Before state: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6742987Z [Test] - After state: (3: 0->0) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6743383Z [Trace] GetByName called for name: 'child' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6743800Z [Trace] GetByName result: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6744180Z [Test] - child name during change: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6744628Z [Trace] GetByName called for name: 'son' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6745064Z [Trace] GetByName result: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6745456Z [Test] - son name during change: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6745885Z [Trace] GetByName called for name: 'father' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6746342Z [Trace] GetByName result: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6746732Z [Test] - father name during change: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6747196Z [Trace] GetByName called for name: 'mother' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6747623Z [Trace] GetByName result: 2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6747986Z [Test] - mother name during change: 2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6748419Z [Test] - All links during change: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6748882Z [Test] Link: Index=(1: 1->1), Source=1, Target=1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6749599Z [Test] Link: Index=(2: 2->2), Source=2, Target=2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6750091Z [Test] Link: Index=(3: 0->0), Source=0, Target=0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6750638Z [Test] Creating new link: Index=3, Source=0, Target=0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6751695Z [Test] Checking if link exists: True +Test (windows-latest) Run tests 2026-05-12T20:42:29.6752098Z [Test] Checking if source exists: False +Test (windows-latest) Run tests 2026-05-12T20:42:29.6752515Z [Test] Checking if target exists: False +Test (windows-latest) Run tests 2026-05-12T20:42:29.6752901Z [Test] Names before creation: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6753296Z [Trace] GetByName called for name: 'child' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6753709Z [Trace] GetByName result: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6754010Z [Test] - child: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6754544Z [Trace] GetByName called for name: 'son' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6755032Z [Trace] GetByName result: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6755378Z [Test] - son: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6755859Z [Trace] GetByName called for name: 'father' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6756327Z [Trace] GetByName result: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6756719Z [Test] - father: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6757098Z [Trace] GetByName called for name: 'mother' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6757562Z [Trace] GetByName result: 2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6757929Z [Test] - mother: 2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6758287Z [Trace] Update called with restriction: [3] +Test (windows-latest) Run tests 2026-05-12T20:42:29.6758908Z [Trace] Debug: handlerWrapper invoked - before=3,0,0, after=3,1,2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6759498Z [Test] Update ChangesHandler called: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6759942Z [Test] - Before state: (3: 0->0) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6760377Z [Test] - After state: (3: 1->2) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6760799Z [Trace] GetByName called for name: 'child' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6761257Z [Trace] GetByName result: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6763610Z [Test] - child name during change: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6764156Z [Trace] GetByName called for name: 'son' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6765573Z [Trace] GetByName result: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6767007Z [Test] - son name during change: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6768425Z [Trace] GetByName called for name: 'father' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6770461Z [Trace] GetByName result: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6771193Z [Test] - father name during change: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6787116Z [Trace] GetByName called for name: 'mother' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6787586Z [Trace] GetByName result: 2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6787962Z [Test] - mother name during change: 2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6788390Z [Test] - All links during change: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6788850Z [Test] Link: Index=(1: 1->1), Source=1, Target=1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6789384Z [Test] Link: Index=(2: 2->2), Source=2, Target=2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6790136Z [Test] Link: Index=(3: 1->2), Source=1, Target=2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6790587Z [Trace] Update result: 4294967295 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6791854Z [EnsureNestedLinkCreatedRecursively] Created or ensured composite link => Index=0, Source=1, Target=2 => Actual ID=3 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6793328Z [Trace] SetName called for link: 3 with name: 'son' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6793824Z [Trace] RemoveName called for link: 3 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6794255Z [Trace] RemoveName completed for link: 3 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6794676Z [Trace] SetName result: 118 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6795089Z [Trace] GetName called for link: 4294967292 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6795548Z [Trace] GetName result: String +Test (windows-latest) Run tests 2026-05-12T20:42:29.6796223Z [ApplyAllPlannedOperations] Name for after.Index 4294967292 = 'String' (post-op) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6797369Z [ProcessQuery] Restoring unexpected deletions if any... +Test (windows-latest) Run tests 2026-05-12T20:42:29.6798360Z [RestoreUnexpectedLinkDeletions] No unexpected deletions found. +Test (windows-latest) Run tests 2026-05-12T20:42:29.6801890Z [ProcessQuery] Finished processing query. +Test (windows-latest) Run tests 2026-05-12T20:42:29.6802424Z [Test] Update operation completed +Test (windows-latest) Run tests 2026-05-12T20:42:29.6802860Z [Test] Step 4: Verifying final state +Test (windows-latest) Run tests 2026-05-12T20:42:29.6803303Z [Trace] GetByName called for name: 'child' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6803733Z [Trace] GetByName result: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6804076Z [Test] Final child ID: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6804446Z [Trace] GetByName called for name: 'son' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6805111Z [Trace] GetByName result: 3 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6805532Z [Test] Final son ID: 3 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6805896Z [Trace] GetByName called for name: 'father' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6806296Z [Trace] GetByName result: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6806619Z [Test] Final father ID: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6814409Z [Trace] GetByName called for name: 'mother' +Test (windows-latest) Run tests 2026-05-12T20:42:29.6814969Z [Trace] GetByName result: 2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6815348Z [Test] Final mother ID: 2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6815724Z [Test] Final links count: 3 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6816210Z [Test] Final link: Index=(1: 1->1), Source=1, Target=1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6816832Z [Test] Final link: Index=(2: 2->2), Source=2, Target=2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6817414Z [Test] Final link: Index=(3: 1->2), Source=1, Target=2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6818538Z [Test] ===== UpdateNamedLinkNameTest completed successfully ===== +Test (windows-latest) Run tests 2026-05-12T20:42:29.6820166Z [xUnit.net 00:00:03.62] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp3e2f4z.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.6821548Z [xUnit.net 00:00:03.62] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6822210Z [xUnit.net 00:00:03.62] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6824617Z [xUnit.net 00:00:03.62] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6828255Z [xUnit.net 00:00:03.62] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(930,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.UpdateNamedLinkNameTest() +Test (windows-latest) Run tests 2026-05-12T20:42:29.6830736Z [xUnit.net 00:00:03.62] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6832414Z [xUnit.net 00:00:03.62] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6833800Z [Test] All links: (1: 1->1) (2: 2->2) (3: 3->3) (4: 4->4) (5: 5->5) (6: 6->6) (7: 5->6) (8: 4->7) (9: 3->8) (10: 2->9) (11: 1->10) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6835445Z [xUnit.net 00:00:03.62] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpfta4j2.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.6838637Z [xUnit.net 00:00:03.62] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6839357Z [xUnit.net 00:00:03.62] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6845832Z [xUnit.net 00:00:03.62] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6850047Z [xUnit.net 00:00:03.62] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(205,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Create6LevelNestedLinksTest() +Test (windows-latest) Run tests 2026-05-12T20:42:29.6852706Z [xUnit.net 00:00:03.62] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6854430Z [xUnit.net 00:00:03.62] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6872184Z [xUnit.net 00:00:03.63] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateRightCompositeStringChildrenWithoutExtraLeaf_ShouldSucceed [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.6881765Z [Test] All links: (1: 1->1) (2: 1->2) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6884615Z [xUnit.net 00:00:03.64] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithAutoCreateMissingNumericReferences_ShouldCreatePointLinks [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.6893415Z [xUnit.net 00:00:03.63] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp0vvjdh.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.6895406Z [xUnit.net 00:00:03.63] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6899437Z [xUnit.net 00:00:03.63] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6902256Z [xUnit.net 00:00:03.63] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6906749Z [xUnit.net 00:00:03.63] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1241,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateRightCompositeStringChildrenWithoutExtraLeaf_ShouldSucceed() +Test (windows-latest) Run tests 2026-05-12T20:42:29.6911768Z [xUnit.net 00:00:03.63] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6913621Z [xUnit.net 00:00:03.63] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6914580Z [Test] All links: (10: 10->10) (20: 10->20) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6916247Z [xUnit.net 00:00:03.64] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpskgdoo.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.6917586Z [xUnit.net 00:00:03.64] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6918232Z [xUnit.net 00:00:03.64] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6920471Z [xUnit.net 00:00:03.64] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6924269Z [xUnit.net 00:00:03.64] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1758,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithAutoCreateMissingNumericReferences_ShouldCreatePointLinks() +Test (windows-latest) Run tests 2026-05-12T20:42:29.6927064Z [xUnit.net 00:00:03.64] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6929858Z [xUnit.net 00:00:03.64] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6932096Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateSingleLinkWithIndexAfterGapTest [5 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.6933576Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6934713Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp4exmei.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.6936335Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6936757Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6939037Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6941496Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateSingleLinkWithIndexAfterGapTest() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 46 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6942748Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6943970Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6944940Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateDuplicatePairWithNamedLinks_ShouldCreateOnlyOneSubLink [7 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.6945671Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6946282Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp5xyvfw.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.6946958Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6947217Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6948290Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6950153Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateDuplicatePairWithNamedLinks_ShouldCreateOnlyOneSubLink() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1267 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6951508Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6952223Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6953224Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateNamedLinkWithAutoCreateMissingNamedReferences_ShouldCreatePointLinks [5 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.6954012Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6954886Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpgpihhi.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.6956045Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6956458Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6958402Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6963360Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateNamedLinkWithAutoCreateMissingNamedReferences_ShouldCreatePointLinks() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1772 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6977402Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6979043Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6981130Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateMultipleLinksWithCrossReferences_ShouldSucceed [4 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.6982367Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6983455Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpgi2kx4.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.6984495Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.6984864Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6986818Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6990803Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateMultipleLinksWithCrossReferences_ShouldSucceed() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1690 +Test (windows-latest) Run tests 2026-05-12T20:42:29.6993861Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6995520Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.6997818Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MakeAllLinksToGoIntoFirstLinkUsingVariablesTest [5 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.6999031Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7000106Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpjrevpc.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.7001243Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7001647Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7003555Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.7006896Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MakeAllLinksToGoIntoFirstLinkUsingVariablesTest() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 517 +Test (windows-latest) Run tests 2026-05-12T20:42:29.7009392Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7010678Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7012137Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.UpdateNamedLinkNameTest [22 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.7013174Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7014277Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp3e2f4z.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.7015791Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7016202Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7018159Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.7021792Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.UpdateNamedLinkNameTest() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 930 +Test (windows-latest) Run tests 2026-05-12T20:42:29.7024260Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7027817Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7032718Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Create6LevelNestedLinksTest [6 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.7036986Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7039729Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpfta4j2.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.7040974Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7041405Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7043402Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.7047595Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Create6LevelNestedLinksTest() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 205 +Test (windows-latest) Run tests 2026-05-12T20:42:29.7049821Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7051179Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7056166Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateRightCompositeStringChildrenWithoutExtraLeaf_ShouldSucceed [6 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.7057627Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7058714Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp0vvjdh.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.7059911Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7060329Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7062205Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.7065780Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateRightCompositeStringChildrenWithoutExtraLeaf_ShouldSucceed() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1241 +Test (windows-latest) Run tests 2026-05-12T20:42:29.7068390Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7069725Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7071594Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithAutoCreateMissingNumericReferences_ShouldCreatePointLinks [6 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.7074001Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7074917Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpskgdoo.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.7075605Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7075846Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7077459Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.7091662Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithAutoCreateMissingNumericReferences_ShouldCreatePointLinks() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1758 +Test (windows-latest) Run tests 2026-05-12T20:42:29.7095014Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7096314Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7097942Z [xUnit.net 00:00:03.65] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateMultipleLinksTest [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.7100224Z [xUnit.net 00:00:03.66] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateMixedNamedAndNumericLinks_ShouldReuseExistingLinks [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.7103964Z [xUnit.net 00:00:03.66] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MatchSelfReferencingAndMakeThemGoOutFromFirstLinkUsingVariablesTest [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.7105327Z [Test] All links: (1: 1->1) (2: 2->2) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7106182Z [xUnit.net 00:00:03.65] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp1utv4x.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.7106981Z [xUnit.net 00:00:03.65] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7107375Z [xUnit.net 00:00:03.65] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7108691Z [xUnit.net 00:00:03.65] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7110758Z [xUnit.net 00:00:03.65] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(93,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateMultipleLinksTest() +Test (windows-latest) Run tests 2026-05-12T20:42:29.7112094Z [xUnit.net 00:00:03.65] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7112996Z [xUnit.net 00:00:03.65] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7113584Z [Test] All links: (1: 1->1) (2: 2->2) (3: 2->1) (4: 3->3) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7114879Z [xUnit.net 00:00:03.66] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpomgs5l.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.7115682Z [xUnit.net 00:00:03.66] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7116066Z [xUnit.net 00:00:03.66] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7117360Z [xUnit.net 00:00:03.66] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7119420Z [xUnit.net 00:00:03.66] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1367,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateMixedNamedAndNumericLinks_ShouldReuseExistingLinks() +Test (windows-latest) Run tests 2026-05-12T20:42:29.7120938Z [xUnit.net 00:00:03.66] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7121832Z [xUnit.net 00:00:03.66] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7122420Z [Test] All links: (1: 1->1) (2: 1->2) (3: 3->1) (4: 1->4) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7123269Z [xUnit.net 00:00:03.66] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpzcpiao.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.7124020Z [xUnit.net 00:00:03.66] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7124397Z [xUnit.net 00:00:03.66] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7126532Z [xUnit.net 00:00:03.66] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7130859Z [xUnit.net 00:00:03.66] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(555,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MatchSelfReferencingAndMakeThemGoOutFromFirstLinkUsingVariablesTest() +Test (windows-latest) Run tests 2026-05-12T20:42:29.7135400Z [xUnit.net 00:00:03.66] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7139502Z [xUnit.net 00:00:03.66] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7149195Z [xUnit.net 00:00:03.67] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateRightCompositeIntegerChildrenWithoutExtraLeaf_ShouldSucceed [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.7150899Z [Test] All links: (1: 1->1) (2: 1->2) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7155176Z [xUnit.net 00:00:03.67] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpdgabcp.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.7157003Z [xUnit.net 00:00:03.67] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7158132Z [xUnit.net 00:00:03.67] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7161204Z [xUnit.net 00:00:03.67] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7165394Z [xUnit.net 00:00:03.67] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1204,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateRightCompositeIntegerChildrenWithoutExtraLeaf_ShouldSucceed() +Test (windows-latest) Run tests 2026-05-12T20:42:29.7168949Z [xUnit.net 00:00:03.67] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7170652Z [xUnit.net 00:00:03.67] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7193798Z [xUnit.net 00:00:03.67] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.EnsureCreated_WithSpecialAnyReference_ShouldThrowControlledException [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.7199549Z [xUnit.net 00:00:03.67] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp4oe1cg.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.7201976Z [xUnit.net 00:00:03.67] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7203000Z [xUnit.net 00:00:03.67] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7206454Z [xUnit.net 00:00:03.67] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7210774Z [xUnit.net 00:00:03.67] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1569,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.EnsureCreated_WithSpecialAnyReference_ShouldThrowControlledException() +Test (windows-latest) Run tests 2026-05-12T20:42:29.7214236Z [xUnit.net 00:00:03.67] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7216109Z [xUnit.net 00:00:03.67] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7231707Z [Test] All links: (1: 1->1) (2: 2->2) (3: 3->3) (4: 4->4) (5: 5->5) (6: 4->5) (7: 3->6) (8: 2->7) (9: 1->8) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7241110Z [xUnit.net 00:00:03.68] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Create5LevelNestedLinksTest [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.7246180Z [xUnit.net 00:00:03.68] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpblz24y.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.7248609Z [xUnit.net 00:00:03.68] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7249449Z [xUnit.net 00:00:03.68] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7252007Z [xUnit.net 00:00:03.68] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7256574Z [xUnit.net 00:00:03.68] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(166,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Create5LevelNestedLinksTest() +Test (windows-latest) Run tests 2026-05-12T20:42:29.7259845Z [xUnit.net 00:00:03.68] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7261881Z [xUnit.net 00:00:03.68] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7286582Z [Test] All links: (1: 1->1) (2: 2->2) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7301736Z [xUnit.net 00:00:03.68] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MatchWithExactIndexAndDelete2LevelNestedLinksTest [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.7304655Z [xUnit.net 00:00:03.68] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmprndlgy.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.7306530Z [xUnit.net 00:00:03.68] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7307428Z [xUnit.net 00:00:03.68] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7310795Z [xUnit.net 00:00:03.68] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7317565Z [xUnit.net 00:00:03.68] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(336,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MatchWithExactIndexAndDelete2LevelNestedLinksTest() +Test (windows-latest) Run tests 2026-05-12T20:42:29.7320781Z [xUnit.net 00:00:03.68] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7322479Z [xUnit.net 00:00:03.68] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7338540Z [Test] All links: (1: 1->2) (2: 2->2) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7348095Z [xUnit.net 00:00:03.69] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.UpdateSingleLinkTest [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.7355478Z [xUnit.net 00:00:03.69] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp2lfdgf.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.7357360Z [xUnit.net 00:00:03.69] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7358198Z [xUnit.net 00:00:03.69] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7364373Z [xUnit.net 00:00:03.69] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7368398Z [xUnit.net 00:00:03.69] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(297,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.UpdateSingleLinkTest() +Test (windows-latest) Run tests 2026-05-12T20:42:29.7371788Z [xUnit.net 00:00:03.69] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7373394Z [xUnit.net 00:00:03.69] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7393721Z [Test] All links: (1: 1->2) (2: 2->1) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7405350Z [xUnit.net 00:00:03.69] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MixedMultipleUpdatesTest [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.7409290Z [xUnit.net 00:00:03.69] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp2gt55d.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.7411842Z [xUnit.net 00:00:03.69] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7412944Z [xUnit.net 00:00:03.69] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7415710Z [xUnit.net 00:00:03.69] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7419951Z [xUnit.net 00:00:03.69] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(595,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MixedMultipleUpdatesTest() +Test (windows-latest) Run tests 2026-05-12T20:42:29.7423750Z [xUnit.net 00:00:03.69] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7425746Z [xUnit.net 00:00:03.70] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7452720Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateMultipleLinksTest [11 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.7454500Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7455650Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp1utv4x.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.7456896Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7457295Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7459636Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.7466261Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateMultipleLinksTest() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 93 +Test (windows-latest) Run tests 2026-05-12T20:42:29.7468581Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7473098Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7475752Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateMixedNamedAndNumericLinks_ShouldReuseExistingLinks [5 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.7477134Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7478256Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpomgs5l.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.7479473Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7480155Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7483785Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.7487987Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateMixedNamedAndNumericLinks_ShouldReuseExistingLinks() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1367 +Test (windows-latest) Run tests 2026-05-12T20:42:29.7491390Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7492722Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7494680Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MatchSelfReferencingAndMakeThemGoOutFromFirstLinkUsingVariablesTest [5 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.7496241Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7497335Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpzcpiao.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.7498528Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7498923Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7500871Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.7504836Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MatchSelfReferencingAndMakeThemGoOutFromFirstLinkUsingVariablesTest() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 555 +Test (windows-latest) Run tests 2026-05-12T20:42:29.7507536Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7508866Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7511059Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateRightCompositeIntegerChildrenWithoutExtraLeaf_ShouldSucceed [5 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.7512529Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7513595Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpdgabcp.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.7514781Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7515171Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7517118Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.7520691Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateRightCompositeIntegerChildrenWithoutExtraLeaf_ShouldSucceed() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1204 +Test (windows-latest) Run tests 2026-05-12T20:42:29.7523265Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7524962Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7525967Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.EnsureCreated_WithSpecialAnyReference_ShouldThrowControlledException [4 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.7526865Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7527984Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp4oe1cg.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.7529420Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7529803Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7532319Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.7542736Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.EnsureCreated_WithSpecialAnyReference_ShouldThrowControlledException() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1569 +Test (windows-latest) Run tests 2026-05-12T20:42:29.7549105Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7551492Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7553368Z [xUnit.net 00:00:03.70] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.NestedDeleteAllLinksBySourceAndTargetTest1 [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.7555757Z [xUnit.net 00:00:03.71] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateWithDifferentPairs_ShouldNotDeduplicateDifferentLinks [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.7557512Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Create5LevelNestedLinksTest [4 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.7558761Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7559827Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpblz24y.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.7560973Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7561358Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7563340Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.7566527Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Create5LevelNestedLinksTest() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 166 +Test (windows-latest) Run tests 2026-05-12T20:42:29.7571199Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7572540Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7574221Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MatchWithExactIndexAndDelete2LevelNestedLinksTest [5 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.7575533Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7576607Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmprndlgy.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.7577787Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7578182Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7580185Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.7583590Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MatchWithExactIndexAndDelete2LevelNestedLinksTest() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 336 +Test (windows-latest) Run tests 2026-05-12T20:42:29.7586107Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7587360Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7588573Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.UpdateSingleLinkTest [4 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.7589674Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7590940Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp2lfdgf.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.7592011Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7592361Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7594324Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.7597417Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.UpdateSingleLinkTest() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 297 +Test (windows-latest) Run tests 2026-05-12T20:42:29.7599567Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7601753Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7603284Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MixedMultipleUpdatesTest [5 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.7604364Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7605465Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp2gt55d.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.7606902Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7607307Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7609278Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.7612879Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MixedMultipleUpdatesTest() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 595 +Test (windows-latest) Run tests 2026-05-12T20:42:29.7615079Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7616378Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7617210Z [Test] All links: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7618630Z [xUnit.net 00:00:03.70] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp2ffdxk.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.7620004Z [xUnit.net 00:00:03.70] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7620693Z [xUnit.net 00:00:03.70] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7623139Z [xUnit.net 00:00:03.70] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7625826Z [xUnit.net 00:00:03.70] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(776,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.NestedDeleteAllLinksBySourceAndTargetTest1() +Test (windows-latest) Run tests 2026-05-12T20:42:29.7627316Z [xUnit.net 00:00:03.70] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7628219Z [xUnit.net 00:00:03.70] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7628853Z [Test] All links: (1: 1->1) (2: 2->2) (3: 1->2) (4: 2->1) (5: 3->4) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7630513Z [xUnit.net 00:00:03.71] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpdxwsgr.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.7631514Z [xUnit.net 00:00:03.71] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7631911Z [xUnit.net 00:00:03.71] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7633231Z [xUnit.net 00:00:03.71] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7635311Z [xUnit.net 00:00:03.71] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1396,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateWithDifferentPairs_ShouldNotDeduplicateDifferentLinks() +Test (windows-latest) Run tests 2026-05-12T20:42:29.7638342Z [xUnit.net 00:00:03.71] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7640119Z [xUnit.net 00:00:03.71] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7641166Z [Test] All links: (1: 1->1) (2: 2->1) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7652392Z [xUnit.net 00:00:03.72] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLeftCompositeStringChildrenWithoutExtraLeaf_ShouldSucceed [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.7657992Z [xUnit.net 00:00:03.72] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpla0uva.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.7659626Z [xUnit.net 00:00:03.72] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7660422Z [xUnit.net 00:00:03.72] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7663709Z [xUnit.net 00:00:03.72] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7667794Z [xUnit.net 00:00:03.72] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1221,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLeftCompositeStringChildrenWithoutExtraLeaf_ShouldSucceed() +Test (windows-latest) Run tests 2026-05-12T20:42:29.7671085Z [xUnit.net 00:00:03.72] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7672892Z [xUnit.net 00:00:03.72] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7691044Z [Test] All links: (1: 1->1) (2: 2->2) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7706064Z [xUnit.net 00:00:03.72] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.NoExactMatch2LevelNestedLinksTest [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.7708422Z [xUnit.net 00:00:03.72] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpuddsjc.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.7710529Z [xUnit.net 00:00:03.72] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7711379Z [xUnit.net 00:00:03.72] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7714905Z [xUnit.net 00:00:03.72] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7718811Z [xUnit.net 00:00:03.72] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(374,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.NoExactMatch2LevelNestedLinksTest() +Test (windows-latest) Run tests 2026-05-12T20:42:29.7721863Z [xUnit.net 00:00:03.72] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7724238Z [xUnit.net 00:00:03.72] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7739620Z [Test] All links: (1: 1->2) (2: 1->1) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7754542Z [xUnit.net 00:00:03.73] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MakeAllLinksToGoOutOfFirstLinkUsingVariablesTest [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.7757108Z [xUnit.net 00:00:03.73] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmptokpb3.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.7758882Z [xUnit.net 00:00:03.73] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7759762Z [xUnit.net 00:00:03.73] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7763290Z [xUnit.net 00:00:03.73] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7767430Z [xUnit.net 00:00:03.73] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(498,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MakeAllLinksToGoOutOfFirstLinkUsingVariablesTest() +Test (windows-latest) Run tests 2026-05-12T20:42:29.7772645Z [xUnit.net 00:00:03.73] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7774342Z [xUnit.net 00:00:03.73] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7785845Z [Test] All links: (3: 3->3) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7798490Z [xUnit.net 00:00:03.73] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateSingleLinkWithIndexAfterDoubleGapTest [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.7802436Z [xUnit.net 00:00:03.73] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmphtdv01.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.7805123Z [xUnit.net 00:00:03.73] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7823224Z [xUnit.net 00:00:03.73] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7825881Z [xUnit.net 00:00:03.73] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7836150Z [xUnit.net 00:00:03.73] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(61,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateSingleLinkWithIndexAfterDoubleGapTest() +Test (windows-latest) Run tests 2026-05-12T20:42:29.7839362Z [xUnit.net 00:00:03.73] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7841368Z [xUnit.net 00:00:03.73] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7871314Z [Test] All links: (1: 1->1) (2: 18->20) (18: 1->21) (19: 1->20) (20: 20->20) (21: 21->21) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7896404Z [xUnit.net 00:00:03.74] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Issue20_SubstituteMatchedLinkAndOutgoingLink_ShouldPreserveExistingParts [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.7898956Z [xUnit.net 00:00:03.74] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmppi31qs.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.7908788Z [xUnit.net 00:00:03.74] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7910218Z [xUnit.net 00:00:03.74] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7912980Z [xUnit.net 00:00:03.74] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7919153Z [xUnit.net 00:00:03.74] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1529,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Issue20_SubstituteMatchedLinkAndOutgoingLink_ShouldPreserveExistingParts() +Test (windows-latest) Run tests 2026-05-12T20:42:29.7922264Z [xUnit.net 00:00:03.74] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7924124Z [xUnit.net 00:00:03.74] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7952441Z [xUnit.net 00:00:03.75] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteNamedFamilyLinksRemovesNamesTest [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.7955364Z [xUnit.net 00:00:03.75] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpk11dog.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.7965247Z [xUnit.net 00:00:03.75] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.7966309Z [xUnit.net 00:00:03.75] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7968856Z [xUnit.net 00:00:03.75] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7972769Z [xUnit.net 00:00:03.75] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1081,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteNamedFamilyLinksRemovesNamesTest() +Test (windows-latest) Run tests 2026-05-12T20:42:29.7975633Z [xUnit.net 00:00:03.75] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7977428Z [xUnit.net 00:00:03.75] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.7999529Z [Test] All links: (1: 1->1) (2: 2->2) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8028641Z [xUnit.net 00:00:03.75] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.ExactMatchAndDelete2LevelNestedLinksTest [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.8031073Z [xUnit.net 00:00:03.75] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpoptkys.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.8038209Z [xUnit.net 00:00:03.76] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8049877Z [xUnit.net 00:00:03.76] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8075146Z [xUnit.net 00:00:03.76] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8101632Z [xUnit.net 00:00:03.76] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(317,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.ExactMatchAndDelete2LevelNestedLinksTest() +Test (windows-latest) Run tests 2026-05-12T20:42:29.8104451Z [xUnit.net 00:00:03.76] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8106927Z [xUnit.net 00:00:03.76] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8109506Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.NestedDeleteAllLinksBySourceAndTargetTest1 [5 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.8111133Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8112906Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp2ffdxk.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.8115040Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8115789Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8118110Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8122204Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.NestedDeleteAllLinksBySourceAndTargetTest1() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 776 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8124953Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8126558Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8129427Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateWithDifferentPairs_ShouldNotDeduplicateDifferentLinks [7 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.8131033Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8132346Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpdxwsgr.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.8133769Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8134394Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8136528Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8162982Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateWithDifferentPairs_ShouldNotDeduplicateDifferentLinks() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1396 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8166043Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8167848Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8170157Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLeftCompositeStringChildrenWithoutExtraLeaf_ShouldSucceed [10 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.8171711Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8172856Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpla0uva.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.8174431Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8174936Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8178109Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8180874Z [xUnit.net 00:00:03.76] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteByNamesTest [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.8183949Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLeftCompositeStringChildrenWithoutExtraLeaf_ShouldSucceed() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1221 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8186892Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8188212Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8189728Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.NoExactMatch2LevelNestedLinksTest [5 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.8190847Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8191950Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpuddsjc.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.8193131Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8193531Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8195506Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8198782Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.NoExactMatch2LevelNestedLinksTest() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 374 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8201054Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8202775Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8204073Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MakeAllLinksToGoOutOfFirstLinkUsingVariablesTest [4 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.8204791Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8205403Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmptokpb3.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.8206263Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8206646Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8209027Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8222707Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MakeAllLinksToGoOutOfFirstLinkUsingVariablesTest() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 498 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8225886Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8227265Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8228912Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateSingleLinkWithIndexAfterDoubleGapTest [4 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.8230211Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8231316Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmphtdv01.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.8232547Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8232961Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8235623Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8238594Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateSingleLinkWithIndexAfterDoubleGapTest() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 61 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8240697Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8241417Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8242668Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Issue20_SubstituteMatchedLinkAndOutgoingLink_ShouldPreserveExistingParts [8 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.8243388Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8244001Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmppi31qs.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.8244670Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8244907Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8245966Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8248024Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Issue20_SubstituteMatchedLinkAndOutgoingLink_ShouldPreserveExistingParts() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1529 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8249350Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8250547Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8251390Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteNamedFamilyLinksRemovesNamesTest [6 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.8252009Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8252610Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpk11dog.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.8253287Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8253521Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8254589Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8258055Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteNamedFamilyLinksRemovesNamesTest() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1081 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8260112Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8260915Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8262029Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.ExactMatchAndDelete2LevelNestedLinksTest [5 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.8262768Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8263600Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpoptkys.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.8353889Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8354451Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8357109Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8360637Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.ExactMatchAndDelete2LevelNestedLinksTest() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 317 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8363901Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8365255Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8367766Z [xUnit.net 00:00:03.76] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpwqy5h3.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.8370223Z [xUnit.net 00:00:03.77] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithVariableReferences_ShouldSucceed [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.8372867Z [xUnit.net 00:00:03.78] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Create2LevelNestedLinksTest [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.8375527Z [xUnit.net 00:00:03.78] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteLinksByAnySourceTest [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.8376774Z [xUnit.net 00:00:03.76] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8377525Z [xUnit.net 00:00:03.76] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8380724Z [xUnit.net 00:00:03.76] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8385010Z [xUnit.net 00:00:03.76] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1120,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteByNamesTest() +Test (windows-latest) Run tests 2026-05-12T20:42:29.8388168Z [Test] All links: (1: 0->0) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8389381Z [xUnit.net 00:00:03.76] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8391139Z [xUnit.net 00:00:03.76] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8393209Z [xUnit.net 00:00:03.77] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmptpjjfv.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.8394644Z [xUnit.net 00:00:03.77] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8395340Z [xUnit.net 00:00:03.77] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8397858Z [xUnit.net 00:00:03.77] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8401631Z [xUnit.net 00:00:03.77] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1791,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithVariableReferences_ShouldSucceed() +Test (windows-latest) Run tests 2026-05-12T20:42:29.8405523Z [xUnit.net 00:00:03.77] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8406369Z [xUnit.net 00:00:03.77] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8406609Z [Test] All links: (1: 1->1) (2: 2->2) (3: 1->2) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8407845Z [xUnit.net 00:00:03.78] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmptaphfh.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.8408072Z [xUnit.net 00:00:03.78] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8408483Z [xUnit.net 00:00:03.78] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8410407Z [xUnit.net 00:00:03.78] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8412746Z [xUnit.net 00:00:03.78] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(109,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Create2LevelNestedLinksTest() +Test (windows-latest) Run tests 2026-05-12T20:42:29.8413661Z [xUnit.net 00:00:03.78] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8414416Z [xUnit.net 00:00:03.78] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8414590Z [Test] All links: (1: 1->1) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8415690Z [xUnit.net 00:00:03.78] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpqphzlg.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.8415897Z [xUnit.net 00:00:03.78] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8416277Z [xUnit.net 00:00:03.78] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8418021Z [xUnit.net 00:00:03.78] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8420263Z [xUnit.net 00:00:03.78] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(741,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteLinksByAnySourceTest() +Test (windows-latest) Run tests 2026-05-12T20:42:29.8421518Z [xUnit.net 00:00:03.78] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8422278Z [xUnit.net 00:00:03.78] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8423014Z [Trace] Constructing NamedTypesDecorator with names DB: C:\Users\runneradmin\AppData\Local\Temp\tmpuqecdo.names.links +Test (windows-latest) Run tests 2026-05-12T20:42:29.8423224Z [Test] Starting UpdateNamedLinkNameTest +Test (windows-latest) Run tests 2026-05-12T20:42:29.8423394Z [Test] Step 1: Creating initial link +Test (windows-latest) Run tests 2026-05-12T20:42:29.8423661Z [ProcessQuery] Query: "(() ((child: father mother)))" +Test (windows-latest) Run tests 2026-05-12T20:42:29.8423917Z [ProcessQuery] Parser returned 1 top-level link(s). +Test (windows-latest) Run tests 2026-05-12T20:42:29.8424190Z [ProcessQuery] Restriction link => Id="" Values.Count=0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8424468Z [ProcessQuery] Substitution link => Id="" Values.Count=1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8424911Z [ProcessQuery] No restriction, but substitution is non-empty => creation scenario. +Test (windows-latest) Run tests 2026-05-12T20:42:29.8425302Z [ValidateLinksExistOrWillBeCreated] Starting validation +Test (windows-latest) Run tests 2026-05-12T20:42:29.8425676Z [ValidateLinksExistOrWillBeCreated] Numeric links to be created: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8426061Z [ValidateLinksExistOrWillBeCreated] Named links to be created: child +Test (windows-latest) Run tests 2026-05-12T20:42:29.8426261Z [Trace] GetByName called for name: 'father' +Test (windows-latest) Run tests 2026-05-12T20:42:29.8426410Z [Trace] GetByName result: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8426592Z [Trace] GetByName called for name: 'mother' +Test (windows-latest) Run tests 2026-05-12T20:42:29.8426737Z [Trace] GetByName result: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8426927Z [Trace] GetByName called for name: 'father' +Test (windows-latest) Run tests 2026-05-12T20:42:29.8427079Z [Trace] GetByName result: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8427706Z [ValidateLinksExistOrWillBeCreated] Auto-creating missing named reference 'father' as point link. +Test (windows-latest) Run tests 2026-05-12T20:42:29.8429823Z [Trace] GetByName called for name: 'father' +Test (windows-latest) Run tests 2026-05-12T20:42:29.8430026Z [Trace] GetByName result: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8430241Z [Trace] Update called with restriction: [1] +Test (windows-latest) Run tests 2026-05-12T20:42:29.8430566Z [Trace] Debug: handlerWrapper invoked - before=1,0,0, after=1,0,0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8430735Z [Trace] Update result: 4294967295 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8431244Z [Trace] SetName called for link: 1 with name: 'father' +Test (windows-latest) Run tests 2026-05-12T20:42:29.8431445Z [Trace] RemoveName called for link: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8431642Z [Trace] RemoveName completed for link: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8431801Z [Trace] SetName result: 108 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8432044Z [Trace] Update called with restriction: [1,0,0] +Test (windows-latest) Run tests 2026-05-12T20:42:29.8432363Z [Trace] Debug: handlerWrapper invoked - before=1,0,0, after=1,1,1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8432509Z [Trace] Update result: 4294967295 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8432724Z [Trace] GetByName called for name: 'mother' +Test (windows-latest) Run tests 2026-05-12T20:42:29.8432875Z [Trace] GetByName result: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8433451Z [ValidateLinksExistOrWillBeCreated] Auto-creating missing named reference 'mother' as point link. +Test (windows-latest) Run tests 2026-05-12T20:42:29.8433653Z [Trace] GetByName called for name: 'mother' +Test (windows-latest) Run tests 2026-05-12T20:42:29.8433805Z [Trace] GetByName result: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8433976Z [Trace] Update called with restriction: [2] +Test (windows-latest) Run tests 2026-05-12T20:42:29.8434299Z [Trace] Debug: handlerWrapper invoked - before=2,0,0, after=2,0,0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8434482Z [Trace] Update result: 4294967295 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8434716Z [Trace] SetName called for link: 2 with name: 'mother' +Test (windows-latest) Run tests 2026-05-12T20:42:29.8434892Z [Trace] RemoveName called for link: 2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8435088Z [Trace] RemoveName completed for link: 2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8435222Z [Trace] SetName result: 110 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8435437Z [Trace] Update called with restriction: [2,0,0] +Test (windows-latest) Run tests 2026-05-12T20:42:29.8435750Z [Trace] Debug: handlerWrapper invoked - before=2,0,0, after=2,2,2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8436117Z [Trace] Update result: 4294967295 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8436427Z [ValidateLinksExistOrWillBeCreated] Validation completed +Test (windows-latest) Run tests 2026-05-12T20:42:29.8436600Z [Trace] GetByName called for name: 'father' +Test (windows-latest) Run tests 2026-05-12T20:42:29.8436760Z [Trace] GetByName result: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8437223Z [EnsureNestedLinkCreatedRecursively] Found existing named leaf 'father' => ID=1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8437423Z [Trace] GetByName called for name: 'mother' +Test (windows-latest) Run tests 2026-05-12T20:42:29.8437601Z [Trace] GetByName result: 2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8438079Z [EnsureNestedLinkCreatedRecursively] Found existing named leaf 'mother' => ID=2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8438308Z [EnsureLinkCreated] Creating link for (S=1, T=2). +Test (windows-latest) Run tests 2026-05-12T20:42:29.8438512Z [EnsureLinkCreated] => assigned new ID=3 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8438718Z [Trace] Update called with restriction: [3] +Test (windows-latest) Run tests 2026-05-12T20:42:29.8439489Z [Trace] Debug: handlerWrapper invoked - before=3,0,0, after=3,1,2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8439700Z [Trace] Update result: 4294967295 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8440876Z [EnsureNestedLinkCreatedRecursively] Created or ensured composite link => Index=0, Source=1, Target=2 => Actual ID=3 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8441126Z [Trace] SetName called for link: 3 with name: 'child' +Test (windows-latest) Run tests 2026-05-12T20:42:29.8441296Z [Trace] RemoveName called for link: 3 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8441492Z [Trace] RemoveName completed for link: 3 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8441653Z [Trace] SetName result: 118 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8441946Z [ProcessQuery] Created link ID #3 from substitution pattern. +Test (windows-latest) Run tests 2026-05-12T20:42:29.8442139Z [Test] Initial link creation completed +Test (windows-latest) Run tests 2026-05-12T20:42:29.8442321Z [Test] Step 2: Verifying initial state +Test (windows-latest) Run tests 2026-05-12T20:42:29.8442513Z [Trace] GetByName called for name: 'child' +Test (windows-latest) Run tests 2026-05-12T20:42:29.8442667Z [Trace] GetByName result: 3 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8442824Z [Test] Initial child ID: 3 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8443021Z [Trace] GetByName called for name: 'father' +Test (windows-latest) Run tests 2026-05-12T20:42:29.8443171Z [Trace] GetByName result: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8443342Z [Test] Initial father ID: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8443533Z [Trace] GetByName called for name: 'mother' +Test (windows-latest) Run tests 2026-05-12T20:42:29.8443683Z [Trace] GetByName result: 2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8443832Z [Test] Initial mother ID: 2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8444057Z [Test] All links: (1: 1->1) (2: 2->2) (3: 1->2) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8444217Z [Test] Initial links count: 3 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8444423Z [Test] Initial state verification completed +Test (windows-latest) Run tests 2026-05-12T20:42:29.8444601Z [Test] Step 3: Updating link name +Test (windows-latest) Run tests 2026-05-12T20:42:29.8444984Z [Test] Removing old name 'child' +Test (windows-latest) Run tests 2026-05-12T20:42:29.8445161Z [Trace] RemoveName called for link: 3 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8445356Z [Trace] RemoveName completed for link: 3 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8445496Z [Test] Old name removed +Test (windows-latest) Run tests 2026-05-12T20:42:29.8445676Z [Test] Creating new link with name 'son' +Test (windows-latest) Run tests 2026-05-12T20:42:29.8445918Z [ProcessQuery] Query: "(() ((son: father mother)))" +Test (windows-latest) Run tests 2026-05-12T20:42:29.8446175Z [ProcessQuery] Parser returned 1 top-level link(s). +Test (windows-latest) Run tests 2026-05-12T20:42:29.8446461Z [ProcessQuery] Restriction link => Id="" Values.Count=0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8446744Z [ProcessQuery] Substitution link => Id="" Values.Count=1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8447209Z [ProcessQuery] No restriction, but substitution is non-empty => creation scenario. +Test (windows-latest) Run tests 2026-05-12T20:42:29.8447517Z [ValidateLinksExistOrWillBeCreated] Starting validation +Test (windows-latest) Run tests 2026-05-12T20:42:29.8447896Z [ValidateLinksExistOrWillBeCreated] Numeric links to be created: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8448698Z [ValidateLinksExistOrWillBeCreated] Named links to be created: son +Test (windows-latest) Run tests 2026-05-12T20:42:29.8448941Z [Trace] GetByName called for name: 'father' +Test (windows-latest) Run tests 2026-05-12T20:42:29.8449102Z [Trace] GetByName result: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8449659Z [ValidateReferencesInPattern] Named link 'father' reference validated in substitution pattern +Test (windows-latest) Run tests 2026-05-12T20:42:29.8449878Z [Trace] GetByName called for name: 'mother' +Test (windows-latest) Run tests 2026-05-12T20:42:29.8452773Z [xUnit.net 00:00:03.80] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateTwoNamedLinksTest [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.8453215Z [Trace] GetByName result: 2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8466434Z [ValidateReferencesInPattern] Named link 'mother' reference validated in substitution pattern +Test (windows-latest) Run tests 2026-05-12T20:42:29.8467759Z [ValidateLinksExistOrWillBeCreated] Validation completed +Test (windows-latest) Run tests 2026-05-12T20:42:29.8469358Z [Trace] GetByName called for name: 'father' +Test (windows-latest) Run tests 2026-05-12T20:42:29.8470408Z [Trace] GetByName result: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8470950Z [EnsureNestedLinkCreatedRecursively] Found existing named leaf 'father' => ID=1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8471592Z [Trace] GetByName called for name: 'mother' +Test (windows-latest) Run tests 2026-05-12T20:42:29.8473593Z [Trace] GetByName result: 2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8476497Z [EnsureNestedLinkCreatedRecursively] Found existing named leaf 'mother' => ID=2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8477393Z [EnsureLinkCreated] Link already found => ID=3 => no-op. +Test (windows-latest) Run tests 2026-05-12T20:42:29.8483022Z [EnsureNestedLinkCreatedRecursively] Created or ensured composite link => Index=0, Source=1, Target=2 => Actual ID=3 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8484328Z [Trace] SetName called for link: 3 with name: 'son' +Test (windows-latest) Run tests 2026-05-12T20:42:29.8485126Z [Trace] RemoveName called for link: 3 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8485439Z [Trace] RemoveName completed for link: 3 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8485607Z [Trace] SetName result: 123 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8486121Z [ProcessQuery] Created link ID #3 from substitution pattern. +Test (windows-latest) Run tests 2026-05-12T20:42:29.8486892Z [Test] New link creation completed +Test (windows-latest) Run tests 2026-05-12T20:42:29.8487314Z [Test] Step 4: Verifying final state +Test (windows-latest) Run tests 2026-05-12T20:42:29.8487756Z [Trace] GetByName called for name: 'child' +Test (windows-latest) Run tests 2026-05-12T20:42:29.8488287Z [Trace] GetByName result: 0 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8488590Z [Trace] GetByName called for name: 'son' +Test (windows-latest) Run tests 2026-05-12T20:42:29.8489904Z [Trace] GetByName result: 3 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8490209Z [Test] Final son ID: 3 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8490443Z [Trace] GetByName called for name: 'father' +Test (windows-latest) Run tests 2026-05-12T20:42:29.8490611Z [Trace] GetByName result: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8490752Z [Test] Final father ID: 1 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8490884Z [Trace] GetByName called for name: 'mother' +Test (windows-latest) Run tests 2026-05-12T20:42:29.8490984Z [Trace] GetByName result: 2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8491069Z [Test] Final mother ID: 2 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8491273Z [Test] All links: (1: 1->1) (2: 2->2) (3: 1->2) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8491429Z [Test] Final links count: 3 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8491816Z [Test] Final state verification completed +Test (windows-latest) Run tests 2026-05-12T20:42:29.8492149Z [Test] UpdateNamedLinkNameTest completed successfully +Test (windows-latest) Run tests 2026-05-12T20:42:29.8494639Z [xUnit.net 00:00:03.80] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpuqecdo.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.8495292Z [xUnit.net 00:00:03.80] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8504133Z [xUnit.net 00:00:03.80] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8522959Z [xUnit.net 00:00:03.80] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8525475Z [xUnit.net 00:00:03.80] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(859,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateTwoNamedLinksTest() +Test (windows-latest) Run tests 2026-05-12T20:42:29.8526421Z [xUnit.net 00:00:03.80] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8527193Z [xUnit.net 00:00:03.80] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8528622Z [xUnit.net 00:00:03.80] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.NoUpdateUsingVariablesTest [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.8528839Z [Test] All links: (1: 1->1) (2: 2->2) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8530014Z [xUnit.net 00:00:03.80] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpwbdnz2.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.8530460Z [xUnit.net 00:00:03.80] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8530871Z [xUnit.net 00:00:03.81] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8532325Z [xUnit.net 00:00:03.81] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8533252Z [xUnit.net 00:00:03.81] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(393,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.NoUpdateUsingVariablesTest() +Test (windows-latest) Run tests 2026-05-12T20:42:29.8533931Z [xUnit.net 00:00:03.81] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8534481Z [xUnit.net 00:00:03.81] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8552605Z [Test] All links: (1: 1->1) (2: 2->2) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8561215Z [xUnit.net 00:00:03.81] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MakeAllLinksSelfReferencingUsingVariablesTest [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.8565266Z [xUnit.net 00:00:03.81] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp3i4sqj.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.8565841Z [xUnit.net 00:00:03.81] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8569989Z [xUnit.net 00:00:03.81] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8572794Z [xUnit.net 00:00:03.81] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8575612Z [xUnit.net 00:00:03.81] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(536,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MakeAllLinksSelfReferencingUsingVariablesTest() +Test (windows-latest) Run tests 2026-05-12T20:42:29.8577159Z [xUnit.net 00:00:03.81] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8582875Z [xUnit.net 00:00:03.81] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8605021Z [Test] All links: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8614621Z [xUnit.net 00:00:03.82] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteMultipleLinksTest [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.8616116Z [xUnit.net 00:00:03.82] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp0dybtu.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.8617947Z [xUnit.net 00:00:03.82] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8629568Z [xUnit.net 00:00:03.82] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8633021Z [xUnit.net 00:00:03.82] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8635059Z [xUnit.net 00:00:03.82] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(706,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteMultipleLinksTest() +Test (windows-latest) Run tests 2026-05-12T20:42:29.8636060Z [xUnit.net 00:00:03.82] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8638253Z [xUnit.net 00:00:03.82] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8680442Z [xUnit.net 00:00:03.82] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.UpdateWithNonExistentReference_ShouldThrowException [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.8682774Z [xUnit.net 00:00:03.82] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpwgf4dr.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.8688685Z [xUnit.net 00:00:03.82] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8689355Z [xUnit.net 00:00:03.82] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8692132Z [xUnit.net 00:00:03.82] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8694722Z [xUnit.net 00:00:03.82] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1725,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.UpdateWithNonExistentReference_ShouldThrowException() +Test (windows-latest) Run tests 2026-05-12T20:42:29.8696412Z [xUnit.net 00:00:03.82] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8697734Z [xUnit.net 00:00:03.82] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8729765Z [Test] All links: (2: 2->2) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8730737Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteByNamesTest [7 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.8731116Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8735084Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpwqy5h3.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.8735541Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8736647Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8742836Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8745962Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteByNamesTest() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1120 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8746925Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8747693Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8754516Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithVariableReferences_ShouldSucceed [6 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.8754924Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8756793Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmptpjjfv.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.8757227Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8757699Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8759833Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8762411Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithVariableReferences_ShouldSucceed() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1791 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8763581Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8764106Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8764830Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Create2LevelNestedLinksTest [5 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.8764956Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8766542Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmptaphfh.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.8767790Z [xUnit.net 00:00:03.83] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteSingleLinkTest_Source1Target2 [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.8767920Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8768167Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8769639Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8770414Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Create2LevelNestedLinksTest() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 109 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8770763Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8771051Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8771437Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteLinksByAnySourceTest [5 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.8771508Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8772014Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpqphzlg.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.8772083Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8772217Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8773061Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8774003Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteLinksByAnySourceTest() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 741 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8774339Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8774718Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8775534Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateTwoNamedLinksTest [14 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.8775624Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8776145Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpuqecdo.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.8776226Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8776484Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8778115Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8779875Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateTwoNamedLinksTest() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 859 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8780760Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8781274Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8782042Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.NoUpdateUsingVariablesTest [7 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.8782165Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8783081Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpwbdnz2.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.8783199Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8783432Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8785000Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8786445Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.NoUpdateUsingVariablesTest() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 393 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8787076Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8787603Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8788581Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MakeAllLinksSelfReferencingUsingVariablesTest [5 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.8788691Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8789601Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp3i4sqj.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.8789732Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8789963Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8791544Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8793523Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MakeAllLinksSelfReferencingUsingVariablesTest() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 536 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8794181Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8794705Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8795425Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteMultipleLinksTest [5 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.8795503Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8796021Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp0dybtu.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.8796091Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8796227Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8797256Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8798455Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteMultipleLinksTest() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 706 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8800233Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8800818Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8803213Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.UpdateWithNonExistentReference_ShouldThrowException [6 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.8804519Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8810637Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpwgf4dr.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.8813099Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8813402Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8815011Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8817397Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.UpdateWithNonExistentReference_ShouldThrowException() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1725 +Test (windows-latest) Run tests 2026-05-12T20:42:29.8818088Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8818651Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8819819Z [xUnit.net 00:00:03.83] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteNamedLinkTest [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.8821121Z [xUnit.net 00:00:03.83] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpbszgc4.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.8821347Z [xUnit.net 00:00:03.83] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8822120Z [xUnit.net 00:00:03.83] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8824681Z [xUnit.net 00:00:03.83] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8826756Z [xUnit.net 00:00:03.83] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(670,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteSingleLinkTest_Source1Target2() +Test (windows-latest) Run tests 2026-05-12T20:42:29.8827662Z [xUnit.net 00:00:03.83] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8828421Z [xUnit.net 00:00:03.83] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8829660Z [xUnit.net 00:00:03.83] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpumutdc.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.8829867Z [xUnit.net 00:00:03.83] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8830297Z [xUnit.net 00:00:03.83] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8831724Z [xUnit.net 00:00:03.84] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8832611Z [xUnit.net 00:00:03.84] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1105,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteNamedLinkTest() +Test (windows-latest) Run tests 2026-05-12T20:42:29.8833258Z [xUnit.net 00:00:03.84] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8833679Z [xUnit.net 00:00:03.84] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8852966Z [Test] All links: (1: 1->1) (2: 2->2) (3: 3->3) (4: 2->3) (5: 1->4) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8862767Z [xUnit.net 00:00:03.84] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Create3LevelNestedLinksTest [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.8864681Z [xUnit.net 00:00:03.84] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp1proks.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.8865496Z [xUnit.net 00:00:03.84] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8867333Z [xUnit.net 00:00:03.84] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8870932Z [xUnit.net 00:00:03.84] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8872969Z [xUnit.net 00:00:03.84] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(126,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Create3LevelNestedLinksTest() +Test (windows-latest) Run tests 2026-05-12T20:42:29.8874087Z [xUnit.net 00:00:03.84] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8875030Z [xUnit.net 00:00:03.84] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8911689Z [Test] All links: (1: 1->1) (2: 2->2) (3: 1->2) (4: 3->3) (5: 3->4) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8923235Z [xUnit.net 00:00:03.85] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateTripleDuplicatePair_ShouldCreateOnlyOneSubLink [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.8924857Z [xUnit.net 00:00:03.85] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpwdnb12.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.8925714Z [xUnit.net 00:00:03.85] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8927383Z [xUnit.net 00:00:03.85] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8929852Z [xUnit.net 00:00:03.85] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8932207Z [xUnit.net 00:00:03.85] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1332,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateTripleDuplicatePair_ShouldCreateOnlyOneSubLink() +Test (windows-latest) Run tests 2026-05-12T20:42:29.8933377Z [xUnit.net 00:00:03.85] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8934266Z [xUnit.net 00:00:03.85] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8960701Z [Test] All links: (1: 1->1) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8969104Z [xUnit.net 00:00:03.85] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithValidSelfReference_ShouldSucceed [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.8970924Z [xUnit.net 00:00:03.85] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpgsrcfu.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.8971490Z [xUnit.net 00:00:03.85] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.8974325Z [xUnit.net 00:00:03.85] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8976720Z [xUnit.net 00:00:03.85] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8979272Z [xUnit.net 00:00:03.85] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1675,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithValidSelfReference_ShouldSucceed() +Test (windows-latest) Run tests 2026-05-12T20:42:29.8980467Z [xUnit.net 00:00:03.85] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.8981379Z [xUnit.net 00:00:03.85] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9009380Z [Test] All links: (1: 1->1) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9017729Z [xUnit.net 00:00:03.86] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateSingleLinkTest [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.9022800Z [xUnit.net 00:00:03.86] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpvs43fg.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.9023130Z [xUnit.net 00:00:03.86] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9023574Z [xUnit.net 00:00:03.86] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9025723Z [xUnit.net 00:00:03.86] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9027520Z [xUnit.net 00:00:03.86] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(16,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateSingleLinkTest() +Test (windows-latest) Run tests 2026-05-12T20:42:29.9028522Z [xUnit.net 00:00:03.86] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9029377Z [xUnit.net 00:00:03.86] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9064607Z [Test] All links: (1: 1->1) (2: 2->2) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9074450Z [xUnit.net 00:00:03.86] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreationDuringUpdateTest [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.9077598Z [xUnit.net 00:00:03.86] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpumhrxz.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.9078583Z [xUnit.net 00:00:03.86] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9079156Z [xUnit.net 00:00:03.86] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9081326Z [xUnit.net 00:00:03.86] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9083237Z [xUnit.net 00:00:03.86] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(614,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreationDuringUpdateTest() +Test (windows-latest) Run tests 2026-05-12T20:42:29.9084352Z [xUnit.net 00:00:03.86] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9085282Z [xUnit.net 00:00:03.86] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9111909Z [Test] All links: (1: 0->0) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9121651Z [xUnit.net 00:00:03.87] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithWildcardReferences_ShouldSucceed [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.9123464Z [xUnit.net 00:00:03.87] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpl4x4ow.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.9124200Z [xUnit.net 00:00:03.87] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9124922Z [xUnit.net 00:00:03.87] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9127173Z [xUnit.net 00:00:03.87] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9128265Z [xUnit.net 00:00:03.87] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1805,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithWildcardReferences_ShouldSucceed() +Test (windows-latest) Run tests 2026-05-12T20:42:29.9128747Z [xUnit.net 00:00:03.87] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9129161Z [xUnit.net 00:00:03.87] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9179962Z [Test] All links: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9190680Z [xUnit.net 00:00:03.87] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteSingleLinkTest_Source2Target2 [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.9194215Z [xUnit.net 00:00:03.87] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp40q2ha.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.9195224Z [xUnit.net 00:00:03.87] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9195767Z [xUnit.net 00:00:03.87] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9198198Z [xUnit.net 00:00:03.87] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9200431Z [xUnit.net 00:00:03.87] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(689,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteSingleLinkTest_Source2Target2() +Test (windows-latest) Run tests 2026-05-12T20:42:29.9201514Z [xUnit.net 00:00:03.87] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9202454Z [xUnit.net 00:00:03.87] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9236647Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteSingleLinkTest_Source1Target2 [5 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.9237028Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9237997Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpbszgc4.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.9238245Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9238555Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9240217Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.9242429Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteSingleLinkTest_Source1Target2() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 670 +Test (windows-latest) Run tests 2026-05-12T20:42:29.9244856Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9245422Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9246115Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteNamedLinkTest [6 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.9246254Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9247181Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpumutdc.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.9247293Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9247540Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9249840Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.9253072Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteNamedLinkTest() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1105 +Test (windows-latest) Run tests 2026-05-12T20:42:29.9254388Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9255535Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9257231Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Create3LevelNestedLinksTest [5 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.9257392Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9258339Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp1proks.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.9258473Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9258724Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9260311Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.9261761Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Create3LevelNestedLinksTest() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 126 +Test (windows-latest) Run tests 2026-05-12T20:42:29.9263000Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9264008Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9265486Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateTripleDuplicatePair_ShouldCreateOnlyOneSubLink [5 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.9265642Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9266554Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpwdnb12.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.9266690Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9266906Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9268406Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.9270055Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateTripleDuplicatePair_ShouldCreateOnlyOneSubLink() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1332 +Test (windows-latest) Run tests 2026-05-12T20:42:29.9270941Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9271480Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9272445Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithValidSelfReference_ShouldSucceed [4 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.9272571Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9273502Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpgsrcfu.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.9273632Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9273851Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9276495Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.9279412Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithValidSelfReference_ShouldSucceed() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1675 +Test (windows-latest) Run tests 2026-05-12T20:42:29.9280063Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9280603Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9281296Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateSingleLinkTest [4 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.9282488Z [xUnit.net 00:00:03.88] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateNamedLinks_MultipleQueries_ShouldReuseSameIds [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.9282600Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9283536Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpvs43fg.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.9283642Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9283870Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9285472Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.9287041Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateSingleLinkTest() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 16 +Test (windows-latest) Run tests 2026-05-12T20:42:29.9287640Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9288208Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9288755Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreationDuringUpdateTest [5 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.9288826Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9289339Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpumhrxz.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.9289423Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9289579Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9290434Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.9291157Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreationDuringUpdateTest() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 614 +Test (windows-latest) Run tests 2026-05-12T20:42:29.9291656Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9291942Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9292420Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithWildcardReferences_ShouldSucceed [4 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.9292489Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9293077Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpl4x4ow.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.9293183Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9293423Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9295062Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.9296986Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithWildcardReferences_ShouldSucceed() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1805 +Test (windows-latest) Run tests 2026-05-12T20:42:29.9297666Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9298239Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9300976Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteSingleLinkTest_Source2Target2 [6 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.9301385Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9303601Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp40q2ha.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.9303782Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9304026Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9307716Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.9309284Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteSingleLinkTest_Source2Target2() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 689 +Test (windows-latest) Run tests 2026-05-12T20:42:29.9310841Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9311398Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9311700Z [Test] All links: (1: 1->1) (2: 2->2) (3: 1->2) (4: 3->3) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9312919Z [xUnit.net 00:00:03.88] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp1o54lr.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.9313143Z [xUnit.net 00:00:03.88] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9313551Z [xUnit.net 00:00:03.88] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9316681Z [xUnit.net 00:00:03.88] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9318729Z [xUnit.net 00:00:03.88] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1470,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateNamedLinks_MultipleQueries_ShouldReuseSameIds() +Test (windows-latest) Run tests 2026-05-12T20:42:29.9319857Z [xUnit.net 00:00:03.88] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9320636Z [xUnit.net 00:00:03.88] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9321953Z [xUnit.net 00:00:03.88] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithNonExistentReference_ShouldThrowException [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.9323193Z [xUnit.net 00:00:03.88] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp5dyqkc.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.9323688Z [xUnit.net 00:00:03.88] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9324441Z [xUnit.net 00:00:03.88] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9325705Z [xUnit.net 00:00:03.88] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9326807Z [xUnit.net 00:00:03.88] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1659,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithNonExistentReference_ShouldThrowException() +Test (windows-latest) Run tests 2026-05-12T20:42:29.9327305Z [xUnit.net 00:00:03.88] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9327712Z [xUnit.net 00:00:03.89] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9345685Z [Test] All links: (1: 1->1) (2: 2->1) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9353564Z [xUnit.net 00:00:03.89] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.SwapSourceAndTargetForSingleLinkUsingVariablesTest [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.9355280Z [xUnit.net 00:00:03.89] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmppminzw.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.9355589Z [xUnit.net 00:00:03.89] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9356023Z [xUnit.net 00:00:03.89] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9359386Z [xUnit.net 00:00:03.89] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9361640Z [xUnit.net 00:00:03.89] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(426,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.SwapSourceAndTargetForSingleLinkUsingVariablesTest() +Test (windows-latest) Run tests 2026-05-12T20:42:29.9362538Z [xUnit.net 00:00:03.89] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9363283Z [xUnit.net 00:00:03.89] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9498926Z [Test] All links: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9508446Z [xUnit.net 00:00:03.90] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteAllLinksBySourceAndTargetTest2 [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.9513015Z [xUnit.net 00:00:03.90] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp3uqphe.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.9513577Z [xUnit.net 00:00:03.90] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9514413Z [xUnit.net 00:00:03.91] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9517181Z [xUnit.net 00:00:03.91] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9519610Z [xUnit.net 00:00:03.91] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(793,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteAllLinksBySourceAndTargetTest2() +Test (windows-latest) Run tests 2026-05-12T20:42:29.9521004Z [xUnit.net 00:00:03.91] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9522359Z [xUnit.net 00:00:03.91] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9578614Z [Test] All links: (1: 1->1) (2: 2->2) (3: 3->3) (4: 4->4) (5: 5->5) (6: 6->6) (7: 7->7) (8: 6->7) (9: 5->8) (10: 4->9) (11: 3->10) (12: 2->11) (13: 1->12) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9593290Z [xUnit.net 00:00:03.91] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Create7LevelNestedLinksTest [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.9594895Z [xUnit.net 00:00:03.91] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmppskw3v.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.9595474Z [xUnit.net 00:00:03.91] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9595998Z [xUnit.net 00:00:03.91] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9598072Z [xUnit.net 00:00:03.91] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9599892Z [xUnit.net 00:00:03.91] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(249,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Create7LevelNestedLinksTest() +Test (windows-latest) Run tests 2026-05-12T20:42:29.9600945Z [xUnit.net 00:00:03.91] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9601849Z [xUnit.net 00:00:03.91] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9635342Z [Test] All links: (1: 1->1) (2: 2->1) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9643869Z [xUnit.net 00:00:03.92] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkReferencingExistingLink_ShouldSucceed [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.9645487Z [xUnit.net 00:00:03.92] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpxqop2b.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.9645791Z [xUnit.net 00:00:03.92] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9649740Z [xUnit.net 00:00:03.92] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9651900Z [xUnit.net 00:00:03.92] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9654270Z [xUnit.net 00:00:03.92] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1706,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkReferencingExistingLink_ShouldSucceed() +Test (windows-latest) Run tests 2026-05-12T20:42:29.9655459Z [xUnit.net 00:00:03.92] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9656854Z [xUnit.net 00:00:03.92] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9687877Z [Test] All links: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9702381Z [xUnit.net 00:00:03.92] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteAllLinksBySourceAndTargetTest1 [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.9704173Z [xUnit.net 00:00:03.92] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpdc543c.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.9705002Z [xUnit.net 00:00:03.92] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9705719Z [xUnit.net 00:00:03.92] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9707880Z [xUnit.net 00:00:03.92] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9710077Z [xUnit.net 00:00:03.92] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(759,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteAllLinksBySourceAndTargetTest1() +Test (windows-latest) Run tests 2026-05-12T20:42:29.9711259Z [xUnit.net 00:00:03.92] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9713795Z [xUnit.net 00:00:03.92] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9744969Z [Test] All links: (1: 1->1) (2: 2->2) (3: 1->2) (4: 3->3) (5: 4->4) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9755342Z [xUnit.net 00:00:03.93] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateNestedDuplicates_ShouldDeduplicateAtAllLevels [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.9756602Z [xUnit.net 00:00:03.93] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp0z1vcq.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.9756893Z [xUnit.net 00:00:03.93] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9760348Z [xUnit.net 00:00:03.93] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9762969Z [xUnit.net 00:00:03.93] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9766351Z [xUnit.net 00:00:03.93] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1434,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateNestedDuplicates_ShouldDeduplicateAtAllLevels() +Test (windows-latest) Run tests 2026-05-12T20:42:29.9767500Z [xUnit.net 00:00:03.93] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9768527Z [xUnit.net 00:00:03.93] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9806368Z [Test] All links: (1: 1->1) (2: 2->2) (3: 3->3) (4: 4->4) (5: 3->4) (6: 2->5) (7: 1->6) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9815733Z [xUnit.net 00:00:03.94] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Create4LevelNestedLinksTest [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.9820300Z [xUnit.net 00:00:03.94] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpbszg5z.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.9821592Z [xUnit.net 00:00:03.94] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9822250Z [xUnit.net 00:00:03.94] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9824720Z [xUnit.net 00:00:03.94] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9826783Z [xUnit.net 00:00:03.94] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(145,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Create4LevelNestedLinksTest() +Test (windows-latest) Run tests 2026-05-12T20:42:29.9827962Z [xUnit.net 00:00:03.94] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9828996Z [xUnit.net 00:00:03.94] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9863808Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateNamedLinks_MultipleQueries_ShouldReuseSameIds [6 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.9864253Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9865484Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp1o54lr.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.9868730Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9870668Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9880993Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.9882750Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateNamedLinks_MultipleQueries_ShouldReuseSameIds() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1470 +Test (windows-latest) Run tests 2026-05-12T20:42:29.9883366Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9883920Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9884939Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithNonExistentReference_ShouldThrowException [4 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.9885066Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9885987Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp5dyqkc.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.9901580Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9901750Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9902632Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.9903544Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithNonExistentReference_ShouldThrowException() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1659 +Test (windows-latest) Run tests 2026-05-12T20:42:29.9903896Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9904178Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9904721Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.SwapSourceAndTargetForSingleLinkUsingVariablesTest [4 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.9904800Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9905312Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmppminzw.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.9905380Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9905717Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9906584Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.9907478Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.SwapSourceAndTargetForSingleLinkUsingVariablesTest() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 426 +Test (windows-latest) Run tests 2026-05-12T20:42:29.9907827Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9908104Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9908565Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteAllLinksBySourceAndTargetTest2 [15 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.9908646Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9909356Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp3uqphe.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.9909472Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9909700Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9911289Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.9913272Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteAllLinksBySourceAndTargetTest2() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 793 +Test (windows-latest) Run tests 2026-05-12T20:42:29.9913926Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9914461Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9915228Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Create7LevelNestedLinksTest [7 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.9915361Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9916260Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmppskw3v.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.9917041Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9917272Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9918789Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.9920217Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Create7LevelNestedLinksTest() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 249 +Test (windows-latest) Run tests 2026-05-12T20:42:29.9920866Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9921378Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9922285Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkReferencingExistingLink_ShouldSucceed [5 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.9922423Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9923305Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpxqop2b.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.9923434Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9923663Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9925493Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.9927112Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkReferencingExistingLink_ShouldSucceed() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1706 +Test (windows-latest) Run tests 2026-05-12T20:42:29.9927744Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9928251Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9929089Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteAllLinksBySourceAndTargetTest1 [5 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.9929193Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9930077Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpdc543c.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.9930206Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9930435Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9931959Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.9933760Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteAllLinksBySourceAndTargetTest1() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 759 +Test (windows-latest) Run tests 2026-05-12T20:42:29.9934404Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9934903Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9935932Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateNestedDuplicates_ShouldDeduplicateAtAllLevels [5 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.9936061Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9936960Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmp0z1vcq.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.9937082Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9938012Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9939600Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.9941239Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateNestedDuplicates_ShouldDeduplicateAtAllLevels() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1434 +Test (windows-latest) Run tests 2026-05-12T20:42:29.9941862Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9942374Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9943387Z [xUnit.net 00:00:03.94] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateSingleLinkWithIndexTest [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.9944168Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Create4LevelNestedLinksTest [5 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:29.9944303Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9945226Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmpbszg5z.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.9945358Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9945858Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9947317Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:29.9948081Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Create4LevelNestedLinksTest() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 145 +Test (windows-latest) Run tests 2026-05-12T20:42:29.9948433Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9948714Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9948826Z [Test] All links: (1: 1->1) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9949503Z [xUnit.net 00:00:03.94] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmplufcnb.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.9949621Z [xUnit.net 00:00:03.94] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9949843Z [xUnit.net 00:00:03.94] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9950880Z [xUnit.net 00:00:03.94] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9951800Z [xUnit.net 00:00:03.94] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(31,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateSingleLinkWithIndexTest() +Test (windows-latest) Run tests 2026-05-12T20:42:29.9952273Z [xUnit.net 00:00:03.94] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9952678Z [xUnit.net 00:00:03.94] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9952786Z [Test] All links: (1: 1->1) (2: 2->2) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9953717Z [xUnit.net 00:00:03.95] Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithSource2Target2Test [FAIL] +Test (windows-latest) Run tests 2026-05-12T20:42:29.9954396Z [xUnit.net 00:00:03.95] System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmppuxv1h.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:29.9966224Z [xUnit.net 00:00:03.95] Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:29.9968068Z [xUnit.net 00:00:03.95] at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9970308Z [xUnit.net 00:00:03.95] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(1606,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9972608Z [xUnit.net 00:00:03.95] D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs(76,0): at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithSource2Target2Test() +Test (windows-latest) Run tests 2026-05-12T20:42:29.9973767Z [xUnit.net 00:00:03.95] at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:29.9974557Z [xUnit.net 00:00:03.95] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:31.4877986Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateSingleLinkWithIndexTest [5 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:31.4879203Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:31.4880333Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmplufcnb.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:31.4882256Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:31.4882687Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:31.4884665Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:31.4888061Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateSingleLinkWithIndexTest() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 31 +Test (windows-latest) Run tests 2026-05-12T20:42:31.4890307Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:31.4891601Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:31.4893100Z Failed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithSource2Target2Test [7 ms] +Test (windows-latest) Run tests 2026-05-12T20:42:31.4894177Z Error Message: +Test (windows-latest) Run tests 2026-05-12T20:42:31.4895238Z System.IO.IOException : The process cannot access the file 'C:\Users\runneradmin\AppData\Local\Temp\tmppuxv1h.names.links' because it is being used by another process. +Test (windows-latest) Run tests 2026-05-12T20:42:31.4896404Z Stack Trace: +Test (windows-latest) Run tests 2026-05-12T20:42:31.4896774Z at System.IO.FileSystem.DeleteFile(String fullPath) +Test (windows-latest) Run tests 2026-05-12T20:42:31.4898721Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.RunTestWithLinks(Action`1 testAction, Boolean enableTracing) in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 1606 +Test (windows-latest) Run tests 2026-05-12T20:42:31.4902264Z at Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithSource2Target2Test() in D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\AdvancedMixedQueryProcessor.cs:line 76 +Test (windows-latest) Run tests 2026-05-12T20:42:31.4904615Z at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) +Test (windows-latest) Run tests 2026-05-12T20:42:31.4905930Z at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +Test (windows-latest) Run tests 2026-05-12T20:42:31.4907331Z Passed Foundation.Data.Doublets.Cli.Tests.CliExportIntegrationTests.ExportAlias_WritesNamedReferences [3 s] +Test (windows-latest) Run tests 2026-05-12T20:42:35.4380595Z Passed Foundation.Data.Doublets.Cli.Tests.CliExportIntegrationTests.AlwaysTriggerOption_StoresTriggerAndAppliesItOnLaterChange [4 s] +Test (windows-latest) Run tests 2026-05-12T20:42:37.7003332Z Passed Foundation.Data.Doublets.Cli.Tests.CliExportIntegrationTests.ExportAlias_WritesNumberedReferences [2 s] +Test (windows-latest) Run tests 2026-05-12T20:42:48.7610743Z Passed Foundation.Data.Doublets.Cli.Tests.CliExportIntegrationTests.StructureOption_RendersLeftBranchWithIndexes [11 s] +Test (windows-latest) Run tests 2026-05-12T20:42:51.5878137Z [xUnit.net 00:00:25.54] Finished: Foundation.Data.Doublets.Cli.Tests +Test (windows-latest) Run tests 2026-05-12T20:42:52.4649830Z Passed Foundation.Data.Doublets.Cli.Tests.CliExportIntegrationTests.ImportOption_ReadsNumberedLinoFile [2 s] +Test (windows-latest) Run tests 2026-05-12T20:42:52.4754864Z +Test (windows-latest) Run tests 2026-05-12T20:42:52.4794038Z Test Run Failed. +Test (windows-latest) Run tests 2026-05-12T20:42:52.4794362Z Total tests: 187 +Test (windows-latest) Run tests 2026-05-12T20:42:52.4794684Z Passed: 73 +Test (windows-latest) Run tests 2026-05-12T20:42:52.4794957Z Failed: 114 +Test (windows-latest) Run tests 2026-05-12T20:42:52.4797307Z Total time: 28.0637 Seconds +Test (windows-latest) Run tests 2026-05-12T20:42:52.4935388Z 1>Project "D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.sln" (1) is building "D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\Foundation.Data.Doublets.Cli.Tests.csproj" (2) on node 1 (VSTest target(s)). +Test (windows-latest) Run tests 2026-05-12T20:42:52.4937257Z 2>_VSTestConsole: +Test (windows-latest) Run tests 2026-05-12T20:42:52.4937791Z MSB4181: The "VSTestTask" task returned false but did not log an error. +Test (windows-latest) Run tests 2026-05-12T20:42:52.4958373Z 2>Done Building Project "D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\Foundation.Data.Doublets.Cli.Tests.csproj" (VSTest target(s)) -- FAILED. +Test (windows-latest) Run tests 2026-05-12T20:42:52.5072286Z 1>Done Building Project "D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.sln" (VSTest target(s)) -- FAILED. +Test (windows-latest) Run tests 2026-05-12T20:42:52.5181232Z +Test (windows-latest) Run tests 2026-05-12T20:42:52.5181416Z Build FAILED. +Test (windows-latest) Run tests 2026-05-12T20:42:52.5182080Z 0 Warning(s) +Test (windows-latest) Run tests 2026-05-12T20:42:52.5183128Z 0 Error(s) +Test (windows-latest) Run tests 2026-05-12T20:42:52.5184753Z +Test (windows-latest) Run tests 2026-05-12T20:42:52.5185208Z Time Elapsed 00:00:30.09 +Test (windows-latest) Run tests 2026-05-12T20:42:52.7313279Z +Test (windows-latest) Run tests 2026-05-12T20:42:52.7321386Z Attachments: +Test (windows-latest) Run tests 2026-05-12T20:42:52.7324869Z D:\a\link-cli\link-cli\csharp\Foundation.Data.Doublets.Cli.Tests\TestResults\f8d1b390-e648-41cf-b93f-abd0eb7e5683\coverage.cobertura.xml +Test (windows-latest) Run tests 2026-05-12T20:42:53.1781414Z ##[error]Process completed with exit code 1. +Test (windows-latest) Post Setup .NET 2026-05-12T20:42:53.1978407Z Post job cleanup. +Test (windows-latest) Post Run actions/checkout@v6 2026-05-12T20:42:53.3701356Z Post job cleanup. +Test (windows-latest) Post Run actions/checkout@v6 2026-05-12T20:42:53.6019776Z [command]"C:\Program Files\Git\bin\git.exe" version +Test (windows-latest) Post Run actions/checkout@v6 2026-05-12T20:42:53.6316776Z git version 2.54.0.windows.1 +Test (windows-latest) Post Run actions/checkout@v6 2026-05-12T20:42:53.6390960Z Temporarily overriding HOME='D:\a\_temp\61e2322b-27a8-40b5-b449-8106435c48b4' before making global git config changes +Test (windows-latest) Post Run actions/checkout@v6 2026-05-12T20:42:53.6392716Z Adding repository directory to the temporary git global config as a safe directory +Test (windows-latest) Post Run actions/checkout@v6 2026-05-12T20:42:53.6403623Z [command]"C:\Program Files\Git\bin\git.exe" config --global --add safe.directory D:\a\link-cli\link-cli +Test (windows-latest) Post Run actions/checkout@v6 2026-05-12T20:42:53.6712255Z Removing SSH command configuration +Test (windows-latest) Post Run actions/checkout@v6 2026-05-12T20:42:53.6723441Z [command]"C:\Program Files\Git\bin\git.exe" config --local --name-only --get-regexp core\.sshCommand +Test (windows-latest) Post Run actions/checkout@v6 2026-05-12T20:42:53.7049998Z [command]"C:\Program Files\Git\bin\git.exe" submodule foreach --recursive "sh -c \"git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :\"" +Test (windows-latest) Post Run actions/checkout@v6 2026-05-12T20:42:54.7794780Z Removing HTTP extra header +Test (windows-latest) Post Run actions/checkout@v6 2026-05-12T20:42:54.7805140Z [command]"C:\Program Files\Git\bin\git.exe" config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader +Test (windows-latest) Post Run actions/checkout@v6 2026-05-12T20:42:54.8122455Z [command]"C:\Program Files\Git\bin\git.exe" submodule foreach --recursive "sh -c \"git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :\"" +Test (windows-latest) Post Run actions/checkout@v6 2026-05-12T20:42:55.5565366Z Removing includeIf entries pointing to credentials config files +Test (windows-latest) Post Run actions/checkout@v6 2026-05-12T20:42:55.5578367Z [command]"C:\Program Files\Git\bin\git.exe" config --local --name-only --get-regexp ^includeIf\.gitdir: +Test (windows-latest) Post Run actions/checkout@v6 2026-05-12T20:42:55.5850138Z includeif.gitdir:D:/a/link-cli/link-cli/.git.path +Test (windows-latest) Post Run actions/checkout@v6 2026-05-12T20:42:55.5850984Z includeif.gitdir:D:/a/link-cli/link-cli/.git/worktrees/*.path +Test (windows-latest) Post Run actions/checkout@v6 2026-05-12T20:42:55.5851686Z includeif.gitdir:/github/workspace/.git.path +Test (windows-latest) Post Run actions/checkout@v6 2026-05-12T20:42:55.5852301Z includeif.gitdir:/github/workspace/.git/worktrees/*.path +Test (windows-latest) Post Run actions/checkout@v6 2026-05-12T20:42:55.5898783Z [command]"C:\Program Files\Git\bin\git.exe" config --local --get-all includeif.gitdir:D:/a/link-cli/link-cli/.git.path +Test (windows-latest) Post Run actions/checkout@v6 2026-05-12T20:42:55.6170090Z D:\a\_temp\git-credentials-4826141e-18f4-43d6-8165-8f06a711b9f5.config +Test (windows-latest) Post Run actions/checkout@v6 2026-05-12T20:42:55.6215424Z [command]"C:\Program Files\Git\bin\git.exe" config --local --unset includeif.gitdir:D:/a/link-cli/link-cli/.git.path D:\a\_temp\git-credentials-4826141e-18f4-43d6-8165-8f06a711b9f5.config +Test (windows-latest) Post Run actions/checkout@v6 2026-05-12T20:42:55.6525262Z [command]"C:\Program Files\Git\bin\git.exe" config --local --get-all includeif.gitdir:D:/a/link-cli/link-cli/.git/worktrees/*.path +Test (windows-latest) Post Run actions/checkout@v6 2026-05-12T20:42:55.6797232Z D:\a\_temp\git-credentials-4826141e-18f4-43d6-8165-8f06a711b9f5.config +Test (windows-latest) Post Run actions/checkout@v6 2026-05-12T20:42:55.6838267Z [command]"C:\Program Files\Git\bin\git.exe" config --local --unset includeif.gitdir:D:/a/link-cli/link-cli/.git/worktrees/*.path D:\a\_temp\git-credentials-4826141e-18f4-43d6-8165-8f06a711b9f5.config +Test (windows-latest) Post Run actions/checkout@v6 2026-05-12T20:42:55.7139533Z [command]"C:\Program Files\Git\bin\git.exe" config --local --get-all includeif.gitdir:/github/workspace/.git.path +Test (windows-latest) Post Run actions/checkout@v6 2026-05-12T20:42:55.7409961Z /github/runner_temp/git-credentials-4826141e-18f4-43d6-8165-8f06a711b9f5.config +Test (windows-latest) Post Run actions/checkout@v6 2026-05-12T20:42:55.7454069Z [command]"C:\Program Files\Git\bin\git.exe" config --local --unset includeif.gitdir:/github/workspace/.git.path /github/runner_temp/git-credentials-4826141e-18f4-43d6-8165-8f06a711b9f5.config +Test (windows-latest) Post Run actions/checkout@v6 2026-05-12T20:42:55.7767249Z [command]"C:\Program Files\Git\bin\git.exe" config --local --get-all includeif.gitdir:/github/workspace/.git/worktrees/*.path +Test (windows-latest) Post Run actions/checkout@v6 2026-05-12T20:42:55.8031173Z /github/runner_temp/git-credentials-4826141e-18f4-43d6-8165-8f06a711b9f5.config +Test (windows-latest) Post Run actions/checkout@v6 2026-05-12T20:42:55.8076065Z [command]"C:\Program Files\Git\bin\git.exe" config --local --unset includeif.gitdir:/github/workspace/.git/worktrees/*.path /github/runner_temp/git-credentials-4826141e-18f4-43d6-8165-8f06a711b9f5.config +Test (windows-latest) Post Run actions/checkout@v6 2026-05-12T20:42:55.8380864Z [command]"C:\Program Files\Git\bin\git.exe" submodule foreach --recursive "git config --local --show-origin --name-only --get-regexp remote.origin.url" +Test (windows-latest) Post Run actions/checkout@v6 2026-05-12T20:42:56.4192009Z Removing credentials config 'D:\a\_temp\git-credentials-4826141e-18f4-43d6-8165-8f06a711b9f5.config' +Test (windows-latest) Complete job 2026-05-12T20:42:56.4398304Z Cleaning up orphan processes +Test (windows-latest) Complete job 2026-05-12T20:42:56.4876578Z Terminate orphan process: pid (2144) (dotnet) +Test (windows-latest) Complete job 2026-05-12T20:42:56.5098350Z Terminate orphan process: pid (7424) (VBCSCompiler) +Test (windows-latest) Complete job 2026-05-12T20:42:56.5188175Z Terminate orphan process: pid (8416) (conhost) +Test (macos-latest) Set up job 2026-05-12T20:40:26.7007750Z Current runner version: '2.334.0' +Test (macos-latest) Set up job 2026-05-12T20:40:26.7026800Z ##[group]Runner Image Provisioner +Test (macos-latest) Set up job 2026-05-12T20:40:26.7027380Z Hosted Compute Agent +Test (macos-latest) Set up job 2026-05-12T20:40:26.7027820Z Version: 20260422.526 +Test (macos-latest) Set up job 2026-05-12T20:40:26.7028270Z Commit: e1a9e573f4d0838b3a7c1b07401aeb29ed3635a9 +Test (macos-latest) Set up job 2026-05-12T20:40:26.7028790Z Build Date: 2026-04-22T09:31:31Z +Test (macos-latest) Set up job 2026-05-12T20:40:26.7029300Z Worker ID: {1e1e97e5-f824-4df7-9fdb-541f2f02f29b} +Test (macos-latest) Set up job 2026-05-12T20:40:26.7029800Z Azure Region: westus +Test (macos-latest) Set up job 2026-05-12T20:40:26.7030210Z ##[endgroup] +Test (macos-latest) Set up job 2026-05-12T20:40:26.7031120Z ##[group]Operating System +Test (macos-latest) Set up job 2026-05-12T20:40:26.7031570Z macOS +Test (macos-latest) Set up job 2026-05-12T20:40:26.7031940Z 15.7.4 +Test (macos-latest) Set up job 2026-05-12T20:40:26.7032320Z 24G517 +Test (macos-latest) Set up job 2026-05-12T20:40:26.7032690Z ##[endgroup] +Test (macos-latest) Set up job 2026-05-12T20:40:26.7033080Z ##[group]Runner Image +Test (macos-latest) Set up job 2026-05-12T20:40:26.7033490Z Image: macos-15-arm64 +Test (macos-latest) Set up job 2026-05-12T20:40:26.7033890Z Version: 20260427.0018.1 +Test (macos-latest) Set up job 2026-05-12T20:40:26.7034670Z Included Software: https://github.com/actions/runner-images/blob/macos-15-arm64/20260427.0018/images/macos/macos-15-arm64-Readme.md +Test (macos-latest) Set up job 2026-05-12T20:40:26.7035900Z Image Release: https://github.com/actions/runner-images/releases/tag/macos-15-arm64%2F20260427.0018 +Test (macos-latest) Set up job 2026-05-12T20:40:26.7036580Z ##[endgroup] +Test (macos-latest) Set up job 2026-05-12T20:40:26.7038660Z ##[group]GITHUB_TOKEN Permissions +Test (macos-latest) Set up job 2026-05-12T20:40:26.7040010Z Actions: write +Test (macos-latest) Set up job 2026-05-12T20:40:26.7042180Z ArtifactMetadata: write +Test (macos-latest) Set up job 2026-05-12T20:40:26.7043780Z Attestations: write +Test (macos-latest) Set up job 2026-05-12T20:40:26.7045010Z Checks: write +Test (macos-latest) Set up job 2026-05-12T20:40:26.7046000Z CodeQuality: write +Test (macos-latest) Set up job 2026-05-12T20:40:26.7047020Z Contents: write +Test (macos-latest) Set up job 2026-05-12T20:40:26.7048150Z Deployments: write +Test (macos-latest) Set up job 2026-05-12T20:40:26.7049590Z Discussions: write +Test (macos-latest) Set up job 2026-05-12T20:40:26.7051030Z Issues: write +Test (macos-latest) Set up job 2026-05-12T20:40:26.7052030Z Metadata: read +Test (macos-latest) Set up job 2026-05-12T20:40:26.7052910Z Models: read +Test (macos-latest) Set up job 2026-05-12T20:40:26.7053810Z Packages: write +Test (macos-latest) Set up job 2026-05-12T20:40:26.7055000Z Pages: write +Test (macos-latest) Set up job 2026-05-12T20:40:26.7055880Z PullRequests: write +Test (macos-latest) Set up job 2026-05-12T20:40:26.7056800Z RepositoryProjects: write +Test (macos-latest) Set up job 2026-05-12T20:40:26.7057790Z SecurityEvents: write +Test (macos-latest) Set up job 2026-05-12T20:40:26.7058810Z Statuses: write +Test (macos-latest) Set up job 2026-05-12T20:40:26.7059850Z VulnerabilityAlerts: read +Test (macos-latest) Set up job 2026-05-12T20:40:26.7060840Z ##[endgroup] +Test (macos-latest) Set up job 2026-05-12T20:40:26.7065570Z Secret source: Actions +Test (macos-latest) Set up job 2026-05-12T20:40:26.7066830Z Prepare workflow directory +Test (macos-latest) Set up job 2026-05-12T20:40:26.7531300Z Prepare all required actions +Test (macos-latest) Set up job 2026-05-12T20:40:26.7561780Z Getting action download info +Test (macos-latest) Set up job 2026-05-12T20:40:27.1522890Z Download action repository 'actions/checkout@v6' (SHA:de0fac2e4500dabe0009e67214ff5f5447ce83dd) +Test (macos-latest) Set up job 2026-05-12T20:40:27.7202780Z Download action repository 'actions/setup-dotnet@v5' (SHA:c2fa09f4bde5ebb9d1777cf28262a3eb3db3ced7) +Test (macos-latest) Set up job 2026-05-12T20:40:29.1766000Z Download action repository 'codecov/codecov-action@v5' (SHA:75cd11691c0faa626561e295848008c8a7dddffe) +Test (macos-latest) Set up job 2026-05-12T20:40:30.1808030Z Getting action download info +Test (macos-latest) Set up job 2026-05-12T20:40:30.3186390Z Download action repository 'actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea' (SHA:60a0d83039c74a4aee543508d2ffcb1c3799cdea) +Test (macos-latest) Set up job 2026-05-12T20:40:31.5841350Z Complete job name: Test (macos-latest) +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:31.7895640Z ##[group]Run actions/checkout@v6 +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:31.7897720Z with: +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:31.7898460Z repository: link-foundation/link-cli +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:31.7899640Z token: *** +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:31.7900190Z ssh-strict: true +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:31.7900700Z ssh-user: git +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:31.7901220Z persist-credentials: true +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:31.7901860Z clean: true +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:31.7902410Z sparse-checkout-cone-mode: true +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:31.7903110Z fetch-depth: 1 +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:31.7903640Z fetch-tags: false +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:31.7904200Z show-progress: true +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:31.7904750Z lfs: false +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:31.7905260Z submodules: false +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:31.7905860Z set-safe-directory: true +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:31.7907760Z env: +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:31.7908370Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:31.7909080Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:31.7909710Z DOTNET_NOLOGO: true +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:31.7910290Z ##[endgroup] +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.0363860Z Syncing repository: link-foundation/link-cli +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.0365780Z ##[group]Getting Git version info +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.0366100Z Working directory is '/Users/runner/work/link-cli/link-cli' +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.0366700Z [command]/opt/homebrew/bin/git version +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.0807790Z git version 2.54.0 +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.0823080Z ##[endgroup] +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.0834570Z Copying '/Users/runner/.gitconfig' to '/Users/runner/work/_temp/0086a7e3-c9ca-4dd8-b878-2230157b533b/.gitconfig' +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.0837020Z Temporarily overriding HOME='/Users/runner/work/_temp/0086a7e3-c9ca-4dd8-b878-2230157b533b' before making global git config changes +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.0838710Z Adding repository directory to the temporary git global config as a safe directory +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.0840630Z [command]/opt/homebrew/bin/git config --global --add safe.directory /Users/runner/work/link-cli/link-cli +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.1114550Z Deleting the contents of '/Users/runner/work/link-cli/link-cli' +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.1117240Z ##[group]Initializing the repository +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.1121360Z [command]/opt/homebrew/bin/git init /Users/runner/work/link-cli/link-cli +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.1908290Z hint: Using 'master' as the name for the initial branch. This default branch name +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.1914850Z hint: will change to "main" in Git 3.0. To configure the initial branch name +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.1917140Z hint: to use in all of your new repositories, which will suppress this warning, +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.1917950Z hint: call: +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.1918340Z hint: +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.1919010Z hint: git config --global init.defaultBranch +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.1919470Z hint: +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.1920030Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.1920650Z hint: 'development'. The just-created branch can be renamed via this command: +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.1921180Z hint: +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.1921510Z hint: git branch -m +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.1921870Z hint: +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.1922340Z hint: Disable this message with "git config set advice.defaultBranchName false" +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.1923330Z Initialized empty Git repository in /Users/runner/work/link-cli/link-cli/.git/ +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.1928900Z [command]/opt/homebrew/bin/git remote add origin https://github.com/link-foundation/link-cli +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.2126580Z ##[endgroup] +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.2128700Z ##[group]Disabling automatic garbage collection +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.2131160Z [command]/opt/homebrew/bin/git config --local gc.auto 0 +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.2459320Z ##[endgroup] +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.2471450Z ##[group]Setting up auth +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.2472360Z Removing SSH command configuration +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.2474390Z [command]/opt/homebrew/bin/git config --local --name-only --get-regexp core\.sshCommand +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.2476260Z [command]/opt/homebrew/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :" +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.4594050Z Removing HTTP extra header +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.4605160Z [command]/opt/homebrew/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.4721050Z [command]/opt/homebrew/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :" +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.6297640Z Removing includeIf entries pointing to credentials config files +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.6402510Z [command]/opt/homebrew/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir: +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.6710850Z [command]/opt/homebrew/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.8407040Z [command]/opt/homebrew/bin/git config --file /Users/runner/work/_temp/git-credentials-c1c352c7-201a-4edb-be61-2eea25b9f495.config http.https://github.com/.extraheader AUTHORIZATION: basic *** +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.8626850Z [command]/opt/homebrew/bin/git config --local includeIf.gitdir:/Users/runner/work/link-cli/link-cli/.git.path /Users/runner/work/_temp/git-credentials-c1c352c7-201a-4edb-be61-2eea25b9f495.config +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.8693070Z [command]/opt/homebrew/bin/git config --local includeIf.gitdir:/Users/runner/work/link-cli/link-cli/.git/worktrees/*.path /Users/runner/work/_temp/git-credentials-c1c352c7-201a-4edb-be61-2eea25b9f495.config +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.8778260Z [command]/opt/homebrew/bin/git config --local includeIf.gitdir:/github/workspace/.git.path /github/runner_temp/git-credentials-c1c352c7-201a-4edb-be61-2eea25b9f495.config +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.8930970Z [command]/opt/homebrew/bin/git config --local includeIf.gitdir:/github/workspace/.git/worktrees/*.path /github/runner_temp/git-credentials-c1c352c7-201a-4edb-be61-2eea25b9f495.config +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.9031830Z ##[endgroup] +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.9032400Z ##[group]Fetching the repository +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:33.9054820Z [command]/opt/homebrew/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules --depth=1 origin +0c8092c56b0fb11704f89398b6d831cd9bbe007d:refs/remotes/origin/main +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:35.4925920Z From https://github.com/link-foundation/link-cli +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:35.4986530Z * [new ref] 0c8092c56b0fb11704f89398b6d831cd9bbe007d -> origin/main +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:35.5097840Z [command]/opt/homebrew/bin/git branch --list --remote origin/main +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:35.5241440Z origin/main +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:35.5311590Z [command]/opt/homebrew/bin/git rev-parse refs/remotes/origin/main +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:35.5385410Z 0c8092c56b0fb11704f89398b6d831cd9bbe007d +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:35.5549870Z ##[endgroup] +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:35.5550450Z ##[group]Determining the checkout info +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:35.5550860Z ##[endgroup] +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:35.5551480Z [command]/opt/homebrew/bin/git sparse-checkout disable +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:35.5685450Z [command]/opt/homebrew/bin/git config --local --unset-all extensions.worktreeConfig +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:35.5835900Z ##[group]Checking out the ref +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:35.5848960Z [command]/opt/homebrew/bin/git checkout --progress --force -B main refs/remotes/origin/main +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:35.7672580Z Switched to a new branch 'main' +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:35.7685530Z branch 'main' set up to track 'origin/main'. +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:35.7698730Z ##[endgroup] +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:35.7902250Z [command]/opt/homebrew/bin/git log -1 --format=%H +Test (macos-latest) Run actions/checkout@v6 2026-05-12T20:40:35.8039770Z 0c8092c56b0fb11704f89398b6d831cd9bbe007d +Test (macos-latest) Setup .NET 2026-05-12T20:40:35.8639270Z ##[group]Run actions/setup-dotnet@v5 +Test (macos-latest) Setup .NET 2026-05-12T20:40:35.8640050Z with: +Test (macos-latest) Setup .NET 2026-05-12T20:40:35.8640510Z dotnet-version: 8.0.x +Test (macos-latest) Setup .NET 2026-05-12T20:40:35.8641110Z cache: false +Test (macos-latest) Setup .NET 2026-05-12T20:40:35.8641560Z env: +Test (macos-latest) Setup .NET 2026-05-12T20:40:35.8642020Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Test (macos-latest) Setup .NET 2026-05-12T20:40:35.8642660Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Test (macos-latest) Setup .NET 2026-05-12T20:40:35.8643340Z DOTNET_NOLOGO: true +Test (macos-latest) Setup .NET 2026-05-12T20:40:35.8643810Z ##[endgroup] +Test (macos-latest) Setup .NET 2026-05-12T20:40:36.1766650Z [command]/Users/runner/work/_actions/actions/setup-dotnet/v5/externals/install-dotnet.sh --skip-non-versioned-files --runtime dotnet --channel LTS +Test (macos-latest) Setup .NET 2026-05-12T20:40:36.6898220Z dotnet-install: Attempting to download using aka.ms link https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.8/dotnet-runtime-10.0.8-osx-arm64.tar.gz +Test (macos-latest) Setup .NET 2026-05-12T20:40:37.2360610Z dotnet-install: Remote file https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.8/dotnet-runtime-10.0.8-osx-arm64.tar.gz size is 33232776 bytes. +Test (macos-latest) Setup .NET 2026-05-12T20:40:37.2381370Z dotnet-install: Extracting archive from https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.8/dotnet-runtime-10.0.8-osx-arm64.tar.gz +Test (macos-latest) Setup .NET 2026-05-12T20:40:38.2905000Z dotnet-install: Downloaded file size is 33232776 bytes. +Test (macos-latest) Setup .NET 2026-05-12T20:40:38.3006030Z dotnet-install: The remote and local file sizes are equal. +Test (macos-latest) Setup .NET 2026-05-12T20:40:38.3552500Z dotnet-install: Installed version is 10.0.8 +Test (macos-latest) Setup .NET 2026-05-12T20:40:38.3860730Z dotnet-install: Adding to current process PATH: `/Users/runner/.dotnet`. Note: This change will be visible only when sourcing script. +Test (macos-latest) Setup .NET 2026-05-12T20:40:38.3923800Z dotnet-install: Note that the script does not resolve dependencies during installation. +Test (macos-latest) Setup .NET 2026-05-12T20:40:38.4041040Z dotnet-install: To check the list of dependencies, go to https://learn.microsoft.com/dotnet/core/install, select your operating system and check the "Dependencies" section. +Test (macos-latest) Setup .NET 2026-05-12T20:40:38.4055790Z dotnet-install: Installation finished successfully. +Test (macos-latest) Setup .NET 2026-05-12T20:40:38.4118130Z [command]/Users/runner/work/_actions/actions/setup-dotnet/v5/externals/install-dotnet.sh --skip-non-versioned-files --channel 8.0 +Test (macos-latest) Setup .NET 2026-05-12T20:40:38.7194720Z dotnet-install: Attempting to download using aka.ms link https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.421/dotnet-sdk-8.0.421-osx-arm64.tar.gz +Test (macos-latest) Setup .NET 2026-05-12T20:40:41.7562450Z dotnet-install: Remote file https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.421/dotnet-sdk-8.0.421-osx-arm64.tar.gz size is 209833600 bytes. +Test (macos-latest) Setup .NET 2026-05-12T20:40:41.7588750Z dotnet-install: Extracting archive from https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.421/dotnet-sdk-8.0.421-osx-arm64.tar.gz +Test (macos-latest) Setup .NET 2026-05-12T20:40:54.6669960Z dotnet-install: Downloaded file size is 209833600 bytes. +Test (macos-latest) Setup .NET 2026-05-12T20:40:54.6673690Z dotnet-install: The remote and local file sizes are equal. +Test (macos-latest) Setup .NET 2026-05-12T20:40:55.4552730Z dotnet-install: Installed version is 8.0.421 +Test (macos-latest) Setup .NET 2026-05-12T20:40:55.4833110Z dotnet-install: Adding to current process PATH: `/Users/runner/.dotnet`. Note: This change will be visible only when sourcing script. +Test (macos-latest) Setup .NET 2026-05-12T20:40:55.4836560Z dotnet-install: Note that the script does not resolve dependencies during installation. +Test (macos-latest) Setup .NET 2026-05-12T20:40:55.4839890Z dotnet-install: To check the list of dependencies, go to https://learn.microsoft.com/dotnet/core/install, select your operating system and check the "Dependencies" section. +Test (macos-latest) Setup .NET 2026-05-12T20:40:55.4841220Z dotnet-install: Installation finished successfully. +Test (macos-latest) Restore dependencies 2026-05-12T20:40:55.5343870Z ##[group]Run dotnet restore +Test (macos-latest) Restore dependencies 2026-05-12T20:40:55.5344530Z ^[[36;1mdotnet restore^[[0m +Test (macos-latest) Restore dependencies 2026-05-12T20:40:55.5478260Z shell: /bin/bash -e {0} +Test (macos-latest) Restore dependencies 2026-05-12T20:40:55.5478870Z env: +Test (macos-latest) Restore dependencies 2026-05-12T20:40:55.5479420Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Test (macos-latest) Restore dependencies 2026-05-12T20:40:55.5480090Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Test (macos-latest) Restore dependencies 2026-05-12T20:40:55.5480840Z DOTNET_NOLOGO: true +Test (macos-latest) Restore dependencies 2026-05-12T20:40:55.5481380Z DOTNET_ROOT: /Users/runner/.dotnet +Test (macos-latest) Restore dependencies 2026-05-12T20:40:55.5481980Z ##[endgroup] +Test (macos-latest) Restore dependencies 2026-05-12T20:40:59.2525940Z Determining projects to restore... +Test (macos-latest) Restore dependencies 2026-05-12T20:41:04.9718660Z Restored /Users/runner/work/link-cli/link-cli/csharp/Foundation.Data.Doublets.Cli.Tests/Foundation.Data.Doublets.Cli.Tests.csproj (in 5.13 sec). +Test (macos-latest) Restore dependencies 2026-05-12T20:41:04.9763790Z Restored /Users/runner/work/link-cli/link-cli/csharp/Foundation.Data.Doublets.Cli/Foundation.Data.Doublets.Cli.csproj (in 5.13 sec). +Test (macos-latest) Build 2026-05-12T20:41:05.0459820Z ##[group]Run dotnet build --no-restore --configuration Release +Test (macos-latest) Build 2026-05-12T20:41:05.0460310Z ^[[36;1mdotnet build --no-restore --configuration Release^[[0m +Test (macos-latest) Build 2026-05-12T20:41:05.0512330Z shell: /bin/bash -e {0} +Test (macos-latest) Build 2026-05-12T20:41:05.0512720Z env: +Test (macos-latest) Build 2026-05-12T20:41:05.0512980Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Test (macos-latest) Build 2026-05-12T20:41:05.0513310Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Test (macos-latest) Build 2026-05-12T20:41:05.0513560Z DOTNET_NOLOGO: true +Test (macos-latest) Build 2026-05-12T20:41:05.0513980Z DOTNET_ROOT: /Users/runner/.dotnet +Test (macos-latest) Build 2026-05-12T20:41:05.0514210Z ##[endgroup] +Test (macos-latest) Build 2026-05-12T20:41:12.0149600Z Foundation.Data.Doublets.Cli -> /Users/runner/work/link-cli/link-cli/csharp/Foundation.Data.Doublets.Cli/bin/Release/net8/Foundation.Data.Doublets.Cli.dll +Test (macos-latest) Build 2026-05-12T20:41:13.7554790Z Foundation.Data.Doublets.Cli.Tests -> /Users/runner/work/link-cli/link-cli/csharp/Foundation.Data.Doublets.Cli.Tests/bin/Release/net8/Foundation.Data.Doublets.Cli.Tests.dll +Test (macos-latest) Build 2026-05-12T20:41:13.8194620Z +Test (macos-latest) Build 2026-05-12T20:41:13.8199080Z Build succeeded. +Test (macos-latest) Build 2026-05-12T20:41:13.8200590Z 0 Warning(s) +Test (macos-latest) Build 2026-05-12T20:41:13.8201500Z 0 Error(s) +Test (macos-latest) Build 2026-05-12T20:41:13.8202190Z +Test (macos-latest) Build 2026-05-12T20:41:13.8208560Z Time Elapsed 00:00:08.27 +Test (macos-latest) Run tests 2026-05-12T20:41:13.8605920Z ##[group]Run dotnet test --no-build --configuration Release --verbosity normal --collect:"XPlat Code Coverage" +Test (macos-latest) Run tests 2026-05-12T20:41:13.8615320Z ^[[36;1mdotnet test --no-build --configuration Release --verbosity normal --collect:"XPlat Code Coverage"^[[0m +Test (macos-latest) Run tests 2026-05-12T20:41:13.8671450Z shell: /bin/bash -e {0} +Test (macos-latest) Run tests 2026-05-12T20:41:13.8671700Z env: +Test (macos-latest) Run tests 2026-05-12T20:41:13.8671900Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Test (macos-latest) Run tests 2026-05-12T20:41:13.8672230Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Test (macos-latest) Run tests 2026-05-12T20:41:13.8672560Z DOTNET_NOLOGO: true +Test (macos-latest) Run tests 2026-05-12T20:41:13.8672830Z DOTNET_ROOT: /Users/runner/.dotnet +Test (macos-latest) Run tests 2026-05-12T20:41:13.8673150Z ##[endgroup] +Test (macos-latest) Run tests 2026-05-12T20:41:14.3233600Z Build started 5/12/2026 8:41:14 PM. +Test (macos-latest) Run tests 2026-05-12T20:41:14.4783390Z 1>Project "/Users/runner/work/link-cli/link-cli/csharp/Foundation.Data.Doublets.Cli.sln" on node 1 (VSTest target(s)). +Test (macos-latest) Run tests 2026-05-12T20:41:14.4785470Z 1>ValidateSolutionConfiguration: +Test (macos-latest) Run tests 2026-05-12T20:41:14.4786980Z Building solution configuration "Release|Any CPU". +Test (macos-latest) Run tests 2026-05-12T20:41:14.7430490Z Test run for /Users/runner/work/link-cli/link-cli/csharp/Foundation.Data.Doublets.Cli.Tests/bin/Release/net8/Foundation.Data.Doublets.Cli.Tests.dll (.NETCoreApp,Version=v8.0) +Test (macos-latest) Run tests 2026-05-12T20:41:15.0481390Z A total of 1 test files matched the specified pattern. +Test (macos-latest) Run tests 2026-05-12T20:41:18.1609540Z [xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v3.1.5+1b188a7b0a (64-bit .NET 8.0.27) +Test (macos-latest) Run tests 2026-05-12T20:41:18.2685630Z [xUnit.net 00:00:00.12] Discovering: Foundation.Data.Doublets.Cli.Tests +Test (macos-latest) Run tests 2026-05-12T20:41:18.3583000Z [xUnit.net 00:00:00.21] Discovered: Foundation.Data.Doublets.Cli.Tests +Test (macos-latest) Run tests 2026-05-12T20:41:18.4011690Z [xUnit.net 00:00:00.26] Starting: Foundation.Data.Doublets.Cli.Tests +Test (macos-latest) Run tests 2026-05-12T20:41:18.7708770Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.CreateAndRetriveUserDefinedTypeTest [69 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:18.7814210Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.CreateAndRetrieveMultipleStringTypesTest(typeName: "UnicodeSymbol") [24 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:18.7817690Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.CreateAndRetrieveMultipleStringTypesTest(typeName: "EmptyString") [12 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:18.8016090Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.CreateAndRetrieveMultipleStringTypesTest(typeName: "String") [2 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:18.8119770Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.CreateAndRetrieveMultipleStringTypesTest(typeName: "Name") [3 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:18.8222140Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.CreateAndRetrieveMultipleStringTypesTest(typeName: "UnicodeSequence") [1 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:18.8325010Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.BasicQueryProcessor.DeleteSingleLinkTest_Source2Target2 [117 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:18.8428590Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.CreateAndRetrieveMultipleStringTypesTest(typeName: "Type") [1 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:18.8476620Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.BasicQueryProcessor.DeleteMultipleLinksTest [3 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:18.8582500Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.BasicQueryProcessor.CreateSingleLinkTest [3 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:18.8720940Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.NameIsRemovedWhenExternalReferenceIsDeletedTest [6 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:18.8828930Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.BasicQueryProcessor.UpdateSingleLinkTest [6 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:18.8935740Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.NameExternalReferenceTest [4 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:18.9055310Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.BasicQueryProcessor.CreateLinkWithSource2Target2Test [1 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:18.9159800Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.CreateAndRetrieveUnicodeStringTest [3 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:18.9263560Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.BasicQueryProcessor.MultipleUpdatesTest [2 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:18.9376260Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.BasicQueryProcessor.CreateMultipleLinksTest [2 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:18.9481670Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.CreateAndRetrieveSimpleStringTest [2 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:18.9584820Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.BasicQueryProcessor.DeleteSingleLinkTest_Source1Target2 [3 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:18.9692120Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.DeletingNonNamedLinkDoesNotAffectOtherNamesTest [3 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:18.9804280Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.CreateAndRetrieveEmptyStringTest [8 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:18.9920220Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.RetrieveTypeByNameTest [2 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0024680Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.CreateAndRetrieveMultipleStringsTest [3 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0124940Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.NameIsRemovedWhenLinkIsDeletedTest [145 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0228530Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.ExternalReferenceCanUseNameThatAlreadyExistsInternallyTest [6 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0245910Z Passed Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.WriteToFile_WritesCompleteDatabaseAsLinoLines [36 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0247290Z Passed Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.FormatStructure_RendersLeftBranchWithLinkIndexes [2 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0248590Z Passed Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.FormatStructure_RendersRepeatedSourceAndTargetAsReferenceOnRight [6 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0249840Z Passed Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.FormatDatabase_EscapesNamesThatNeedQuoting [4 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0250740Z Passed Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.FormatDatabase_UsesNamesForIndexesSourcesAndTargets_WhenNamesExist [1 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0251860Z Passed Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.FormatDatabase_SelectsQuoteStyleForNamesContainingQuotes [4 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0252730Z Passed Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.FormatDatabase_UsesNumberedReferences_WhenLinksHaveNoNames [1 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0253690Z [Trace] Constructing NamedLinksDecorator with names DB: /var/folders/tb/y368xp_x10s3ty1b_mtl5mxr0000gn/T/tmpYSKKxl.names.links +Test (macos-latest) Run tests 2026-05-12T20:41:19.0254570Z Passed Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.SetName_OverwriteOldName [6 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0255610Z Passed Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.MakeNamesDatabaseFilename_CorrectlyGeneratesFilename(dbFilename: "test.db", expected: "test.names.links") [< 1 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0256820Z Passed Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.MakeNamesDatabaseFilename_CorrectlyGeneratesFilename(dbFilename: "a.b.c", expected: "a.b.names.links") [< 1 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0258070Z Passed Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.MakeNamesDatabaseFilename_CorrectlyGeneratesFilename(dbFilename: "/tmp/test.db", expected: "/tmp/test.names.links") [< 1 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0259090Z Passed Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.AfterCreation_SetNameAndGetName_ShouldWork [1 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0259980Z Passed Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.CanConstructNamedLinksDecorator [1 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0260780Z Passed Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.RemoveName_NonExistent_DoesNotThrow [1 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0262870Z Passed Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.RemoveName_ShouldReturnNullAfterRemoval [5 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0263790Z Passed Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.SetNameAndGetName_ShouldReturnSameName [8 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0264570Z Passed Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.DeleteLink_RemovesNameAutomatically [2 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0266210Z Passed Foundation.Data.Doublets.Cli.Tests.Issue62ReviewCoverageTests.ExplicitNumericIdUpdate_CanBeReversedWithAnotherUpdate [104 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0267270Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.CreateLinkWithSource2Target2Test [16 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0267990Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.DeleteAllLinksByIndexTest [8 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0268720Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.DeleteAllLinksBySourceAndTargetTest [4 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0269590Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.DeleteLinksByAnyTargetTest [6 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0270370Z Passed Foundation.Data.Doublets.Cli.Tests.Issue62ReviewCoverageTests.NamedLink_CreateDeleteRecreate_DoesNotLeaveStaleNameMapping [29 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0271170Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.DeleteLinksByAnySourceTest [6 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0272030Z [Trace] Constructing SimpleLinksDecorator with names DB: /var/folders/tb/y368xp_x10s3ty1b_mtl5mxr0000gn/T/tmpwd0b27.names.links +Test (macos-latest) Run tests 2026-05-12T20:41:19.0272730Z Passed Foundation.Data.Doublets.Cli.Tests.SimpleLinksDecoratorTests.CanConstructSimpleLinksDecorator [2 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0273450Z Passed Foundation.Data.Doublets.Cli.Tests.SimpleLinksDecoratorTests.Delete_WithRestriction_DoesNotThrow [3 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0274220Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.DeleteMultipleLinksTest [5 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0274940Z Passed Foundation.Data.Doublets.Cli.Tests.SimpleLinksDecoratorTests.DeleteAfterGetOrCreate_DoesNotThrow_WithTracing [21 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0275670Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.CreateMultipleLinksTest [29 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0276370Z Passed Foundation.Data.Doublets.Cli.Tests.SimpleLinksDecoratorTests.DeleteAfterGetOrCreate_DoesNotThrow [10 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0452420Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.ReverseSourceWithTargetUsingVariablesTest [25 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0454700Z Passed Foundation.Data.Doublets.Cli.Tests.PinnedTypesDecoratorTests.Should_Implement_Both_ILinks_And_IPinnedTypes [19 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0456740Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.CreateSingleLinkTest [1 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0458470Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.NoUpdateUsingVariablesTest [2 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0460310Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.DeleteSingleLinkTest_Source1Target2 [1 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0462300Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.MixedMultipleUpdatesTest [1 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0464150Z Passed Foundation.Data.Doublets.Cli.Tests.PinnedTypesDecoratorTests.Should_Support_Deconstruction [8 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0466140Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.DeleteSingleLinkTest_Source2Target2 [1 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0468230Z Passed Foundation.Data.Doublets.Cli.Tests.PinnedTypesDecoratorTests.Should_Work_As_ILinks_Decorator [1 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0470180Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.CreationWithEmptySlotDuringUpdateTest [1 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0471580Z === Debug: Alternative Scenario === +Test (macos-latest) Run tests 2026-05-12T20:41:19.0472220Z Input changes: +Test (macos-latest) Run tests 2026-05-12T20:41:19.0473390Z 1. (1: 1 2) -> (0: 0 0) +Test (macos-latest) Run tests 2026-05-12T20:41:19.0473990Z 2. (1: 1 2) -> (1: 2 1) +Test (macos-latest) Run tests 2026-05-12T20:41:19.0474390Z 3. (2: 2 1) -> (2: 1 2) +Test (macos-latest) Run tests 2026-05-12T20:41:19.0475010Z Actual simplified changes: +Test (macos-latest) Run tests 2026-05-12T20:41:19.0475560Z 1. (1: 1 2) -> (1: 2 1) +Test (macos-latest) Run tests 2026-05-12T20:41:19.0476080Z 2. (2: 2 1) -> (2: 1 2) +Test (macos-latest) Run tests 2026-05-12T20:41:19.0476640Z Count: 2 +Test (macos-latest) Run tests 2026-05-12T20:41:19.0477400Z === End Debug === +Test (macos-latest) Run tests 2026-05-12T20:41:19.0478710Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.CreateSingleLinkWithIndexAfterDoubleGapTest [< 1 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0482770Z Passed Foundation.Data.Doublets.Cli.Tests.PinnedTypesDecoratorTests.Should_Enumerate_PinnedTypes [2 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0484410Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.MultipleUpdatesTest [< 1 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0486190Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.CreateSingleLinkWithIndexAfterGapTest [< 1 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0493210Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.CreationDuringUpdateTest [< 1 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0494070Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.UpdateSingleLinkTest [2 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0494690Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.CreateSingleLinkWithIndexTest [1 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0495460Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.DeletionDuringUpdateTest [10 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0496040Z [Test] All links: (1: 2->1) (2: 1->2) +Test (macos-latest) Run tests 2026-05-12T20:41:19.0496940Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.ChangesSimplifierTests.SimplifyChanges_Issue26_AlternativeScenario_NoSimplificationOccurs [21 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0498170Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.ChangesSimplifierTests.SimplifyChanges_NoChange_StillKeepsFirstAndLastState [< 1 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0499070Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.ChangesSimplifierTests.SimplifyChanges_Issue26_UpdateOperationSimplification [< 1 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0500060Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.ChangesSimplifierTests.SimplifyChanges_SpecificExample_RemovesIntermediateStates [< 1 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0501000Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.ChangesSimplifierTests.SimplifyChanges_MultipleChainsFromSameBefore_RemovesIntermediateStates [< 1 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0502040Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.ChangesSimplifierTests.SimplifyChanges_MultipleBranchesFromSameInitial_ProducesCorrectFinalStates [< 1 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0503270Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.ChangesSimplifierTests.SimplifyChanges_MultipleBranchesFromSameInitial_ProducesCorrectFinalStates_InCorrectOrder [2 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0504370Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.ChangesSimplifierTests.SimplifyChanges_SpecificExample_KeepsUnchangedStates [< 1 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0505300Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.SwapSourceAndTargetForAllLinksUsingVariablesTest [31 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0800080Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.NameLookupConsistencyTest [21 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0903170Z Passed Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_UsesProvidedPinnedTypesDecorator [8 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0928460Z Passed Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_CanRemoveNames [6 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.0964950Z Passed Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_DeleteRemovesAssociatedNames [5 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.1017130Z Passed Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_CanSetAndGetNames [5 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.1030260Z Passed Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_HandlesNonexistentNames [4 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.1031780Z Passed Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_ReassigningExistingNameMovesNameToNewLink [4 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.1097110Z Passed Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_ImplementsILinks [4 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.1124470Z Passed Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_CanConstructFromDatabaseFilename [3 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.1129210Z Passed Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_CanEnumeratePinnedTypes [4 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.1160830Z Passed Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_CanOverwriteNames [6 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.1164630Z Passed Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_ImplementsIPinnedTypes [6 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.1165580Z Passed Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_ImplementsINamedTypes [3 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.1166450Z Passed Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_CanGetLinkByName [2 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.1167370Z Passed Foundation.Data.Doublets.Cli.Tests.PinnedTypesTests.Should_Terminate_Enumeration_When_Iterated_Without_Take [2 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.1168210Z Passed Foundation.Data.Doublets.Cli.Tests.PinnedTypesTests.Should_Validate_Existing_Links_With_Ulong [1 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.1170600Z Passed Foundation.Data.Doublets.Cli.Tests.PinnedTypesTests.Should_Destructure_PinnedTypes [< 1 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.1503100Z [Test] All links: (1: 2->1) (2: 2->2) +Test (macos-latest) Run tests 2026-05-12T20:41:19.1606290Z Passed Foundation.Data.Doublets.Cli.Tests.PinnedTypesTests.Should_Validate_Existing_Links [1 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.1709310Z Passed Foundation.Data.Doublets.Cli.Tests.PinnedTypesTests.Should_Reset_Enumerator [1 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.1812350Z Passed Foundation.Data.Doublets.Cli.Tests.PinnedTypesTests.Should_Throw_Exception_For_Invalid_Link_Structure [3 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.1921650Z Passed Foundation.Data.Doublets.Cli.Tests.PinnedTypesTests.Should_Create_And_Iterate_Over_Types [2 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.2007960Z Passed Foundation.Data.Doublets.Cli.Tests.PinnedTypesTests.Should_Create_And_Iterate_Over_Types_With_RealDataStore [4 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.2137240Z Passed Foundation.Data.Doublets.Cli.Tests.LinoDatabaseInputTests.ImportText_ReproducesNumberedLinksAtTheirExplicitIndexes [6 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.2240750Z Passed Foundation.Data.Doublets.Cli.Tests.LinoDatabaseInputTests.ImportText_TreatsOutOfRangeNumbersAsNames [6 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.2346710Z Passed Foundation.Data.Doublets.Cli.Tests.LinoDatabaseInputTests.ImportText_UnquotesNamesWrittenByExporter [5 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.2449780Z Passed Foundation.Data.Doublets.Cli.Tests.LinoDatabaseInputTests.ImportText_CreatesNamedReferencesAsPointLinks [3 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.2955130Z [Test] All links: (1: 1->2) (2: 2->1) +Test (macos-latest) Run tests 2026-05-12T20:41:19.3059500Z [Test] All links: (1: 1->1) (3: 3->3) +Test (macos-latest) Run tests 2026-05-12T20:41:19.4610790Z [Test] All links: (1: 1->1) (2: 2->1) +Test (macos-latest) Run tests 2026-05-12T20:41:19.4715100Z [Test] All links: (21: 21->21) +Test (macos-latest) Run tests 2026-05-12T20:41:19.5674650Z [Test] All links: (1: 1->1) (2: 2->2) +Test (macos-latest) Run tests 2026-05-12T20:41:19.5708990Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.SwapEqualSourceAndTargetUsingVariablesHasAllChangesTest [113 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.5797150Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.PersistentTransformationDecoratorTests.NeverRemovesMatchingStoredTrigger [12 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.5819190Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.PersistentTransformationDecoratorTests.AlwaysTriggerIsStoredInLinksAndAppliedAfterWrite [6 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.5970370Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.PersistentTransformationDecoratorTests.OnceTriggerDeletesItselfAfterFirstMatch [12 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.6072910Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MultipleUpdatesTest [145 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.6176170Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreationWithEmptySlotDuringUpdateTest [22 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.6278470Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLeftCompositeIntegerChildrenWithoutExtraLeaf_ShouldSucceed [142 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.6386440Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Issue20_SubstituteFullPointWithUnboundParts_ShouldKeepFullPoint [13 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.6492370Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MatchAndDelete2LevelNestedLinksTest [80 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:19.6902090Z [Test] All links: (2: 2->2) +Test (macos-latest) Run tests 2026-05-12T20:41:19.7003830Z [Trace] Constructing NamedTypesDecorator with names DB: /var/folders/tb/y368xp_x10s3ty1b_mtl5mxr0000gn/T/tmpFzEWAL.names.links +Test (macos-latest) Run tests 2026-05-12T20:41:19.7123760Z [ProcessQuery] Query: "(() ((link: link link)))" +Test (macos-latest) Run tests 2026-05-12T20:41:19.7226300Z [ProcessQuery] Parser returned 1 top-level link(s). +Test (macos-latest) Run tests 2026-05-12T20:41:19.7335190Z [ProcessQuery] Restriction link => Id="" Values.Count=0 +Test (macos-latest) Run tests 2026-05-12T20:41:19.7515380Z [ProcessQuery] Substitution link => Id="" Values.Count=1 +Test (macos-latest) Run tests 2026-05-12T20:41:19.7634970Z [ProcessQuery] No restriction, but substitution is non-empty => creation scenario. +Test (macos-latest) Run tests 2026-05-12T20:41:19.7746490Z [ValidateLinksExistOrWillBeCreated] Starting validation +Test (macos-latest) Run tests 2026-05-12T20:41:19.7848730Z [ValidateLinksExistOrWillBeCreated] Numeric links to be created: +Test (macos-latest) Run tests 2026-05-12T20:41:19.7956090Z [ValidateLinksExistOrWillBeCreated] Named links to be created: link +Test (macos-latest) Run tests 2026-05-12T20:41:19.8113290Z [Trace] GetByName called for name: 'link' +Test (macos-latest) Run tests 2026-05-12T20:41:19.8215300Z [Trace] GetByName result: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:19.8321670Z [ValidateReferencesInPattern] Named link 'link' reference validated in substitution pattern +Test (macos-latest) Run tests 2026-05-12T20:41:19.8426050Z [Trace] GetByName called for name: 'link' +Test (macos-latest) Run tests 2026-05-12T20:41:19.8527850Z [Trace] GetByName result: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:19.8631160Z [ValidateReferencesInPattern] Named link 'link' reference validated in substitution pattern +Test (macos-latest) Run tests 2026-05-12T20:41:19.8734060Z [ValidateLinksExistOrWillBeCreated] Validation completed +Test (macos-latest) Run tests 2026-05-12T20:41:19.8841610Z [Trace] GetByName called for name: 'link' +Test (macos-latest) Run tests 2026-05-12T20:41:19.8963030Z [Trace] GetByName result: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:19.9068930Z [Trace] Update called with restriction: [1] +Test (macos-latest) Run tests 2026-05-12T20:41:19.9209300Z [Trace] Debug: handlerWrapper invoked - before=1,0,0, after=1,0,0 +Test (macos-latest) Run tests 2026-05-12T20:41:19.9314060Z [Trace] Update result: 4294967295 +Test (macos-latest) Run tests 2026-05-12T20:41:19.9432820Z [EnsureNestedLinkCreatedRecursively] Created named leaf 'link' => ID=1 +Test (macos-latest) Run tests 2026-05-12T20:41:19.9537440Z [Trace] SetName called for link: 1 with name: 'link' +Test (macos-latest) Run tests 2026-05-12T20:41:19.9641590Z [Trace] RemoveName called for link: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:19.9745840Z [Trace] RemoveName completed for link: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:19.9855700Z [Trace] SetName result: 100 +Test (macos-latest) Run tests 2026-05-12T20:41:19.9973650Z [EnsureNestedLinkCreatedRecursively] Updating link ID=1 => Source=1, Target=1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.0075150Z [Trace] Update called with restriction: [1,0,0] +Test (macos-latest) Run tests 2026-05-12T20:41:20.0179680Z [Trace] Debug: handlerWrapper invoked - before=1,0,0, after=1,1,1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.0282620Z [EnsureNestedLinkCreatedRecursively] Update handler: before=(1: 0->0), after=(1: 1->1) +Test (macos-latest) Run tests 2026-05-12T20:41:20.0384080Z [Trace] Update result: 4294967295 +Test (macos-latest) Run tests 2026-05-12T20:41:20.0496970Z [ProcessQuery] Created link ID #1 from substitution pattern. +Test (macos-latest) Run tests 2026-05-12T20:41:20.0599410Z [Test] All links: (1: 1->1) +Test (macos-latest) Run tests 2026-05-12T20:41:20.0755670Z [Trace] GetByName called for name: 'link' +Test (macos-latest) Run tests 2026-05-12T20:41:20.0883540Z [Trace] GetByName result: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.0985160Z [Trace] GetName called for link: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.1096920Z [Trace] GetName result: link +Test (macos-latest) Run tests 2026-05-12T20:41:20.1169340Z [Test] All links: (1: 1->1) +Test (macos-latest) Run tests 2026-05-12T20:41:20.1226770Z [Test] All links: (1: 1->1) +Test (macos-latest) Run tests 2026-05-12T20:41:20.1228190Z [Test] All links: +Test (macos-latest) Run tests 2026-05-12T20:41:20.1372360Z [Test] All links: (1: 1->1) (2: 2->2) (3: 1->2) +Test (macos-latest) Run tests 2026-05-12T20:41:20.1468410Z [Test] All links: (1: 1->2) (2: 1->1) +Test (macos-latest) Run tests 2026-05-12T20:41:20.2281290Z [Test] All links: (1: 1->1) (2: 2->2) (3: 2->1) +Test (macos-latest) Run tests 2026-05-12T20:41:20.2428810Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteLinksByAnyTargetTest [132 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.2480470Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateNamedLinkWithStringId_ShouldCreateSingleLink [28 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.2484860Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeletionDuringUpdateTest [166 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.2502490Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateNamedLinkWithMissingNamedReferences_ShouldThrowException [12 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.2505650Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithIntegerId_ShouldCreateSingleLink [144 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.2507280Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteAllLinksByIndexTest [17 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.2508990Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateNamedFamilyLinksTest [80 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.2510720Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateDuplicatePairWithNumericLinks_ShouldCreateOnlyOneSubLink [5 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.2512760Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.StringAliasesInVariableRestriction_ShouldConstrainMatchesToNamedLinks [74 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.2546000Z [Test] All links: (2: 2->2) +Test (macos-latest) Run tests 2026-05-12T20:41:20.3247870Z [Test] All links: (1: 1->1) (2: 2->2) (3: 2->1) (4: 3->3) +Test (macos-latest) Run tests 2026-05-12T20:41:20.3341440Z [Test] All links: (1: 1->1) (2: 2->2) (3: 1->2) +Test (macos-latest) Run tests 2026-05-12T20:41:20.3755330Z [Test] All links: (1: 1->2) (2: 2->1) +Test (macos-latest) Run tests 2026-05-12T20:41:20.3857760Z [Test] All links: (1: 2->1) (2: 1->1) +Test (macos-latest) Run tests 2026-05-12T20:41:20.3960480Z [Test] ===== Starting UpdateNamedLinkNameTest ===== +Test (macos-latest) Run tests 2026-05-12T20:41:20.4070740Z [Trace] Constructing NamedTypesDecorator with names DB: /var/folders/tb/y368xp_x10s3ty1b_mtl5mxr0000gn/T/tmpUPZ2Ji.names.links +Test (macos-latest) Run tests 2026-05-12T20:41:20.4173720Z [Test] Constants: Null=0, Any=4294967292, Continue=4294967295 +Test (macos-latest) Run tests 2026-05-12T20:41:20.4201990Z [Test] Step 1: Creating initial link +Test (macos-latest) Run tests 2026-05-12T20:41:20.4220120Z [Test] Query: (() ((child: father mother))) +Test (macos-latest) Run tests 2026-05-12T20:41:20.4239830Z [ProcessQuery] Query: "(() ((child: father mother)))" +Test (macos-latest) Run tests 2026-05-12T20:41:20.4299450Z [ProcessQuery] Parser returned 1 top-level link(s). +Test (macos-latest) Run tests 2026-05-12T20:41:20.4314260Z [ProcessQuery] Restriction link => Id="" Values.Count=0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.4355590Z [ProcessQuery] Substitution link => Id="" Values.Count=1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.4385000Z [ProcessQuery] No restriction, but substitution is non-empty => creation scenario. +Test (macos-latest) Run tests 2026-05-12T20:41:20.4438530Z [ValidateLinksExistOrWillBeCreated] Starting validation +Test (macos-latest) Run tests 2026-05-12T20:41:20.4494810Z [ValidateLinksExistOrWillBeCreated] Numeric links to be created: +Test (macos-latest) Run tests 2026-05-12T20:41:20.4542510Z [ValidateLinksExistOrWillBeCreated] Named links to be created: child +Test (macos-latest) Run tests 2026-05-12T20:41:20.4625810Z [Trace] GetByName called for name: 'father' +Test (macos-latest) Run tests 2026-05-12T20:41:20.4737550Z [Trace] GetByName result: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.4848430Z [Trace] GetByName called for name: 'mother' +Test (macos-latest) Run tests 2026-05-12T20:41:20.4891440Z [Trace] GetByName result: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.4902840Z [Trace] GetByName called for name: 'father' +Test (macos-latest) Run tests 2026-05-12T20:41:20.5004490Z [Trace] GetByName result: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.5044370Z [ValidateLinksExistOrWillBeCreated] Auto-creating missing named reference 'father' as point link. +Test (macos-latest) Run tests 2026-05-12T20:41:20.5147060Z [Trace] GetByName called for name: 'father' +Test (macos-latest) Run tests 2026-05-12T20:41:20.5235340Z [Trace] GetByName result: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.5300400Z [Trace] Update called with restriction: [1] +Test (macos-latest) Run tests 2026-05-12T20:41:20.5400550Z [Trace] Debug: handlerWrapper invoked - before=1,0,0, after=1,0,0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.5445380Z [Trace] Update result: 4294967295 +Test (macos-latest) Run tests 2026-05-12T20:41:20.5479860Z [Trace] SetName called for link: 1 with name: 'father' +Test (macos-latest) Run tests 2026-05-12T20:41:20.5480740Z [Trace] RemoveName called for link: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.5481620Z [Trace] RemoveName completed for link: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.5482360Z [Trace] SetName result: 108 +Test (macos-latest) Run tests 2026-05-12T20:41:20.5484110Z [Trace] Update called with restriction: [1,0,0] +Test (macos-latest) Run tests 2026-05-12T20:41:20.5485150Z [Trace] Debug: handlerWrapper invoked - before=1,0,0, after=1,1,1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.5521130Z [Trace] Update result: 4294967295 +Test (macos-latest) Run tests 2026-05-12T20:41:20.5534580Z [Trace] GetByName called for name: 'mother' +Test (macos-latest) Run tests 2026-05-12T20:41:20.5549710Z [Trace] GetByName result: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.5564590Z [ValidateLinksExistOrWillBeCreated] Auto-creating missing named reference 'mother' as point link. +Test (macos-latest) Run tests 2026-05-12T20:41:20.5567070Z [Trace] GetByName called for name: 'mother' +Test (macos-latest) Run tests 2026-05-12T20:41:20.5567880Z [Trace] GetByName result: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.5568590Z [Trace] Update called with restriction: [2] +Test (macos-latest) Run tests 2026-05-12T20:41:20.5569360Z [Trace] Debug: handlerWrapper invoked - before=2,0,0, after=2,0,0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.5572010Z [Trace] Update result: 4294967295 +Test (macos-latest) Run tests 2026-05-12T20:41:20.5573850Z [Trace] SetName called for link: 2 with name: 'mother' +Test (macos-latest) Run tests 2026-05-12T20:41:20.5582870Z [Trace] RemoveName called for link: 2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.5583660Z [Trace] RemoveName completed for link: 2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.5584380Z [Trace] SetName result: 110 +Test (macos-latest) Run tests 2026-05-12T20:41:20.5585040Z [Trace] Update called with restriction: [2,0,0] +Test (macos-latest) Run tests 2026-05-12T20:41:20.5585780Z [Trace] Debug: handlerWrapper invoked - before=2,0,0, after=2,2,2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.5586580Z [Trace] Update result: 4294967295 +Test (macos-latest) Run tests 2026-05-12T20:41:20.5587380Z [ValidateLinksExistOrWillBeCreated] Validation completed +Test (macos-latest) Run tests 2026-05-12T20:41:20.5588180Z [Trace] GetByName called for name: 'father' +Test (macos-latest) Run tests 2026-05-12T20:41:20.5588840Z [Trace] GetByName result: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.5589600Z [EnsureNestedLinkCreatedRecursively] Found existing named leaf 'father' => ID=1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.5590510Z [Trace] GetByName called for name: 'mother' +Test (macos-latest) Run tests 2026-05-12T20:41:20.5591270Z [Trace] GetByName result: 2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.5592030Z [EnsureNestedLinkCreatedRecursively] Found existing named leaf 'mother' => ID=2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.5592890Z [EnsureLinkCreated] Creating link for (S=1, T=2). +Test (macos-latest) Run tests 2026-05-12T20:41:20.5593660Z [EnsureLinkCreated] => assigned new ID=3 +Test (macos-latest) Run tests 2026-05-12T20:41:20.5594320Z [Trace] Update called with restriction: [3] +Test (macos-latest) Run tests 2026-05-12T20:41:20.5595090Z [Trace] Debug: handlerWrapper invoked - before=3,0,0, after=3,1,2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.5595880Z [Trace] Update result: 4294967295 +Test (macos-latest) Run tests 2026-05-12T20:41:20.5596880Z [EnsureNestedLinkCreatedRecursively] Created or ensured composite link => Index=0, Source=1, Target=2 => Actual ID=3 +Test (macos-latest) Run tests 2026-05-12T20:41:20.5597820Z [Trace] SetName called for link: 3 with name: 'child' +Test (macos-latest) Run tests 2026-05-12T20:41:20.5598520Z [Trace] RemoveName called for link: 3 +Test (macos-latest) Run tests 2026-05-12T20:41:20.5599160Z [Trace] RemoveName completed for link: 3 +Test (macos-latest) Run tests 2026-05-12T20:41:20.5599880Z [Trace] SetName result: 118 +Test (macos-latest) Run tests 2026-05-12T20:41:20.5601990Z [ProcessQuery] Created link ID #3 from substitution pattern. +Test (macos-latest) Run tests 2026-05-12T20:41:20.5604300Z [Test] Initial link creation completed +Test (macos-latest) Run tests 2026-05-12T20:41:20.5605430Z [Test] Step 2: Verifying initial state +Test (macos-latest) Run tests 2026-05-12T20:41:20.5608590Z [Trace] GetByName called for name: 'child' +Test (macos-latest) Run tests 2026-05-12T20:41:20.5611010Z [Trace] GetByName result: 3 +Test (macos-latest) Run tests 2026-05-12T20:41:20.5614300Z [Test] Initial child ID: 3 +Test (macos-latest) Run tests 2026-05-12T20:41:20.5616270Z [Trace] GetByName called for name: 'father' +Test (macos-latest) Run tests 2026-05-12T20:41:20.5717500Z [Trace] GetByName result: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.5718890Z [Test] Initial father ID: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.5802760Z [Trace] GetByName called for name: 'mother' +Test (macos-latest) Run tests 2026-05-12T20:41:20.5847150Z [Trace] GetByName result: 2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.5953180Z [Test] Initial mother ID: 2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6030760Z [Test] Initial links count: 3 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6131840Z [Test] Initial link: Index=(1: 1->1), Source=1, Target=1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6139600Z [Test] Initial link: Index=(2: 2->2), Source=2, Target=2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6143030Z [Test] Initial link: Index=(3: 1->2), Source=1, Target=2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6145510Z [Test] Initial state verification completed +Test (macos-latest) Run tests 2026-05-12T20:41:20.6146440Z [Test] Step 3: Updating link name from 'child' to 'son' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6152410Z [Test] Query: (((child: father mother)) ((son: father mother))) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6152720Z [Test] Current state before update: +Test (macos-latest) Run tests 2026-05-12T20:41:20.6152960Z [Trace] GetByName called for name: 'child' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6153180Z [Trace] GetByName result: 3 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6153770Z [Test] - child name exists: True +Test (macos-latest) Run tests 2026-05-12T20:41:20.6154050Z [Trace] GetByName called for name: 'son' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6154480Z [Trace] GetByName result: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6154670Z [Test] - son name exists: False +Test (macos-latest) Run tests 2026-05-12T20:41:20.6158890Z [Trace] GetByName called for name: 'father' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6159830Z [Trace] GetByName result: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6160230Z [Test] - father name exists: True +Test (macos-latest) Run tests 2026-05-12T20:41:20.6160650Z [Trace] GetByName called for name: 'mother' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6161070Z [Trace] GetByName result: 2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6161460Z [Test] - mother name exists: True +Test (macos-latest) Run tests 2026-05-12T20:41:20.6161890Z [Test] Starting ProcessQuery for update... +Test (macos-latest) Run tests 2026-05-12T20:41:20.6162320Z [Test] Current links before update: +Test (macos-latest) Run tests 2026-05-12T20:41:20.6162780Z [Test] Link: Index=(1: 1->1), Source=1, Target=1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6163250Z [Test] Link: Index=(2: 2->2), Source=2, Target=2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6163710Z [Test] Link: Index=(3: 1->2), Source=1, Target=2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6164260Z [ProcessQuery] Query: "(((child: father mother)) ((son: father mother)))" +Test (macos-latest) Run tests 2026-05-12T20:41:20.6164920Z [ProcessQuery] Parser returned 1 top-level link(s). +Test (macos-latest) Run tests 2026-05-12T20:41:20.6165420Z [ProcessQuery] Restriction link => Id="" Values.Count=1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6165950Z [ProcessQuery] Substitution link => Id="" Values.Count=1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6166700Z [ProcessQuery] Restriction patterns to parse: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6167190Z [ProcessQuery] Substitution patterns to parse: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6167690Z [ValidateLinksExistOrWillBeCreated] Starting validation +Test (macos-latest) Run tests 2026-05-12T20:41:20.6168230Z [ValidateLinksExistOrWillBeCreated] Numeric links to be created: +Test (macos-latest) Run tests 2026-05-12T20:41:20.6168970Z [ValidateLinksExistOrWillBeCreated] Named links to be created: son +Test (macos-latest) Run tests 2026-05-12T20:41:20.6169530Z [Trace] GetByName called for name: 'child' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6172020Z [Trace] GetByName result: 3 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6179570Z [ValidateReferencesInPattern] Named link 'child' reference validated in restriction pattern +Test (macos-latest) Run tests 2026-05-12T20:41:20.6180240Z [Trace] GetByName called for name: 'father' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6180700Z [Trace] GetByName result: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6181310Z [ValidateReferencesInPattern] Named link 'father' reference validated in restriction pattern +Test (macos-latest) Run tests 2026-05-12T20:41:20.6181950Z [Trace] GetByName called for name: 'mother' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6182410Z [Trace] GetByName result: 2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6182820Z [ValidateReferencesInPattern] Named link 'mother' reference validated in restriction pattern +Test (macos-latest) Run tests 2026-05-12T20:41:20.6183200Z [Trace] GetByName called for name: 'father' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6192160Z [Trace] GetByName result: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6217350Z [ValidateReferencesInPattern] Named link 'father' reference validated in substitution pattern +Test (macos-latest) Run tests 2026-05-12T20:41:20.6220340Z [Trace] GetByName called for name: 'mother' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6221470Z [Trace] GetByName result: 2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6222970Z [ValidateReferencesInPattern] Named link 'mother' reference validated in substitution pattern +Test (macos-latest) Run tests 2026-05-12T20:41:20.6303770Z [ValidateLinksExistOrWillBeCreated] Validation completed +Test (macos-latest) Run tests 2026-05-12T20:41:20.6306800Z [ProcessQuery] Detected single sub-link with 2 sub-values => replaced with one composite restriction pattern. +Test (macos-latest) Run tests 2026-05-12T20:41:20.6307660Z [ProcessQuery] Converting restriction patterns => done. +Test (macos-latest) Run tests 2026-05-12T20:41:20.6308300Z [ProcessQuery] Converting substitution patterns => done. +Test (macos-latest) Run tests 2026-05-12T20:41:20.6311530Z [ProcessQuery] Finding solutions for restriction patterns... +Test (macos-latest) Run tests 2026-05-12T20:41:20.6312150Z [Trace] GetByName called for name: 'child' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6314380Z [Trace] GetByName result: 3 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6316020Z [Trace] GetByName called for name: 'father' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6316800Z [Trace] GetByName result: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6317760Z [Trace] GetByName called for name: 'mother' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6319640Z [Trace] GetByName result: 2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6320240Z [ProcessQuery] Found 1 total solution(s) matching restriction patterns. +Test (macos-latest) Run tests 2026-05-12T20:41:20.6320880Z [Trace] GetByName called for name: 'child' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6374130Z [Trace] GetByName result: 3 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6374440Z [Trace] GetByName called for name: 'father' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6374700Z [Trace] GetByName result: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6374900Z [Trace] GetByName called for name: 'mother' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6375980Z [Trace] GetByName result: 2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6379630Z [Trace] GetByName called for name: 'son' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6379970Z [Trace] GetByName result: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6381840Z [Trace] GetByName called for name: 'father' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6382140Z [Trace] GetByName result: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6382410Z [Trace] GetByName called for name: 'mother' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6382630Z [Trace] GetByName result: 2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6382880Z [ProcessQuery] allSolutionsNoOperation=False +Test (macos-latest) Run tests 2026-05-12T20:41:20.6383290Z [ProcessQuery] Some solutions lead to actual changes => building operations. +Test (macos-latest) Run tests 2026-05-12T20:41:20.6386680Z [Trace] GetByName called for name: 'son' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6386930Z [Trace] GetByName result: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6387190Z [Trace] GetByName called for name: 'father' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6388390Z [Trace] GetByName result: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6388680Z [Trace] GetByName called for name: 'mother' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6388940Z [Trace] GetByName result: 2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6389170Z [Trace] GetByName called for name: 'child' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6389400Z [Trace] GetByName result: 3 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6389640Z [Trace] GetByName called for name: 'father' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6389880Z [Trace] GetByName result: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6390090Z [Trace] GetByName called for name: 'mother' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6390330Z [Trace] GetByName result: 2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6390680Z [ProcessQuery] For a solution => substitution links count=1, restriction links count=1. +Test (macos-latest) Run tests 2026-05-12T20:41:20.6391140Z [ProcessQuery] => 2 operation(s) derived from these patterns. +Test (macos-latest) Run tests 2026-05-12T20:41:20.6391460Z [ProcessQuery] All planned operations => 2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6391750Z [ProcessQuery] Applying all planned operations... +Test (macos-latest) Run tests 2026-05-12T20:41:20.6395520Z [ApplyAllPlannedOperations] Operation: before=(3:1->2), after=(0:0->0) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6395900Z [Trace] GetName called for link: 3 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6396140Z [Trace] GetName result: child +Test (macos-latest) Run tests 2026-05-12T20:41:20.6396430Z [ApplyAllPlannedOperations] Name for before.Index 3 = 'child' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6396840Z [ApplyAllPlannedOperations] Deleting link => ID=3, S=1, T=2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6397240Z [RemoveLinks] Found 1 link(s) matching (ID=3, S=1, T=2). +Test (macos-latest) Run tests 2026-05-12T20:41:20.6397530Z [Trace] RemoveName called for link: 3 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6398850Z [Trace] RemoveName completed for link: 3 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6399100Z [RemoveLinks] Deleting link => ID=3, S=1, T=2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6399360Z [Trace] Delete called with restriction: [3,1,2] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6399830Z [Trace] Debug: this._links is of type: Foundation.Data.Doublets.Cli.PinnedTypesDecorator`1[System.UInt32] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6400260Z [Trace] Debug: Calling underlying _links.Delete +Test (macos-latest) Run tests 2026-05-12T20:41:20.6400580Z [Trace] Debug: handlerWrapper invoked - before=3,1,2, after=3,0,0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6400860Z [Test] Update ChangesHandler called: +Test (macos-latest) Run tests 2026-05-12T20:41:20.6407710Z [Test] - Before state: (3: 1->2) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6408450Z [Test] - After state: (3: 0->0) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6409100Z [Trace] GetByName called for name: 'child' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6409700Z [Trace] GetByName result: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6410230Z [Test] - child name during change: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6410820Z [Trace] GetByName called for name: 'son' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6411390Z [Trace] GetByName result: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6414250Z [Test] - son name during change: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6429730Z [Trace] GetByName called for name: 'father' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6430370Z [Trace] GetByName result: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6430900Z [Test] - father name during change: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6431510Z [Trace] GetByName called for name: 'mother' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6432080Z [Trace] GetByName result: 2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6432610Z [Test] - mother name during change: 2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6433160Z [Test] - All links during change: +Test (macos-latest) Run tests 2026-05-12T20:41:20.6433790Z [Test] Link: Index=(1: 1->1), Source=1, Target=1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6434500Z [Test] Link: Index=(2: 2->2), Source=2, Target=2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6435190Z [Test] Link: Index=(3: 0->0), Source=0, Target=0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6437160Z [Trace] Debug: handlerWrapper invoked - before=3,0,0, after=null +Test (macos-latest) Run tests 2026-05-12T20:41:20.6437910Z [Trace] RemoveName called for link: 3 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6438510Z [Trace] RemoveName completed for link: 3 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6456180Z [Test] Update ChangesHandler called: +Test (macos-latest) Run tests 2026-05-12T20:41:20.6456850Z [Test] - Before state: (3: 0->0) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6457350Z [Test] - After state: +Test (macos-latest) Run tests 2026-05-12T20:41:20.6457860Z [Trace] GetByName called for name: 'child' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6458440Z [Trace] GetByName result: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6458950Z [Test] - child name during change: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6459560Z [Trace] GetByName called for name: 'son' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6460120Z [Trace] GetByName result: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6460640Z [Test] - son name during change: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6461220Z [Trace] GetByName called for name: 'father' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6461800Z [Trace] GetByName result: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6462320Z [Test] - father name during change: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6462970Z [Trace] GetByName called for name: 'mother' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6463570Z [Trace] GetByName result: 2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6464090Z [Test] - mother name during change: 2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6464920Z [Test] - All links during change: +Test (macos-latest) Run tests 2026-05-12T20:41:20.6465550Z [Test] Link: Index=(1: 1->1), Source=1, Target=1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6466250Z [Test] Link: Index=(2: 2->2), Source=2, Target=2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6466890Z [Trace] Debug: Delete result: 4294967295 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6469540Z [ApplyAllPlannedOperations] Operation: before=(0:0->0), after=(4294967292:1->2) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6470490Z [Trace] GetName called for link: 4294967292 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6471100Z [Trace] GetName result: String +Test (macos-latest) Run tests 2026-05-12T20:41:20.6472000Z [ApplyAllPlannedOperations] Name for after.Index 4294967292 = 'String' (pre-op) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6473140Z [ApplyAllPlannedOperations] Creating link => ID=4294967292, S=1, T=2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6474260Z [CreateOrUpdateLink] Detected wildcard substitution => nested create & name. +Test (macos-latest) Run tests 2026-05-12T20:41:20.6475360Z [Trace] GetByName called for name: 'father' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6475970Z [Trace] GetByName result: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6476860Z [EnsureNestedLinkCreatedRecursively] Found existing named leaf 'father' => ID=1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6477830Z [Trace] GetByName called for name: 'mother' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6478450Z [Trace] GetByName result: 2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6479320Z [EnsureNestedLinkCreatedRecursively] Found existing named leaf 'mother' => ID=2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6480370Z [EnsureLinkCreated] Creating link for (S=1, T=2). +Test (macos-latest) Run tests 2026-05-12T20:41:20.6481060Z [EnsureLinkCreated] => assigned new ID=3 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6481680Z [Test] Update ChangesHandler called: +Test (macos-latest) Run tests 2026-05-12T20:41:20.6482230Z [Test] - Before state: +Test (macos-latest) Run tests 2026-05-12T20:41:20.6482910Z [Test] - After state: (3: 0->0) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6483540Z [Trace] GetByName called for name: 'child' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6484130Z [Trace] GetByName result: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6484710Z [Test] - child name during change: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6485330Z [Trace] GetByName called for name: 'son' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6485900Z [Trace] GetByName result: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6486400Z [Test] - son name during change: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6487000Z [Trace] GetByName called for name: 'father' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6487580Z [Trace] GetByName result: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6488100Z [Test] - father name during change: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6488700Z [Trace] GetByName called for name: 'mother' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6489280Z [Trace] GetByName result: 2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6489850Z [Test] - mother name during change: 2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6490440Z [Test] - All links during change: +Test (macos-latest) Run tests 2026-05-12T20:41:20.6491060Z [Test] Link: Index=(1: 1->1), Source=1, Target=1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6491750Z [Test] Link: Index=(2: 2->2), Source=2, Target=2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6492450Z [Test] Link: Index=(3: 0->0), Source=0, Target=0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6493180Z [Test] Creating new link: Index=3, Source=0, Target=0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6493910Z [Test] Checking if link exists: True +Test (macos-latest) Run tests 2026-05-12T20:41:20.6495840Z [Test] Checking if source exists: False +Test (macos-latest) Run tests 2026-05-12T20:41:20.6496450Z [Test] Checking if target exists: False +Test (macos-latest) Run tests 2026-05-12T20:41:20.6497150Z [Test] Names before creation: +Test (macos-latest) Run tests 2026-05-12T20:41:20.6497710Z [Trace] GetByName called for name: 'child' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6498290Z [Trace] GetByName result: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6498710Z [Test] - child: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6528640Z [Trace] GetByName called for name: 'son' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6529560Z [Trace] GetByName result: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6530000Z [Test] - son: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6530490Z [Trace] GetByName called for name: 'father' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6531070Z [Trace] GetByName result: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6531540Z [Test] - father: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6532040Z [Trace] GetByName called for name: 'mother' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6532630Z [Trace] GetByName result: 2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6533080Z [Test] - mother: 2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6533590Z [Trace] Update called with restriction: [3] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6534410Z [Trace] Debug: handlerWrapper invoked - before=3,0,0, after=3,1,2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6535250Z [Test] Update ChangesHandler called: +Test (macos-latest) Run tests 2026-05-12T20:41:20.6535840Z [Test] - Before state: (3: 0->0) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6536370Z [Test] - After state: (3: 1->2) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6536930Z [Trace] GetByName called for name: 'child' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6537930Z [Trace] GetByName result: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6538460Z [Test] - child name during change: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6539060Z [Trace] GetByName called for name: 'son' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6539620Z [Trace] GetByName result: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6540140Z [Test] - son name during change: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6540730Z [Trace] GetByName called for name: 'father' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6541310Z [Trace] GetByName result: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6541830Z [Test] - father name during change: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6542450Z [Trace] GetByName called for name: 'mother' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6543030Z [Trace] GetByName result: 2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6543670Z [Test] - mother name during change: 2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6544380Z [Test] - All links during change: +Test (macos-latest) Run tests 2026-05-12T20:41:20.6545040Z [Test] Link: Index=(1: 1->1), Source=1, Target=1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6546010Z [Test] Link: Index=(2: 2->2), Source=2, Target=2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6546770Z [Test] Link: Index=(3: 1->2), Source=1, Target=2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6547430Z [Trace] Update result: 4294967295 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6548690Z [EnsureNestedLinkCreatedRecursively] Created or ensured composite link => Index=0, Source=1, Target=2 => Actual ID=3 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6549990Z [Trace] SetName called for link: 3 with name: 'son' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6550660Z [Trace] RemoveName called for link: 3 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6551280Z [Trace] RemoveName completed for link: 3 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6552010Z [Trace] SetName result: 118 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6552730Z [Trace] GetName called for link: 4294967292 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6553550Z [Trace] GetName result: String +Test (macos-latest) Run tests 2026-05-12T20:41:20.6554530Z [ApplyAllPlannedOperations] Name for after.Index 4294967292 = 'String' (post-op) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6555670Z [ProcessQuery] Restoring unexpected deletions if any... +Test (macos-latest) Run tests 2026-05-12T20:41:20.6556580Z [RestoreUnexpectedLinkDeletions] No unexpected deletions found. +Test (macos-latest) Run tests 2026-05-12T20:41:20.6557410Z [ProcessQuery] Finished processing query. +Test (macos-latest) Run tests 2026-05-12T20:41:20.6558050Z [Test] Update operation completed +Test (macos-latest) Run tests 2026-05-12T20:41:20.6558620Z [Test] Step 4: Verifying final state +Test (macos-latest) Run tests 2026-05-12T20:41:20.6559250Z [Trace] GetByName called for name: 'child' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6559880Z [Trace] GetByName result: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6560390Z [Test] Final child ID: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6560950Z [Trace] GetByName called for name: 'son' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6561520Z [Trace] GetByName result: 3 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6562020Z [Test] Final son ID: 3 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6562540Z [Trace] GetByName called for name: 'father' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6563120Z [Trace] GetByName result: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6563600Z [Test] Final father ID: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6564140Z [Trace] GetByName called for name: 'mother' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6565780Z [Trace] GetByName result: 2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6570260Z [Test] Final mother ID: 2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6570920Z [Test] Final links count: 3 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6573170Z [Test] Final link: Index=(1: 1->1), Source=1, Target=1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6573690Z [Test] Final link: Index=(2: 2->2), Source=2, Target=2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6574060Z [Test] Final link: Index=(3: 1->2), Source=1, Target=2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6574490Z [Test] ===== UpdateNamedLinkNameTest completed successfully ===== +Test (macos-latest) Run tests 2026-05-12T20:41:20.6577250Z [Test] All links: (1: 1->1) (2: 2->2) (3: 3->3) (4: 4->4) (5: 5->5) (6: 6->6) (7: 5->6) (8: 4->7) (9: 3->8) (10: 2->9) (11: 1->10) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6579410Z [Test] All links: (1: 1->1) (2: 1->2) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6580130Z [Test] All links: (10: 10->10) (20: 10->20) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6581580Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateSingleLinkWithIndexAfterGapTest [39 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6584310Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateDuplicatePairWithNamedLinks_ShouldCreateOnlyOneSubLink [72 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6587420Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateNamedLinkWithAutoCreateMissingNamedReferences_ShouldCreatePointLinks [2 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6590320Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateMultipleLinksWithCrossReferences_ShouldSucceed [39 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6592930Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MakeAllLinksToGoIntoFirstLinkUsingVariablesTest [8 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6595240Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.UpdateNamedLinkNameTest [24 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6597490Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Create6LevelNestedLinksTest [14 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6600050Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateRightCompositeStringChildrenWithoutExtraLeaf_ShouldSucceed [5 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6606910Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithAutoCreateMissingNumericReferences_ShouldCreatePointLinks [2 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6608460Z [Test] All links: (1: 1->1) (2: 2->2) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6608790Z [Test] All links: (1: 1->1) (2: 2->2) (3: 2->1) (4: 3->3) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6609150Z [Test] All links: (1: 1->1) (2: 1->2) (3: 3->1) (4: 1->4) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6609480Z [Test] All links: (1: 1->1) (2: 1->2) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6609880Z [Test] All links: (1: 1->1) (2: 2->2) (3: 3->3) (4: 4->4) (5: 5->5) (6: 4->5) (7: 3->6) (8: 2->7) (9: 1->8) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6610250Z [Test] All links: (1: 1->1) (2: 2->2) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6610490Z [Test] All links: (1: 1->2) (2: 2->2) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6610750Z [Test] All links: (1: 1->2) (2: 2->1) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6611880Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateMultipleLinksTest [5 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6612810Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateMixedNamedAndNumericLinks_ShouldReuseExistingLinks [2 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6614800Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MatchSelfReferencingAndMakeThemGoOutFromFirstLinkUsingVariablesTest [4 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6615920Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateRightCompositeIntegerChildrenWithoutExtraLeaf_ShouldSucceed [2 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6616890Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.EnsureCreated_WithSpecialAnyReference_ShouldThrowControlledException [5 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6617700Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Create5LevelNestedLinksTest [5 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6618610Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MatchWithExactIndexAndDelete2LevelNestedLinksTest [8 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6620510Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.UpdateSingleLinkTest [11 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6621170Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MixedMultipleUpdatesTest [12 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6621640Z [Test] All links: +Test (macos-latest) Run tests 2026-05-12T20:41:20.6621910Z [Test] All links: (1: 1->1) (2: 2->2) (3: 1->2) (4: 2->1) (5: 3->4) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6622200Z [Test] All links: (1: 1->1) (2: 2->1) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6622420Z [Test] All links: (1: 1->1) (2: 2->2) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6622640Z [Test] All links: (1: 1->2) (2: 1->1) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6622860Z [Test] All links: (3: 3->3) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6623180Z [Test] All links: (1: 1->1) (2: 18->20) (18: 1->21) (19: 1->20) (20: 20->20) (21: 21->21) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6623490Z [Test] All links: (1: 1->1) (2: 2->2) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6623990Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.NestedDeleteAllLinksBySourceAndTargetTest1 [7 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6624870Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateWithDifferentPairs_ShouldNotDeduplicateDifferentLinks [9 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6627360Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLeftCompositeStringChildrenWithoutExtraLeaf_ShouldSucceed [3 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6628820Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.NoExactMatch2LevelNestedLinksTest [15 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6629640Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MakeAllLinksToGoOutOfFirstLinkUsingVariablesTest [3 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6630490Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateSingleLinkWithIndexAfterDoubleGapTest [8 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6631380Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Issue20_SubstituteMatchedLinkAndOutgoingLink_ShouldPreserveExistingParts [7 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6632260Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteNamedFamilyLinksRemovesNamesTest [5 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6633080Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.ExactMatchAndDelete2LevelNestedLinksTest [3 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6633630Z [Test] All links: (1: 0->0) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6633850Z [Test] All links: (1: 1->1) (2: 2->2) (3: 1->2) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6634060Z [Test] All links: (1: 1->1) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6634530Z [Trace] Constructing NamedTypesDecorator with names DB: /var/folders/tb/y368xp_x10s3ty1b_mtl5mxr0000gn/T/tmpkefGyW.names.links +Test (macos-latest) Run tests 2026-05-12T20:41:20.6634980Z [Test] Starting UpdateNamedLinkNameTest +Test (macos-latest) Run tests 2026-05-12T20:41:20.6635200Z [Test] Step 1: Creating initial link +Test (macos-latest) Run tests 2026-05-12T20:41:20.6635480Z [ProcessQuery] Query: "(() ((child: father mother)))" +Test (macos-latest) Run tests 2026-05-12T20:41:20.6635780Z [ProcessQuery] Parser returned 1 top-level link(s). +Test (macos-latest) Run tests 2026-05-12T20:41:20.6636080Z [ProcessQuery] Restriction link => Id="" Values.Count=0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6636630Z [ProcessQuery] Substitution link => Id="" Values.Count=1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6637020Z [ProcessQuery] No restriction, but substitution is non-empty => creation scenario. +Test (macos-latest) Run tests 2026-05-12T20:41:20.6637400Z [ValidateLinksExistOrWillBeCreated] Starting validation +Test (macos-latest) Run tests 2026-05-12T20:41:20.6637750Z [ValidateLinksExistOrWillBeCreated] Numeric links to be created: +Test (macos-latest) Run tests 2026-05-12T20:41:20.6638140Z [ValidateLinksExistOrWillBeCreated] Named links to be created: child +Test (macos-latest) Run tests 2026-05-12T20:41:20.6638450Z [Trace] GetByName called for name: 'father' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6638670Z [Trace] GetByName result: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6638860Z [Trace] GetByName called for name: 'mother' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6639070Z [Trace] GetByName result: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6639270Z [Trace] GetByName called for name: 'father' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6639480Z [Trace] GetByName result: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6639850Z [ValidateLinksExistOrWillBeCreated] Auto-creating missing named reference 'father' as point link. +Test (macos-latest) Run tests 2026-05-12T20:41:20.6640730Z [Trace] GetByName called for name: 'father' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6641060Z [Trace] GetByName result: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6641270Z [Trace] Update called with restriction: [1] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6641570Z [Trace] Debug: handlerWrapper invoked - before=1,0,0, after=1,0,0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6641840Z [Trace] Update result: 4294967295 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6642090Z [Trace] SetName called for link: 1 with name: 'father' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6642480Z [Trace] RemoveName called for link: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6642700Z [Trace] RemoveName completed for link: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6642900Z [Trace] SetName result: 108 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6643120Z [Trace] Update called with restriction: [1,0,0] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6643450Z [Trace] Debug: handlerWrapper invoked - before=1,0,0, after=1,1,1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6643720Z [Trace] Update result: 4294967295 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6643930Z [Trace] GetByName called for name: 'mother' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6644130Z [Trace] GetByName result: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6644510Z [ValidateLinksExistOrWillBeCreated] Auto-creating missing named reference 'mother' as point link. +Test (macos-latest) Run tests 2026-05-12T20:41:20.6645000Z [Trace] GetByName called for name: 'mother' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6645210Z [Trace] GetByName result: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6645410Z [Trace] Update called with restriction: [2] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6645720Z [Trace] Debug: handlerWrapper invoked - before=2,0,0, after=2,0,0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6646000Z [Trace] Update result: 4294967295 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6646250Z [Trace] SetName called for link: 2 with name: 'mother' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6646500Z [Trace] RemoveName called for link: 2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6646710Z [Trace] RemoveName completed for link: 2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6646940Z [Trace] SetName result: 110 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6647150Z [Trace] Update called with restriction: [2,0,0] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6647460Z [Trace] Debug: handlerWrapper invoked - before=2,0,0, after=2,2,2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6647760Z [Trace] Update result: 4294967295 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6648020Z [ValidateLinksExistOrWillBeCreated] Validation completed +Test (macos-latest) Run tests 2026-05-12T20:41:20.6648320Z [Trace] GetByName called for name: 'father' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6648520Z [Trace] GetByName result: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6648850Z [EnsureNestedLinkCreatedRecursively] Found existing named leaf 'father' => ID=1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6649190Z [Trace] GetByName called for name: 'mother' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6649390Z [Trace] GetByName result: 2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6649710Z [EnsureNestedLinkCreatedRecursively] Found existing named leaf 'mother' => ID=2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6650070Z [EnsureLinkCreated] Creating link for (S=1, T=2). +Test (macos-latest) Run tests 2026-05-12T20:41:20.6650480Z [EnsureLinkCreated] => assigned new ID=3 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6650720Z [Trace] Update called with restriction: [3] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6651010Z [Trace] Debug: handlerWrapper invoked - before=3,0,0, after=3,1,2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6651290Z [Trace] Update result: 4294967295 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6651740Z [EnsureNestedLinkCreatedRecursively] Created or ensured composite link => Index=0, Source=1, Target=2 => Actual ID=3 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6652430Z [Trace] SetName called for link: 3 with name: 'child' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6652730Z [Trace] RemoveName called for link: 3 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6652970Z [Trace] RemoveName completed for link: 3 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6653190Z [Trace] SetName result: 118 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6653470Z [ProcessQuery] Created link ID #3 from substitution pattern. +Test (macos-latest) Run tests 2026-05-12T20:41:20.6653750Z [Test] Initial link creation completed +Test (macos-latest) Run tests 2026-05-12T20:41:20.6672980Z [Test] Step 2: Verifying initial state +Test (macos-latest) Run tests 2026-05-12T20:41:20.6673250Z [Trace] GetByName called for name: 'child' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6673470Z [Trace] GetByName result: 3 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6673660Z [Test] Initial child ID: 3 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6673850Z [Trace] GetByName called for name: 'father' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6674070Z [Trace] GetByName result: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6674280Z [Test] Initial father ID: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6674480Z [Trace] GetByName called for name: 'mother' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6674690Z [Trace] GetByName result: 2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6675440Z [Test] Initial mother ID: 2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6675830Z [Test] All links: (1: 1->1) (2: 2->2) (3: 1->2) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6676050Z [Test] Initial links count: 3 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6676260Z [Test] Initial state verification completed +Test (macos-latest) Run tests 2026-05-12T20:41:20.6676490Z [Test] Step 3: Updating link name +Test (macos-latest) Run tests 2026-05-12T20:41:20.6676690Z [Test] Removing old name 'child' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6676890Z [Trace] RemoveName called for link: 3 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6677110Z [Trace] RemoveName completed for link: 3 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6677340Z [Test] Old name removed +Test (macos-latest) Run tests 2026-05-12T20:41:20.6677530Z [Test] Creating new link with name 'son' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6677790Z [ProcessQuery] Query: "(() ((son: father mother)))" +Test (macos-latest) Run tests 2026-05-12T20:41:20.6678080Z [ProcessQuery] Parser returned 1 top-level link(s). +Test (macos-latest) Run tests 2026-05-12T20:41:20.6678380Z [ProcessQuery] Restriction link => Id="" Values.Count=0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6678790Z [ProcessQuery] Substitution link => Id="" Values.Count=1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6679210Z [ProcessQuery] No restriction, but substitution is non-empty => creation scenario. +Test (macos-latest) Run tests 2026-05-12T20:41:20.6679620Z [ValidateLinksExistOrWillBeCreated] Starting validation +Test (macos-latest) Run tests 2026-05-12T20:41:20.6679990Z [ValidateLinksExistOrWillBeCreated] Numeric links to be created: +Test (macos-latest) Run tests 2026-05-12T20:41:20.6680380Z [ValidateLinksExistOrWillBeCreated] Named links to be created: son +Test (macos-latest) Run tests 2026-05-12T20:41:20.6680710Z [Trace] GetByName called for name: 'father' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6680930Z [Trace] GetByName result: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6681290Z [ValidateReferencesInPattern] Named link 'father' reference validated in substitution pattern +Test (macos-latest) Run tests 2026-05-12T20:41:20.6681680Z [Trace] GetByName called for name: 'mother' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6681890Z [Trace] GetByName result: 2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6682260Z [ValidateReferencesInPattern] Named link 'mother' reference validated in substitution pattern +Test (macos-latest) Run tests 2026-05-12T20:41:20.6682680Z [ValidateLinksExistOrWillBeCreated] Validation completed +Test (macos-latest) Run tests 2026-05-12T20:41:20.6682960Z [Trace] GetByName called for name: 'father' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6683170Z [Trace] GetByName result: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6683500Z [EnsureNestedLinkCreatedRecursively] Found existing named leaf 'father' => ID=1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6683850Z [Trace] GetByName called for name: 'mother' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6684060Z [Trace] GetByName result: 2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6684420Z [EnsureNestedLinkCreatedRecursively] Found existing named leaf 'mother' => ID=2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6684820Z [EnsureLinkCreated] Link already found => ID=3 => no-op. +Test (macos-latest) Run tests 2026-05-12T20:41:20.6685330Z [EnsureNestedLinkCreatedRecursively] Created or ensured composite link => Index=0, Source=1, Target=2 => Actual ID=3 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6685780Z [Trace] SetName called for link: 3 with name: 'son' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6686030Z [Trace] RemoveName called for link: 3 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6686280Z [Trace] RemoveName completed for link: 3 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6686490Z [Trace] SetName result: 123 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6686750Z [ProcessQuery] Created link ID #3 from substitution pattern. +Test (macos-latest) Run tests 2026-05-12T20:41:20.6687010Z [Test] New link creation completed +Test (macos-latest) Run tests 2026-05-12T20:41:20.6687240Z [Test] Step 4: Verifying final state +Test (macos-latest) Run tests 2026-05-12T20:41:20.6687460Z [Trace] GetByName called for name: 'child' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6687670Z [Trace] GetByName result: 0 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6687880Z [Trace] GetByName called for name: 'son' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6688100Z [Trace] GetByName result: 3 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6688260Z [Test] Final son ID: 3 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6688450Z [Trace] GetByName called for name: 'father' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6688660Z [Trace] GetByName result: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6688830Z [Test] Final father ID: 1 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6689030Z [Trace] GetByName called for name: 'mother' +Test (macos-latest) Run tests 2026-05-12T20:41:20.6689240Z [Trace] GetByName result: 2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6689410Z [Test] Final mother ID: 2 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6689620Z [Test] All links: (1: 1->1) (2: 2->2) (3: 1->2) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6689840Z [Test] Final links count: 3 +Test (macos-latest) Run tests 2026-05-12T20:41:20.6690040Z [Test] Final state verification completed +Test (macos-latest) Run tests 2026-05-12T20:41:20.6690310Z [Test] UpdateNamedLinkNameTest completed successfully +Test (macos-latest) Run tests 2026-05-12T20:41:20.6691160Z [Test] All links: (1: 1->1) (2: 2->2) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6691370Z [Test] All links: (1: 1->1) (2: 2->2) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6691580Z [Test] All links: +Test (macos-latest) Run tests 2026-05-12T20:41:20.6691970Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteByNamesTest [2 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6692710Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithVariableReferences_ShouldSucceed [1 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6693500Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Create2LevelNestedLinksTest [2 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6694260Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteLinksByAnySourceTest [3 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6695030Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateTwoNamedLinksTest [10 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6695780Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.NoUpdateUsingVariablesTest [8 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6696610Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MakeAllLinksSelfReferencingUsingVariablesTest [3 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6697440Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteMultipleLinksTest [12 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6698250Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.UpdateWithNonExistentReference_ShouldThrowException [8 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6698790Z [Test] All links: (2: 2->2) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6699100Z [Test] All links: (1: 1->1) (2: 2->2) (3: 3->3) (4: 2->3) (5: 1->4) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6699470Z [Test] All links: (1: 1->1) (2: 2->2) (3: 1->2) (4: 3->3) (5: 3->4) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6699780Z [Test] All links: (1: 1->1) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6699960Z [Test] All links: (1: 1->1) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6770720Z [Test] All links: (1: 1->1) (2: 2->2) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6854150Z [Test] All links: (1: 0->0) +Test (macos-latest) Run tests 2026-05-12T20:41:20.6903830Z [Test] All links: +Test (macos-latest) Run tests 2026-05-12T20:41:20.6922710Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteSingleLinkTest_Source1Target2 [10 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6925480Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteNamedLinkTest [2 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6928120Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Create3LevelNestedLinksTest [7 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6931030Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateTripleDuplicatePair_ShouldCreateOnlyOneSubLink [5 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6934110Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithValidSelfReference_ShouldSucceed [6 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6936730Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateSingleLinkTest [17 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6942610Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreationDuringUpdateTest [12 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6946400Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithWildcardReferences_ShouldSucceed [9 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6966550Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteSingleLinkTest_Source2Target2 [7 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.6969040Z [Test] All links: (1: 1->1) (2: 2->2) (3: 1->2) (4: 3->3) +Test (macos-latest) Run tests 2026-05-12T20:41:20.7034420Z [Test] All links: (1: 1->1) (2: 2->1) +Test (macos-latest) Run tests 2026-05-12T20:41:20.7041400Z [Test] All links: +Test (macos-latest) Run tests 2026-05-12T20:41:20.7064410Z [Test] All links: (1: 1->1) (2: 2->2) (3: 3->3) (4: 4->4) (5: 5->5) (6: 6->6) (7: 7->7) (8: 6->7) (9: 5->8) (10: 4->9) (11: 3->10) (12: 2->11) (13: 1->12) +Test (macos-latest) Run tests 2026-05-12T20:41:20.7079300Z [Test] All links: (1: 1->1) (2: 2->1) +Test (macos-latest) Run tests 2026-05-12T20:41:20.7094640Z [Test] All links: +Test (macos-latest) Run tests 2026-05-12T20:41:20.7172100Z [Test] All links: (1: 1->1) (2: 2->2) (3: 1->2) (4: 3->3) (5: 4->4) +Test (macos-latest) Run tests 2026-05-12T20:41:20.7306090Z [Test] All links: (1: 1->1) (2: 2->2) (3: 3->3) (4: 4->4) (5: 3->4) (6: 2->5) (7: 1->6) +Test (macos-latest) Run tests 2026-05-12T20:41:20.7308140Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateNamedLinks_MultipleQueries_ShouldReuseSameIds [7 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.7312500Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithNonExistentReference_ShouldThrowException [6 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.7345410Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.SwapSourceAndTargetForSingleLinkUsingVariablesTest [1 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.7354510Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteAllLinksBySourceAndTargetTest2 [1 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.7357480Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Create7LevelNestedLinksTest [1 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.7360100Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkReferencingExistingLink_ShouldSucceed [1 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.7362790Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteAllLinksBySourceAndTargetTest1 [1 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.7365670Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateNestedDuplicates_ShouldDeduplicateAtAllLevels [1 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.7368280Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Create4LevelNestedLinksTest [12 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:20.7440520Z [Test] All links: (1: 1->1) +Test (macos-latest) Run tests 2026-05-12T20:41:20.7449450Z [Test] All links: (1: 1->1) (2: 2->2) +Test (macos-latest) Run tests 2026-05-12T20:41:22.3081350Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateSingleLinkWithIndexTest [14 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:22.3082390Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithSource2Target2Test [5 ms] +Test (macos-latest) Run tests 2026-05-12T20:41:23.8367720Z Passed Foundation.Data.Doublets.Cli.Tests.CliExportIntegrationTests.ExportAlias_WritesNamedReferences [4 s] +Test (macos-latest) Run tests 2026-05-12T20:41:28.5291900Z Passed Foundation.Data.Doublets.Cli.Tests.CliExportIntegrationTests.AlwaysTriggerOption_StoresTriggerAndAppliesItOnLaterChange [5 s] +Test (macos-latest) Run tests 2026-05-12T20:41:30.8673790Z Passed Foundation.Data.Doublets.Cli.Tests.CliExportIntegrationTests.ExportAlias_WritesNumberedReferences [2 s] +Test (macos-latest) Run tests 2026-05-12T20:41:42.7109310Z Passed Foundation.Data.Doublets.Cli.Tests.CliExportIntegrationTests.StructureOption_RendersLeftBranchWithIndexes [11 s] +Test (macos-latest) Run tests 2026-05-12T20:41:44.6752120Z [xUnit.net 00:00:26.51] Finished: Foundation.Data.Doublets.Cli.Tests +Test (macos-latest) Run tests 2026-05-12T20:41:45.1424320Z Passed Foundation.Data.Doublets.Cli.Tests.CliExportIntegrationTests.ImportOption_ReadsNumberedLinoFile [1 s] +Test (macos-latest) Run tests 2026-05-12T20:41:45.1570730Z +Test (macos-latest) Run tests 2026-05-12T20:41:45.1635810Z Test Run Successful. +Test (macos-latest) Run tests 2026-05-12T20:41:45.1636770Z Total tests: 187 +Test (macos-latest) Run tests 2026-05-12T20:41:45.1637510Z Passed: 187 +Test (macos-latest) Run tests 2026-05-12T20:41:45.1638180Z Total time: 30.0945 Seconds +Test (macos-latest) Run tests 2026-05-12T20:41:45.2278110Z 1>Done Building Project "/Users/runner/work/link-cli/link-cli/csharp/Foundation.Data.Doublets.Cli.sln" (VSTest target(s)). +Test (macos-latest) Run tests 2026-05-12T20:41:45.2532430Z +Test (macos-latest) Run tests 2026-05-12T20:41:45.2550800Z Build succeeded. +Test (macos-latest) Run tests 2026-05-12T20:41:45.2551480Z 0 Warning(s) +Test (macos-latest) Run tests 2026-05-12T20:41:45.2551990Z 0 Error(s) +Test (macos-latest) Run tests 2026-05-12T20:41:45.2552410Z +Test (macos-latest) Run tests 2026-05-12T20:41:45.2552770Z Time Elapsed 00:00:30.93 +Test (macos-latest) Run tests 2026-05-12T20:41:45.6790660Z +Test (macos-latest) Run tests 2026-05-12T20:41:45.6802100Z Attachments: +Test (macos-latest) Run tests 2026-05-12T20:41:45.6803800Z /Users/runner/work/link-cli/link-cli/csharp/Foundation.Data.Doublets.Cli.Tests/TestResults/f0aa74fb-c8ba-44a1-9970-1c7038287047/coverage.cobertura.xml +Test (macos-latest) Post Setup .NET 2026-05-12T20:41:45.7758800Z Post job cleanup. +Test (macos-latest) Post Run actions/checkout@v6 2026-05-12T20:41:46.4174620Z Post job cleanup. +Test (macos-latest) Post Run actions/checkout@v6 2026-05-12T20:41:46.6735920Z [command]/opt/homebrew/bin/git version +Test (macos-latest) Post Run actions/checkout@v6 2026-05-12T20:41:46.7090090Z git version 2.54.0 +Test (macos-latest) Post Run actions/checkout@v6 2026-05-12T20:41:46.7135060Z Copying '/Users/runner/.gitconfig' to '/Users/runner/work/_temp/94feb16d-07cd-40a5-b84a-df6483e4092d/.gitconfig' +Test (macos-latest) Post Run actions/checkout@v6 2026-05-12T20:41:46.7155150Z Temporarily overriding HOME='/Users/runner/work/_temp/94feb16d-07cd-40a5-b84a-df6483e4092d' before making global git config changes +Test (macos-latest) Post Run actions/checkout@v6 2026-05-12T20:41:46.7184190Z Adding repository directory to the temporary git global config as a safe directory +Test (macos-latest) Post Run actions/checkout@v6 2026-05-12T20:41:46.7184890Z [command]/opt/homebrew/bin/git config --global --add safe.directory /Users/runner/work/link-cli/link-cli +Test (macos-latest) Post Run actions/checkout@v6 2026-05-12T20:41:46.7357380Z Removing SSH command configuration +Test (macos-latest) Post Run actions/checkout@v6 2026-05-12T20:41:46.7363160Z [command]/opt/homebrew/bin/git config --local --name-only --get-regexp core\.sshCommand +Test (macos-latest) Post Run actions/checkout@v6 2026-05-12T20:41:46.7509770Z [command]/opt/homebrew/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :" +Test (macos-latest) Post Run actions/checkout@v6 2026-05-12T20:41:47.0096420Z Removing HTTP extra header +Test (macos-latest) Post Run actions/checkout@v6 2026-05-12T20:41:47.0109280Z [command]/opt/homebrew/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader +Test (macos-latest) Post Run actions/checkout@v6 2026-05-12T20:41:47.0282430Z [command]/opt/homebrew/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :" +Test (macos-latest) Post Run actions/checkout@v6 2026-05-12T20:41:47.2754860Z Removing includeIf entries pointing to credentials config files +Test (macos-latest) Post Run actions/checkout@v6 2026-05-12T20:41:47.2757360Z [command]/opt/homebrew/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir: +Test (macos-latest) Post Run actions/checkout@v6 2026-05-12T20:41:47.2848800Z includeif.gitdir:/Users/runner/work/link-cli/link-cli/.git.path +Test (macos-latest) Post Run actions/checkout@v6 2026-05-12T20:41:47.2850430Z includeif.gitdir:/Users/runner/work/link-cli/link-cli/.git/worktrees/*.path +Test (macos-latest) Post Run actions/checkout@v6 2026-05-12T20:41:47.2851720Z includeif.gitdir:/github/workspace/.git.path +Test (macos-latest) Post Run actions/checkout@v6 2026-05-12T20:41:47.2853000Z includeif.gitdir:/github/workspace/.git/worktrees/*.path +Test (macos-latest) Post Run actions/checkout@v6 2026-05-12T20:41:47.2858470Z [command]/opt/homebrew/bin/git config --local --get-all includeif.gitdir:/Users/runner/work/link-cli/link-cli/.git.path +Test (macos-latest) Post Run actions/checkout@v6 2026-05-12T20:41:47.2937480Z /Users/runner/work/_temp/git-credentials-c1c352c7-201a-4edb-be61-2eea25b9f495.config +Test (macos-latest) Post Run actions/checkout@v6 2026-05-12T20:41:47.2952780Z [command]/opt/homebrew/bin/git config --local --unset includeif.gitdir:/Users/runner/work/link-cli/link-cli/.git.path /Users/runner/work/_temp/git-credentials-c1c352c7-201a-4edb-be61-2eea25b9f495.config +Test (macos-latest) Post Run actions/checkout@v6 2026-05-12T20:41:47.3113750Z [command]/opt/homebrew/bin/git config --local --get-all includeif.gitdir:/Users/runner/work/link-cli/link-cli/.git/worktrees/*.path +Test (macos-latest) Post Run actions/checkout@v6 2026-05-12T20:41:47.3207730Z /Users/runner/work/_temp/git-credentials-c1c352c7-201a-4edb-be61-2eea25b9f495.config +Test (macos-latest) Post Run actions/checkout@v6 2026-05-12T20:41:47.3219250Z [command]/opt/homebrew/bin/git config --local --unset includeif.gitdir:/Users/runner/work/link-cli/link-cli/.git/worktrees/*.path /Users/runner/work/_temp/git-credentials-c1c352c7-201a-4edb-be61-2eea25b9f495.config +Test (macos-latest) Post Run actions/checkout@v6 2026-05-12T20:41:47.3416440Z [command]/opt/homebrew/bin/git config --local --get-all includeif.gitdir:/github/workspace/.git.path +Test (macos-latest) Post Run actions/checkout@v6 2026-05-12T20:41:47.3521690Z /github/runner_temp/git-credentials-c1c352c7-201a-4edb-be61-2eea25b9f495.config +Test (macos-latest) Post Run actions/checkout@v6 2026-05-12T20:41:47.3528000Z [command]/opt/homebrew/bin/git config --local --unset includeif.gitdir:/github/workspace/.git.path /github/runner_temp/git-credentials-c1c352c7-201a-4edb-be61-2eea25b9f495.config +Test (macos-latest) Post Run actions/checkout@v6 2026-05-12T20:41:47.3635970Z [command]/opt/homebrew/bin/git config --local --get-all includeif.gitdir:/github/workspace/.git/worktrees/*.path +Test (macos-latest) Post Run actions/checkout@v6 2026-05-12T20:41:47.3786740Z /github/runner_temp/git-credentials-c1c352c7-201a-4edb-be61-2eea25b9f495.config +Test (macos-latest) Post Run actions/checkout@v6 2026-05-12T20:41:47.3810510Z [command]/opt/homebrew/bin/git config --local --unset includeif.gitdir:/github/workspace/.git/worktrees/*.path /github/runner_temp/git-credentials-c1c352c7-201a-4edb-be61-2eea25b9f495.config +Test (macos-latest) Post Run actions/checkout@v6 2026-05-12T20:41:47.3983190Z [command]/opt/homebrew/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url +Test (macos-latest) Post Run actions/checkout@v6 2026-05-12T20:41:47.6589730Z Removing credentials config '/Users/runner/work/_temp/git-credentials-c1c352c7-201a-4edb-be61-2eea25b9f495.config' +Test (macos-latest) Complete job 2026-05-12T20:41:47.6930230Z Cleaning up orphan processes +Test (macos-latest) Complete job 2026-05-12T20:41:49.1133950Z Terminate orphan process: pid (3128) (VBCSCompiler) +Release Set up job 2026-05-12T21:20:02.2167412Z Current runner version: '2.334.0' +Release Set up job 2026-05-12T21:20:02.2187571Z ##[group]Runner Image Provisioner +Release Set up job 2026-05-12T21:20:02.2188201Z Hosted Compute Agent +Release Set up job 2026-05-12T21:20:02.2188894Z Version: 20260213.493 +Release Set up job 2026-05-12T21:20:02.2189411Z Commit: 5c115507f6dd24b8de37d8bbe0bb4509d0cc0fa3 +Release Set up job 2026-05-12T21:20:02.2189941Z Build Date: 2026-02-13T00:28:41Z +Release Set up job 2026-05-12T21:20:02.2190499Z Worker ID: {87a8d155-3210-4be1-88c3-e5453d6c937a} +Release Set up job 2026-05-12T21:20:02.2191032Z Azure Region: westcentralus +Release Set up job 2026-05-12T21:20:02.2191511Z ##[endgroup] +Release Set up job 2026-05-12T21:20:02.2192595Z ##[group]Operating System +Release Set up job 2026-05-12T21:20:02.2193042Z Ubuntu +Release Set up job 2026-05-12T21:20:02.2193438Z 24.04.4 +Release Set up job 2026-05-12T21:20:02.2193775Z LTS +Release Set up job 2026-05-12T21:20:02.2194213Z ##[endgroup] +Release Set up job 2026-05-12T21:20:02.2194623Z ##[group]Runner Image +Release Set up job 2026-05-12T21:20:02.2195054Z Image: ubuntu-24.04 +Release Set up job 2026-05-12T21:20:02.2195532Z Version: 20260413.86.1 +Release Set up job 2026-05-12T21:20:02.2196330Z Included Software: https://github.com/actions/runner-images/blob/ubuntu24/20260413.86/images/ubuntu/Ubuntu2404-Readme.md +Release Set up job 2026-05-12T21:20:02.2197614Z Image Release: https://github.com/actions/runner-images/releases/tag/ubuntu24%2F20260413.86 +Release Set up job 2026-05-12T21:20:02.2198324Z ##[endgroup] +Release Set up job 2026-05-12T21:20:02.2199433Z ##[group]GITHUB_TOKEN Permissions +Release Set up job 2026-05-12T21:20:02.2200855Z Contents: write +Release Set up job 2026-05-12T21:20:02.2201298Z Metadata: read +Release Set up job 2026-05-12T21:20:02.2201803Z Packages: write +Release Set up job 2026-05-12T21:20:02.2202193Z ##[endgroup] +Release Set up job 2026-05-12T21:20:02.2203780Z Secret source: Actions +Release Set up job 2026-05-12T21:20:02.2204382Z Prepare workflow directory +Release Set up job 2026-05-12T21:20:02.2530012Z Prepare all required actions +Release Set up job 2026-05-12T21:20:02.2559430Z Getting action download info +Release Set up job 2026-05-12T21:20:02.7036928Z Download action repository 'actions/checkout@v6' (SHA:de0fac2e4500dabe0009e67214ff5f5447ce83dd) +Release Set up job 2026-05-12T21:20:02.8304110Z Download action repository 'actions/setup-dotnet@v5' (SHA:c2fa09f4bde5ebb9d1777cf28262a3eb3db3ced7) +Release Set up job 2026-05-12T21:20:03.4325369Z Download action repository 'actions/setup-node@v6' (SHA:48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e) +Release Set up job 2026-05-12T21:20:04.2090059Z Complete job name: Release +Release Run actions/checkout@v6 2026-05-12T21:20:04.2798419Z ##[group]Run actions/checkout@v6 +Release Run actions/checkout@v6 2026-05-12T21:20:04.2799641Z with: +Release Run actions/checkout@v6 2026-05-12T21:20:04.2800217Z fetch-depth: 0 +Release Run actions/checkout@v6 2026-05-12T21:20:04.2800886Z repository: link-foundation/link-cli +Release Run actions/checkout@v6 2026-05-12T21:20:04.2801935Z token: *** +Release Run actions/checkout@v6 2026-05-12T21:20:04.2802530Z ssh-strict: true +Release Run actions/checkout@v6 2026-05-12T21:20:04.2803153Z ssh-user: git +Release Run actions/checkout@v6 2026-05-12T21:20:04.2803783Z persist-credentials: true +Release Run actions/checkout@v6 2026-05-12T21:20:04.2804481Z clean: true +Release Run actions/checkout@v6 2026-05-12T21:20:04.2805118Z sparse-checkout-cone-mode: true +Release Run actions/checkout@v6 2026-05-12T21:20:04.2805880Z fetch-tags: false +Release Run actions/checkout@v6 2026-05-12T21:20:04.2806526Z show-progress: true +Release Run actions/checkout@v6 2026-05-12T21:20:04.2807160Z lfs: false +Release Run actions/checkout@v6 2026-05-12T21:20:04.2807741Z submodules: false +Release Run actions/checkout@v6 2026-05-12T21:20:04.2808386Z set-safe-directory: true +Release Run actions/checkout@v6 2026-05-12T21:20:04.2809398Z env: +Release Run actions/checkout@v6 2026-05-12T21:20:04.2810021Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Release Run actions/checkout@v6 2026-05-12T21:20:04.2810879Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Release Run actions/checkout@v6 2026-05-12T21:20:04.2811644Z DOTNET_NOLOGO: true +Release Run actions/checkout@v6 2026-05-12T21:20:04.2812313Z ##[endgroup] +Release Run actions/checkout@v6 2026-05-12T21:20:04.3613749Z Syncing repository: link-foundation/link-cli +Release Run actions/checkout@v6 2026-05-12T21:20:04.3615939Z ##[group]Getting Git version info +Release Run actions/checkout@v6 2026-05-12T21:20:04.3616934Z Working directory is '/home/runner/work/link-cli/link-cli' +Release Run actions/checkout@v6 2026-05-12T21:20:04.3618412Z [command]/usr/bin/git version +Release Run actions/checkout@v6 2026-05-12T21:20:04.3684730Z git version 2.53.0 +Release Run actions/checkout@v6 2026-05-12T21:20:04.3702170Z ##[endgroup] +Release Run actions/checkout@v6 2026-05-12T21:20:04.3713119Z Temporarily overriding HOME='/home/runner/work/_temp/e111d505-1812-4f25-9141-620c167405d0' before making global git config changes +Release Run actions/checkout@v6 2026-05-12T21:20:04.3715303Z Adding repository directory to the temporary git global config as a safe directory +Release Run actions/checkout@v6 2026-05-12T21:20:04.3717434Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/link-cli/link-cli +Release Run actions/checkout@v6 2026-05-12T21:20:04.3745555Z Deleting the contents of '/home/runner/work/link-cli/link-cli' +Release Run actions/checkout@v6 2026-05-12T21:20:04.3748589Z ##[group]Initializing the repository +Release Run actions/checkout@v6 2026-05-12T21:20:04.3752244Z [command]/usr/bin/git init /home/runner/work/link-cli/link-cli +Release Run actions/checkout@v6 2026-05-12T21:20:04.3815857Z hint: Using 'master' as the name for the initial branch. This default branch name +Release Run actions/checkout@v6 2026-05-12T21:20:04.3818258Z hint: will change to "main" in Git 3.0. To configure the initial branch name +Release Run actions/checkout@v6 2026-05-12T21:20:04.3820403Z hint: to use in all of your new repositories, which will suppress this warning, +Release Run actions/checkout@v6 2026-05-12T21:20:04.3821688Z hint: call: +Release Run actions/checkout@v6 2026-05-12T21:20:04.3822265Z hint: +Release Run actions/checkout@v6 2026-05-12T21:20:04.3823184Z hint: git config --global init.defaultBranch +Release Run actions/checkout@v6 2026-05-12T21:20:04.3824455Z hint: +Release Run actions/checkout@v6 2026-05-12T21:20:04.3825304Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and +Release Run actions/checkout@v6 2026-05-12T21:20:04.3826696Z hint: 'development'. The just-created branch can be renamed via this command: +Release Run actions/checkout@v6 2026-05-12T21:20:04.3827932Z hint: +Release Run actions/checkout@v6 2026-05-12T21:20:04.3828532Z hint: git branch -m +Release Run actions/checkout@v6 2026-05-12T21:20:04.3829398Z hint: +Release Run actions/checkout@v6 2026-05-12T21:20:04.3830316Z hint: Disable this message with "git config set advice.defaultBranchName false" +Release Run actions/checkout@v6 2026-05-12T21:20:04.3831790Z Initialized empty Git repository in /home/runner/work/link-cli/link-cli/.git/ +Release Run actions/checkout@v6 2026-05-12T21:20:04.3834235Z [command]/usr/bin/git remote add origin https://github.com/link-foundation/link-cli +Release Run actions/checkout@v6 2026-05-12T21:20:04.3851088Z ##[endgroup] +Release Run actions/checkout@v6 2026-05-12T21:20:04.3852296Z ##[group]Disabling automatic garbage collection +Release Run actions/checkout@v6 2026-05-12T21:20:04.3853652Z [command]/usr/bin/git config --local gc.auto 0 +Release Run actions/checkout@v6 2026-05-12T21:20:04.3876556Z ##[endgroup] +Release Run actions/checkout@v6 2026-05-12T21:20:04.3877972Z ##[group]Setting up auth +Release Run actions/checkout@v6 2026-05-12T21:20:04.3879056Z Removing SSH command configuration +Release Run actions/checkout@v6 2026-05-12T21:20:04.3881131Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand +Release Run actions/checkout@v6 2026-05-12T21:20:04.3905971Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :" +Release Run actions/checkout@v6 2026-05-12T21:20:04.4149187Z Removing HTTP extra header +Release Run actions/checkout@v6 2026-05-12T21:20:04.4153425Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader +Release Run actions/checkout@v6 2026-05-12T21:20:04.4178498Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :" +Release Run actions/checkout@v6 2026-05-12T21:20:04.4355558Z Removing includeIf entries pointing to credentials config files +Release Run actions/checkout@v6 2026-05-12T21:20:04.4357091Z [command]/usr/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir: +Release Run actions/checkout@v6 2026-05-12T21:20:04.4381348Z [command]/usr/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url +Release Run actions/checkout@v6 2026-05-12T21:20:04.4564719Z [command]/usr/bin/git config --file /home/runner/work/_temp/git-credentials-b9563dbc-b8f1-4f4a-b2fd-d2285e354a98.config http.https://github.com/.extraheader AUTHORIZATION: basic *** +Release Run actions/checkout@v6 2026-05-12T21:20:04.4594488Z [command]/usr/bin/git config --local includeIf.gitdir:/home/runner/work/link-cli/link-cli/.git.path /home/runner/work/_temp/git-credentials-b9563dbc-b8f1-4f4a-b2fd-d2285e354a98.config +Release Run actions/checkout@v6 2026-05-12T21:20:04.4619753Z [command]/usr/bin/git config --local includeIf.gitdir:/home/runner/work/link-cli/link-cli/.git/worktrees/*.path /home/runner/work/_temp/git-credentials-b9563dbc-b8f1-4f4a-b2fd-d2285e354a98.config +Release Run actions/checkout@v6 2026-05-12T21:20:04.4645143Z [command]/usr/bin/git config --local includeIf.gitdir:/github/workspace/.git.path /github/runner_temp/git-credentials-b9563dbc-b8f1-4f4a-b2fd-d2285e354a98.config +Release Run actions/checkout@v6 2026-05-12T21:20:04.4670201Z [command]/usr/bin/git config --local includeIf.gitdir:/github/workspace/.git/worktrees/*.path /github/runner_temp/git-credentials-b9563dbc-b8f1-4f4a-b2fd-d2285e354a98.config +Release Run actions/checkout@v6 2026-05-12T21:20:04.4691693Z ##[endgroup] +Release Run actions/checkout@v6 2026-05-12T21:20:04.4692951Z ##[group]Fetching the repository +Release Run actions/checkout@v6 2026-05-12T21:20:04.4698193Z [command]/usr/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules origin +refs/heads/*:refs/remotes/origin/* +refs/tags/*:refs/tags/* +Release Run actions/checkout@v6 2026-05-12T21:20:05.6202437Z From https://github.com/link-foundation/link-cli +Release Run actions/checkout@v6 2026-05-12T21:20:05.6203872Z * [new branch] claude/code-review-and-issues-01WwM3yFJiaRwTrhABNoUkYa -> origin/claude/code-review-and-issues-01WwM3yFJiaRwTrhABNoUkYa +Release Run actions/checkout@v6 2026-05-12T21:20:05.6205023Z * [new branch] issue-11-36571c97 -> origin/issue-11-36571c97 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6205613Z * [new branch] issue-12-fc4292e4 -> origin/issue-12-fc4292e4 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6206300Z * [new branch] issue-15-d0c58a82 -> origin/issue-15-d0c58a82 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6207024Z * [new branch] issue-17-1bd2fb57 -> origin/issue-17-1bd2fb57 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6207557Z * [new branch] issue-18-f86143d5 -> origin/issue-18-f86143d5 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6208111Z * [new branch] issue-19-9de6817b -> origin/issue-19-9de6817b +Release Run actions/checkout@v6 2026-05-12T21:20:05.6208949Z * [new branch] issue-20-aba7a4fa -> origin/issue-20-aba7a4fa +Release Run actions/checkout@v6 2026-05-12T21:20:05.6209752Z * [new branch] issue-22-889744b4 -> origin/issue-22-889744b4 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6210423Z * [new branch] issue-23-e23fa86d -> origin/issue-23-e23fa86d +Release Run actions/checkout@v6 2026-05-12T21:20:05.6211050Z * [new branch] issue-24-3e3135c5 -> origin/issue-24-3e3135c5 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6211599Z * [new branch] issue-25-4c1591ce -> origin/issue-25-4c1591ce +Release Run actions/checkout@v6 2026-05-12T21:20:05.6212244Z * [new branch] issue-26-c9ed9c27 -> origin/issue-26-c9ed9c27 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6212887Z * [new branch] issue-3-af35a436 -> origin/issue-3-af35a436 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6213475Z * [new branch] issue-30-7073054f -> origin/issue-30-7073054f +Release Run actions/checkout@v6 2026-05-12T21:20:05.6214175Z * [new branch] issue-31-e51b89e4 -> origin/issue-31-e51b89e4 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6214762Z * [new branch] issue-32-3b3efd02 -> origin/issue-32-3b3efd02 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6215303Z * [new branch] issue-33-a60a3c86 -> origin/issue-33-a60a3c86 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6215943Z * [new branch] issue-34-22f3c425 -> origin/issue-34-22f3c425 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6216528Z * [new branch] issue-35-391818e8 -> origin/issue-35-391818e8 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6217075Z * [new branch] issue-56-73ae4c3a -> origin/issue-56-73ae4c3a +Release Run actions/checkout@v6 2026-05-12T21:20:05.6217912Z * [new branch] issue-58-2571f420 -> origin/issue-58-2571f420 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6218526Z * [new branch] issue-63-452491b85cd2 -> origin/issue-63-452491b85cd2 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6219267Z * [new branch] issue-65-5d06345e60dc -> origin/issue-65-5d06345e60dc +Release Run actions/checkout@v6 2026-05-12T21:20:05.6219953Z * [new branch] issue-67-d67d72474036 -> origin/issue-67-d67d72474036 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6220597Z * [new branch] issue-69-43fc7f1a4ec3 -> origin/issue-69-43fc7f1a4ec3 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6221221Z * [new branch] issue-71-c1debd4cdf5e -> origin/issue-71-c1debd4cdf5e +Release Run actions/checkout@v6 2026-05-12T21:20:05.6221919Z * [new branch] issue-73-d71d2656d381 -> origin/issue-73-d71d2656d381 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6222628Z * [new branch] issue-75-2384a28fe185 -> origin/issue-75-2384a28fe185 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6223277Z * [new branch] issue-77-388911d8eea6 -> origin/issue-77-388911d8eea6 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6224010Z * [new branch] issue-79-49ca4f759246 -> origin/issue-79-49ca4f759246 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6224633Z * [new branch] issue-79-c80df6f859e8 -> origin/issue-79-c80df6f859e8 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6225233Z * [new branch] issue-8-e91a69e5 -> origin/issue-8-e91a69e5 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6225883Z * [new branch] issue-82-7aea04680cb2 -> origin/issue-82-7aea04680cb2 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6226510Z * [new branch] issue-84-0f4c3bcac49c -> origin/issue-84-0f4c3bcac49c +Release Run actions/checkout@v6 2026-05-12T21:20:05.6227036Z * [new branch] main -> origin/main +Release Run actions/checkout@v6 2026-05-12T21:20:05.6227634Z * [new branch] named-links -> origin/named-links +Release Run actions/checkout@v6 2026-05-12T21:20:05.6228186Z * [new branch] nested-creation-1 -> origin/nested-creation-1 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6228903Z * [new tag] 1.0.1 -> 1.0.1 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6229481Z * [new tag] csharp-v2.4.0 -> csharp-v2.4.0 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6230078Z * [new tag] rust-v0.1.0 -> rust-v0.1.0 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6230617Z * [new tag] rust-v0.2.0 -> rust-v0.2.0 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6231150Z * [new tag] rust-v0.2.1 -> rust-v0.2.1 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6231623Z * [new tag] rust-v0.2.2 -> rust-v0.2.2 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6232106Z * [new tag] v1.2.1 -> v1.2.1 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6232631Z * [new tag] v1.2.2 -> v1.2.2 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6233048Z * [new tag] v1.2.3 -> v1.2.3 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6233492Z * [new tag] v1.3.0 -> v1.3.0 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6233997Z * [new tag] v1.3.1 -> v1.3.1 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6234438Z * [new tag] v1.4.0 -> v1.4.0 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6234878Z * [new tag] v1.4.1 -> v1.4.1 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6235314Z * [new tag] v1.5.0 -> v1.5.0 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6235815Z * [new tag] v1.6.0 -> v1.6.0 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6236282Z * [new tag] v1.7.0 -> v1.7.0 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6236713Z * [new tag] v1.7.1 -> v1.7.1 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6237214Z * [new tag] v1.7.2 -> v1.7.2 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6237663Z * [new tag] v1.7.3 -> v1.7.3 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6238114Z * [new tag] v1.7.4 -> v1.7.4 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6238594Z * [new tag] v1.8.0 -> v1.8.0 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6239229Z * [new tag] v2.0.2 -> v2.0.2 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6239687Z * [new tag] v2.1.0 -> v2.1.0 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6240199Z * [new tag] v2.1.1 -> v2.1.1 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6240624Z * [new tag] v2.1.2 -> v2.1.2 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6241125Z * [new tag] v2.1.3 -> v2.1.3 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6241642Z * [new tag] v2.2.0 -> v2.2.0 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6242268Z * [new tag] v2.2.1 -> v2.2.1 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6242935Z * [new tag] v2.2.2 -> v2.2.2 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6243472Z * [new tag] v2.4.0 -> v2.4.0 +Release Run actions/checkout@v6 2026-05-12T21:20:05.6289581Z [command]/usr/bin/git branch --list --remote origin/main +Release Run actions/checkout@v6 2026-05-12T21:20:05.6314211Z origin/main +Release Run actions/checkout@v6 2026-05-12T21:20:05.6320113Z [command]/usr/bin/git rev-parse refs/remotes/origin/main +Release Run actions/checkout@v6 2026-05-12T21:20:05.6337567Z 0c8092c56b0fb11704f89398b6d831cd9bbe007d +Release Run actions/checkout@v6 2026-05-12T21:20:05.6341448Z ##[endgroup] +Release Run actions/checkout@v6 2026-05-12T21:20:05.6341877Z ##[group]Determining the checkout info +Release Run actions/checkout@v6 2026-05-12T21:20:05.6342517Z ##[endgroup] +Release Run actions/checkout@v6 2026-05-12T21:20:05.6345699Z [command]/usr/bin/git sparse-checkout disable +Release Run actions/checkout@v6 2026-05-12T21:20:05.6375122Z [command]/usr/bin/git config --local --unset-all extensions.worktreeConfig +Release Run actions/checkout@v6 2026-05-12T21:20:05.6398048Z ##[group]Checking out the ref +Release Run actions/checkout@v6 2026-05-12T21:20:05.6400233Z [command]/usr/bin/git checkout --progress --force -B main refs/remotes/origin/main +Release Run actions/checkout@v6 2026-05-12T21:20:05.6941706Z Switched to a new branch 'main' +Release Run actions/checkout@v6 2026-05-12T21:20:05.6942368Z branch 'main' set up to track 'origin/main'. +Release Run actions/checkout@v6 2026-05-12T21:20:05.6953358Z ##[endgroup] +Release Run actions/checkout@v6 2026-05-12T21:20:05.6989134Z [command]/usr/bin/git log -1 --format=%H +Release Run actions/checkout@v6 2026-05-12T21:20:05.7009243Z 0c8092c56b0fb11704f89398b6d831cd9bbe007d +Release Setup .NET 2026-05-12T21:20:05.7256061Z ##[group]Run actions/setup-dotnet@v5 +Release Setup .NET 2026-05-12T21:20:05.7256297Z with: +Release Setup .NET 2026-05-12T21:20:05.7256448Z dotnet-version: 8.0.x +Release Setup .NET 2026-05-12T21:20:05.7256622Z cache: false +Release Setup .NET 2026-05-12T21:20:05.7256762Z env: +Release Setup .NET 2026-05-12T21:20:05.7256915Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Release Setup .NET 2026-05-12T21:20:05.7257137Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Release Setup .NET 2026-05-12T21:20:05.7257330Z DOTNET_NOLOGO: true +Release Setup .NET 2026-05-12T21:20:05.7257494Z ##[endgroup] +Release Setup .NET 2026-05-12T21:20:05.8283942Z [command]/home/runner/work/_actions/actions/setup-dotnet/v5/externals/install-dotnet.sh --skip-non-versioned-files --runtime dotnet --channel LTS +Release Setup .NET 2026-05-12T21:20:06.1627414Z dotnet-install: Attempting to download using aka.ms link https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.8/dotnet-runtime-10.0.8-linux-x64.tar.gz +Release Setup .NET 2026-05-12T21:20:06.8545774Z dotnet-install: Remote file https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.8/dotnet-runtime-10.0.8-linux-x64.tar.gz size is 36625163 bytes. +Release Setup .NET 2026-05-12T21:20:06.8547096Z dotnet-install: Extracting archive from https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.8/dotnet-runtime-10.0.8-linux-x64.tar.gz +Release Setup .NET 2026-05-12T21:20:07.4275530Z dotnet-install: Downloaded file size is 36625163 bytes. +Release Setup .NET 2026-05-12T21:20:07.4276368Z dotnet-install: The remote and local file sizes are equal. +Release Setup .NET 2026-05-12T21:20:07.4503191Z dotnet-install: Installed version is 10.0.8 +Release Setup .NET 2026-05-12T21:20:07.4551808Z dotnet-install: Adding to current process PATH: `/usr/share/dotnet`. Note: This change will be visible only when sourcing script. +Release Setup .NET 2026-05-12T21:20:07.4553068Z dotnet-install: Note that the script does not resolve dependencies during installation. +Release Setup .NET 2026-05-12T21:20:07.4555846Z dotnet-install: To check the list of dependencies, go to https://learn.microsoft.com/dotnet/core/install, select your operating system and check the "Dependencies" section. +Release Setup .NET 2026-05-12T21:20:07.4557083Z dotnet-install: Installation finished successfully. +Release Setup .NET 2026-05-12T21:20:07.4574923Z [command]/home/runner/work/_actions/actions/setup-dotnet/v5/externals/install-dotnet.sh --skip-non-versioned-files --channel 8.0 +Release Setup .NET 2026-05-12T21:20:07.7337066Z dotnet-install: Attempting to download using aka.ms link https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.421/dotnet-sdk-8.0.421-linux-x64.tar.gz +Release Setup .NET 2026-05-12T21:20:13.0495087Z dotnet-install: Remote file https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.421/dotnet-sdk-8.0.421-linux-x64.tar.gz size is 216612394 bytes. +Release Setup .NET 2026-05-12T21:20:13.0497512Z dotnet-install: Extracting archive from https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.421/dotnet-sdk-8.0.421-linux-x64.tar.gz +Release Setup .NET 2026-05-12T21:20:17.2438361Z dotnet-install: Downloaded file size is 216612394 bytes. +Release Setup .NET 2026-05-12T21:20:17.2439171Z dotnet-install: The remote and local file sizes are equal. +Release Setup .NET 2026-05-12T21:20:19.3981585Z dotnet-install: Installed version is 8.0.421 +Release Setup .NET 2026-05-12T21:20:19.4030997Z dotnet-install: Adding to current process PATH: `/usr/share/dotnet`. Note: This change will be visible only when sourcing script. +Release Setup .NET 2026-05-12T21:20:19.4031831Z dotnet-install: Note that the script does not resolve dependencies during installation. +Release Setup .NET 2026-05-12T21:20:19.4032563Z dotnet-install: To check the list of dependencies, go to https://learn.microsoft.com/dotnet/core/install, select your operating system and check the "Dependencies" section. +Release Setup .NET 2026-05-12T21:20:19.4033401Z dotnet-install: Installation finished successfully. +Release Setup Node.js 2026-05-12T21:20:19.4198122Z ##[group]Run actions/setup-node@v6 +Release Setup Node.js 2026-05-12T21:20:19.4198323Z with: +Release Setup Node.js 2026-05-12T21:20:19.4198472Z node-version: 20.x +Release Setup Node.js 2026-05-12T21:20:19.4198633Z check-latest: false +Release Setup Node.js 2026-05-12T21:20:19.4199109Z token: *** +Release Setup Node.js 2026-05-12T21:20:19.4199290Z package-manager-cache: true +Release Setup Node.js 2026-05-12T21:20:19.4199478Z env: +Release Setup Node.js 2026-05-12T21:20:19.4199631Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Release Setup Node.js 2026-05-12T21:20:19.4199838Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Release Setup Node.js 2026-05-12T21:20:19.4200024Z DOTNET_NOLOGO: true +Release Setup Node.js 2026-05-12T21:20:19.4200194Z DOTNET_ROOT: /usr/share/dotnet +Release Setup Node.js 2026-05-12T21:20:19.4200364Z ##[endgroup] +Release Setup Node.js 2026-05-12T21:20:19.6633751Z Found in cache @ /opt/hostedtoolcache/node/20.20.2/x64 +Release Setup Node.js 2026-05-12T21:20:19.6637208Z ##[group]Environment details +Release Setup Node.js 2026-05-12T21:20:20.9373404Z node: v20.20.2 +Release Setup Node.js 2026-05-12T21:20:20.9373723Z npm: 10.8.2 +Release Setup Node.js 2026-05-12T21:20:20.9373935Z yarn: 1.22.22 +Release Setup Node.js 2026-05-12T21:20:20.9375020Z ##[endgroup] +Release Check for changesets 2026-05-12T21:20:20.9482224Z ##[group]Run # Count changeset files (excluding README.md and config.json) +Release Check for changesets 2026-05-12T21:20:20.9482697Z ^[[36;1m# Count changeset files (excluding README.md and config.json)^[[0m +Release Check for changesets 2026-05-12T21:20:20.9483133Z ^[[36;1mCHANGESET_COUNT=$(find csharp/.changeset -name "*.md" ! -name "README.md" 2>/dev/null | wc -l)^[[0m +Release Check for changesets 2026-05-12T21:20:20.9483544Z ^[[36;1mecho "Found $CHANGESET_COUNT changeset file(s)"^[[0m +Release Check for changesets 2026-05-12T21:20:20.9484109Z ^[[36;1mecho "has_changesets=$([[ $CHANGESET_COUNT -gt 0 ]] && echo 'true' || echo 'false')" >> $GITHUB_OUTPUT^[[0m +Release Check for changesets 2026-05-12T21:20:20.9484508Z ^[[36;1mecho "changeset_count=$CHANGESET_COUNT" >> $GITHUB_OUTPUT^[[0m +Release Check for changesets 2026-05-12T21:20:20.9543627Z shell: /usr/bin/bash -e {0} +Release Check for changesets 2026-05-12T21:20:20.9543827Z env: +Release Check for changesets 2026-05-12T21:20:20.9543989Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Release Check for changesets 2026-05-12T21:20:20.9544210Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Release Check for changesets 2026-05-12T21:20:20.9544404Z DOTNET_NOLOGO: true +Release Check for changesets 2026-05-12T21:20:20.9544572Z DOTNET_ROOT: /usr/share/dotnet +Release Check for changesets 2026-05-12T21:20:20.9544758Z ##[endgroup] +Release Check for changesets 2026-05-12T21:20:20.9700761Z Found 0 changeset file(s) +Release Check if release is needed 2026-05-12T21:20:20.9740828Z ##[group]Run node csharp/scripts/check-release-needed.mjs +Release Check if release is needed 2026-05-12T21:20:20.9741141Z ^[[36;1mnode csharp/scripts/check-release-needed.mjs^[[0m +Release Check if release is needed 2026-05-12T21:20:20.9758206Z shell: /usr/bin/bash -e {0} +Release Check if release is needed 2026-05-12T21:20:20.9758425Z env: +Release Check if release is needed 2026-05-12T21:20:20.9758588Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Release Check if release is needed 2026-05-12T21:20:20.9759055Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Release Check if release is needed 2026-05-12T21:20:20.9759245Z DOTNET_NOLOGO: true +Release Check if release is needed 2026-05-12T21:20:20.9759419Z DOTNET_ROOT: /usr/share/dotnet +Release Check if release is needed 2026-05-12T21:20:20.9759611Z HAS_CHANGESETS: false +Release Check if release is needed 2026-05-12T21:20:20.9759956Z GH_TOKEN: *** +Release Check if release is needed 2026-05-12T21:20:20.9760148Z GITHUB_REPOSITORY: link-foundation/link-cli +Release Check if release is needed 2026-05-12T21:20:20.9760355Z ##[endgroup] +Release Check if release is needed 2026-05-12T21:20:21.0204062Z csproj path: csharp/Foundation.Data.Doublets.Cli/Foundation.Data.Doublets.Cli.csproj +Release Check if release is needed 2026-05-12T21:20:21.0206451Z Package id: clink +Release Check if release is needed 2026-05-12T21:20:21.0206754Z Current version: 2.4.0 +Release Check if release is needed 2026-05-12T21:20:21.0207160Z Repository: link-foundation/link-cli +Release Check if release is needed 2026-05-12T21:20:21.0207532Z Has changesets: false +Release Check if release is needed 2026-05-12T21:20:21.0208188Z Fetching https://api.nuget.org/v3-flatcontainer/clink/index.json +Release Check if release is needed 2026-05-12T21:20:21.1205644Z NuGet: 24 version(s) registered +Release Check if release is needed 2026-05-12T21:20:21.1206743Z NuGet versions: 1.0.0, 1.0.1, 1.1.0, 1.2.0, 1.2.3, 1.3.0, 1.3.1, 1.4.0, 1.4.1, 1.5.0, 1.6.0, 1.7.0, 1.7.1, 1.7.3, 1.7.4, 1.8.0, 2.0.2, 2.1.0, 2.1.1, 2.1.2, 2.1.3, 2.2.0, 2.2.1, 2.2.2 +Release Check if release is needed 2026-05-12T21:20:21.1207907Z Fetching https://api.github.com/repos/link-foundation/link-cli/releases/tags/csharp-v2.4.0 +Release Check if release is needed 2026-05-12T21:20:21.3621893Z GitHub release csharp-v2.4.0: missing +Release Check if release is needed 2026-05-12T21:20:21.3622881Z Decision: v2.4.0 not yet published on NuGet — self-healing resume +Release Check if release is needed 2026-05-12T21:20:21.3624856Z Output: should_release=true +Release Check if release is needed 2026-05-12T21:20:21.3625290Z Output: skip_bump=true +Release Check if release is needed 2026-05-12T21:20:21.3626600Z Output: current_version=2.4.0 +Release Check if release is needed 2026-05-12T21:20:21.3626989Z Output: nuget_published=false +Release Check if release is needed 2026-05-12T21:20:21.3628246Z Output: github_release_exists=false +Release Check if release is needed 2026-05-12T21:20:21.3629031Z Output: reason=v2.4.0 not yet published on NuGet — self-healing resume +Release Resolve release version 2026-05-12T21:20:21.3944525Z ##[group]Run if [ -n "" ]; then +Release Resolve release version 2026-05-12T21:20:21.3944754Z ^[[36;1mif [ -n "" ]; then^[[0m +Release Resolve release version 2026-05-12T21:20:21.3944929Z ^[[36;1m VERSION=""^[[0m +Release Resolve release version 2026-05-12T21:20:21.3945085Z ^[[36;1melse^[[0m +Release Resolve release version 2026-05-12T21:20:21.3945233Z ^[[36;1m VERSION="2.4.0"^[[0m +Release Resolve release version 2026-05-12T21:20:21.3945409Z ^[[36;1mfi^[[0m +Release Resolve release version 2026-05-12T21:20:21.3945585Z ^[[36;1mecho "version=$VERSION" >> "$GITHUB_OUTPUT"^[[0m +Release Resolve release version 2026-05-12T21:20:21.3945836Z ^[[36;1mecho "Releasing version: $VERSION"^[[0m +Release Resolve release version 2026-05-12T21:20:21.3963677Z shell: /usr/bin/bash -e {0} +Release Resolve release version 2026-05-12T21:20:21.3963853Z env: +Release Resolve release version 2026-05-12T21:20:21.3964011Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Release Resolve release version 2026-05-12T21:20:21.3964223Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Release Resolve release version 2026-05-12T21:20:21.3964405Z DOTNET_NOLOGO: true +Release Resolve release version 2026-05-12T21:20:21.3964573Z DOTNET_ROOT: /usr/share/dotnet +Release Resolve release version 2026-05-12T21:20:21.3964741Z ##[endgroup] +Release Resolve release version 2026-05-12T21:20:21.4003760Z Releasing version: 2.4.0 +Release Build release package 2026-05-12T21:20:21.4029212Z ##[group]Run dotnet restore +Release Build release package 2026-05-12T21:20:21.4029429Z ^[[36;1mdotnet restore^[[0m +Release Build release package 2026-05-12T21:20:21.4029623Z ^[[36;1mdotnet build --configuration Release^[[0m +Release Build release package 2026-05-12T21:20:21.4029921Z ^[[36;1mdotnet pack --no-build --configuration Release --output ./artifacts^[[0m +Release Build release package 2026-05-12T21:20:21.4046225Z shell: /usr/bin/bash -e {0} +Release Build release package 2026-05-12T21:20:21.4046531Z env: +Release Build release package 2026-05-12T21:20:21.4046692Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Release Build release package 2026-05-12T21:20:21.4046907Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Release Build release package 2026-05-12T21:20:21.4047093Z DOTNET_NOLOGO: true +Release Build release package 2026-05-12T21:20:21.4047260Z DOTNET_ROOT: /usr/share/dotnet +Release Build release package 2026-05-12T21:20:21.4047431Z ##[endgroup] +Release Build release package 2026-05-12T21:20:25.5323369Z Determining projects to restore... +Release Build release package 2026-05-12T21:20:33.0421004Z Restored /home/runner/work/link-cli/link-cli/csharp/Foundation.Data.Doublets.Cli/Foundation.Data.Doublets.Cli.csproj (in 5.94 sec). +Release Build release package 2026-05-12T21:20:33.0597107Z Restored /home/runner/work/link-cli/link-cli/csharp/Foundation.Data.Doublets.Cli.Tests/Foundation.Data.Doublets.Cli.Tests.csproj (in 5.97 sec). +Release Build release package 2026-05-12T21:20:33.5470130Z Determining projects to restore... +Release Build release package 2026-05-12T21:20:33.9007468Z All projects are up-to-date for restore. +Release Build release package 2026-05-12T21:20:38.9146508Z Foundation.Data.Doublets.Cli -> /home/runner/work/link-cli/link-cli/csharp/Foundation.Data.Doublets.Cli/bin/Release/net8/Foundation.Data.Doublets.Cli.dll +Release Build release package 2026-05-12T21:20:39.8329972Z Foundation.Data.Doublets.Cli.Tests -> /home/runner/work/link-cli/link-cli/csharp/Foundation.Data.Doublets.Cli.Tests/bin/Release/net8/Foundation.Data.Doublets.Cli.Tests.dll +Release Build release package 2026-05-12T21:20:39.8449060Z +Release Build release package 2026-05-12T21:20:39.8454757Z Build succeeded. +Release Build release package 2026-05-12T21:20:39.8455086Z 0 Warning(s) +Release Build release package 2026-05-12T21:20:39.8455332Z 0 Error(s) +Release Build release package 2026-05-12T21:20:39.8455767Z +Release Build release package 2026-05-12T21:20:39.8456054Z Time Elapsed 00:00:06.62 +Release Build release package 2026-05-12T21:20:40.2545964Z Foundation.Data.Doublets.Cli -> /home/runner/work/link-cli/link-cli/csharp/Foundation.Data.Doublets.Cli/bin/Release/net8/publish/ +Release Build release package 2026-05-12T21:20:40.5106745Z Successfully created package '/home/runner/work/link-cli/link-cli/csharp/artifacts/clink.2.4.0.nupkg'. +Release Resolve NuGet package id 2026-05-12T21:20:40.5365901Z ##[group]Run PACKAGE_ID=$(sed -n 's:.*\(.*\).*:\1:p' Foundation.Data.Doublets.Cli/Foundation.Data.Doublets.Cli.csproj | head -n 1) +Release Resolve NuGet package id 2026-05-12T21:20:40.5366684Z ^[[36;1mPACKAGE_ID=$(sed -n 's:.*\(.*\).*:\1:p' Foundation.Data.Doublets.Cli/Foundation.Data.Doublets.Cli.csproj | head -n 1)^[[0m +Release Resolve NuGet package id 2026-05-12T21:20:40.5367145Z ^[[36;1mif [ -z "$PACKAGE_ID" ]; then^[[0m +Release Resolve NuGet package id 2026-05-12T21:20:40.5367351Z ^[[36;1m PACKAGE_ID=clink^[[0m +Release Resolve NuGet package id 2026-05-12T21:20:40.5367518Z ^[[36;1mfi^[[0m +Release Resolve NuGet package id 2026-05-12T21:20:40.5367743Z ^[[36;1mPACKAGE_ID_LOWER=$(echo "$PACKAGE_ID" | tr '[:upper:]' '[:lower:]')^[[0m +Release Resolve NuGet package id 2026-05-12T21:20:40.5368051Z ^[[36;1mecho "id=$PACKAGE_ID" >> "$GITHUB_OUTPUT"^[[0m +Release Resolve NuGet package id 2026-05-12T21:20:40.5368324Z ^[[36;1mecho "flat_container_id=$PACKAGE_ID_LOWER" >> "$GITHUB_OUTPUT"^[[0m +Release Resolve NuGet package id 2026-05-12T21:20:40.5386813Z shell: /usr/bin/bash -e {0} +Release Resolve NuGet package id 2026-05-12T21:20:40.5386999Z env: +Release Resolve NuGet package id 2026-05-12T21:20:40.5387163Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Release Resolve NuGet package id 2026-05-12T21:20:40.5387370Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Release Resolve NuGet package id 2026-05-12T21:20:40.5387596Z DOTNET_NOLOGO: true +Release Resolve NuGet package id 2026-05-12T21:20:40.5387771Z DOTNET_ROOT: /usr/share/dotnet +Release Resolve NuGet package id 2026-05-12T21:20:40.5387957Z ##[endgroup] +Release Validate NuGet API key 2026-05-12T21:20:40.6279917Z ##[group]Run if [ -z "$NUGET_API_KEY" ]; then +Release Validate NuGet API key 2026-05-12T21:20:40.6280203Z ^[[36;1mif [ -z "$NUGET_API_KEY" ]; then^[[0m +Release Validate NuGet API key 2026-05-12T21:20:40.6280532Z ^[[36;1m echo "::warning::NUGET_API_KEY is not configured — NuGet publish will be skipped."^[[0m +Release Validate NuGet API key 2026-05-12T21:20:40.6280852Z ^[[36;1m exit 0^[[0m +Release Validate NuGet API key 2026-05-12T21:20:40.6280999Z ^[[36;1mfi^[[0m +Release Validate NuGet API key 2026-05-12T21:20:40.6281175Z ^[[36;1mecho "NUGET_API_KEY length: ${#NUGET_API_KEY}"^[[0m +Release Validate NuGet API key 2026-05-12T21:20:40.6298530Z shell: /usr/bin/bash -e {0} +Release Validate NuGet API key 2026-05-12T21:20:40.6298710Z env: +Release Validate NuGet API key 2026-05-12T21:20:40.6298980Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Release Validate NuGet API key 2026-05-12T21:20:40.6299188Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Release Validate NuGet API key 2026-05-12T21:20:40.6299378Z DOTNET_NOLOGO: true +Release Validate NuGet API key 2026-05-12T21:20:40.6299537Z DOTNET_ROOT: /usr/share/dotnet +Release Validate NuGet API key 2026-05-12T21:20:40.6300175Z NUGET_API_KEY: *** +Release Validate NuGet API key 2026-05-12T21:20:40.6300357Z ##[endgroup] +Release Validate NuGet API key 2026-05-12T21:20:40.7251733Z NUGET_API_KEY length: 46 +Release Publish to NuGet 2026-05-12T21:20:40.7280378Z ##[group]Run if [ -n "$NUGET_API_KEY" ]; then +Release Publish to NuGet 2026-05-12T21:20:40.7280643Z ^[[36;1mif [ -n "$NUGET_API_KEY" ]; then^[[0m +Release Publish to NuGet 2026-05-12T21:20:40.7281241Z ^[[36;1m dotnet nuget push ./artifacts/*.nupkg --api-key "$NUGET_API_KEY" --source https://api.nuget.org/v3/index.json --skip-duplicate^[[0m +Release Publish to NuGet 2026-05-12T21:20:40.7281713Z ^[[36;1m echo "published=true" >> "$GITHUB_OUTPUT"^[[0m +Release Publish to NuGet 2026-05-12T21:20:40.7281933Z ^[[36;1melse^[[0m +Release Publish to NuGet 2026-05-12T21:20:40.7282128Z ^[[36;1m echo "NUGET_API_KEY not set, skipping NuGet publish"^[[0m +Release Publish to NuGet 2026-05-12T21:20:40.7282396Z ^[[36;1m echo "published=false" >> "$GITHUB_OUTPUT"^[[0m +Release Publish to NuGet 2026-05-12T21:20:40.7282611Z ^[[36;1mfi^[[0m +Release Publish to NuGet 2026-05-12T21:20:40.7300184Z shell: /usr/bin/bash -e {0} +Release Publish to NuGet 2026-05-12T21:20:40.7300357Z env: +Release Publish to NuGet 2026-05-12T21:20:40.7300524Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Release Publish to NuGet 2026-05-12T21:20:40.7300740Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Release Publish to NuGet 2026-05-12T21:20:40.7300925Z DOTNET_NOLOGO: true +Release Publish to NuGet 2026-05-12T21:20:40.7301093Z DOTNET_ROOT: /usr/share/dotnet +Release Publish to NuGet 2026-05-12T21:20:40.7301493Z NUGET_API_KEY: *** +Release Publish to NuGet 2026-05-12T21:20:40.7301681Z ##[endgroup] +Release Publish to NuGet 2026-05-12T21:20:41.0369432Z Pushing clink.2.4.0.nupkg to 'https://www.nuget.org/api/v2/package'... +Release Publish to NuGet 2026-05-12T21:20:41.0449600Z PUT https://www.nuget.org/api/v2/package/ +Release Publish to NuGet 2026-05-12T21:20:41.6573341Z Created https://www.nuget.org/api/v2/package/ 611ms +Release Publish to NuGet 2026-05-12T21:20:41.6587760Z Your package was pushed. +Release Verify package on NuGet 2026-05-12T21:20:41.6736746Z ##[group]Run PACKAGE_ID="clink" +Release Verify package on NuGet 2026-05-12T21:20:41.6737115Z ^[[36;1mPACKAGE_ID="clink"^[[0m +Release Verify package on NuGet 2026-05-12T21:20:41.6737407Z ^[[36;1mPACKAGE_ID_LOWER="clink"^[[0m +Release Verify package on NuGet 2026-05-12T21:20:41.6737695Z ^[[36;1mVERSION="2.4.0"^[[0m +Release Verify package on NuGet 2026-05-12T21:20:41.6737973Z ^[[36;1mfor DELAY in 0 5 10 20 30 60; do^[[0m +Release Verify package on NuGet 2026-05-12T21:20:41.6738285Z ^[[36;1m if [ "$DELAY" != "0" ]; then^[[0m +Release Verify package on NuGet 2026-05-12T21:20:41.6738589Z ^[[36;1m sleep "$DELAY"^[[0m +Release Verify package on NuGet 2026-05-12T21:20:41.6739032Z ^[[36;1m fi^[[0m +Release Verify package on NuGet 2026-05-12T21:20:41.6739771Z ^[[36;1m STATUS=$(curl -sS -o /dev/null -w '%{http_code}' "https://api.nuget.org/v3-flatcontainer/${PACKAGE_ID_LOWER}/${VERSION}/${PACKAGE_ID_LOWER}.nuspec" || true)^[[0m +Release Verify package on NuGet 2026-05-12T21:20:41.6740668Z ^[[36;1m echo "NuGet status for ${PACKAGE_ID}@${VERSION}: ${STATUS}"^[[0m +Release Verify package on NuGet 2026-05-12T21:20:41.6741109Z ^[[36;1m if [ "$STATUS" = "200" ]; then^[[0m +Release Verify package on NuGet 2026-05-12T21:20:41.6741528Z ^[[36;1m echo "Verified ${PACKAGE_ID}@${VERSION} is available on NuGet"^[[0m +Release Verify package on NuGet 2026-05-12T21:20:41.6741953Z ^[[36;1m exit 0^[[0m +Release Verify package on NuGet 2026-05-12T21:20:41.6742183Z ^[[36;1m fi^[[0m +Release Verify package on NuGet 2026-05-12T21:20:41.6742445Z ^[[36;1mdone^[[0m +Release Verify package on NuGet 2026-05-12T21:20:41.6743001Z ^[[36;1mecho "::error title=NuGet verification failed::${PACKAGE_ID}@${VERSION} was not available from NuGet after publish."^[[0m +Release Verify package on NuGet 2026-05-12T21:20:41.6743644Z ^[[36;1mexit 1^[[0m +Release Verify package on NuGet 2026-05-12T21:20:41.6769522Z shell: /usr/bin/bash -e {0} +Release Verify package on NuGet 2026-05-12T21:20:41.6769820Z env: +Release Verify package on NuGet 2026-05-12T21:20:41.6770092Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Release Verify package on NuGet 2026-05-12T21:20:41.6770439Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Release Verify package on NuGet 2026-05-12T21:20:41.6770736Z DOTNET_NOLOGO: true +Release Verify package on NuGet 2026-05-12T21:20:41.6771000Z DOTNET_ROOT: /usr/share/dotnet +Release Verify package on NuGet 2026-05-12T21:20:41.6771287Z ##[endgroup] +Release Verify package on NuGet 2026-05-12T21:20:41.7602880Z NuGet status for clink@2.4.0: 404 +Release Verify package on NuGet 2026-05-12T21:20:46.8276625Z NuGet status for clink@2.4.0: 404 +Release Verify package on NuGet 2026-05-12T21:20:56.8959205Z NuGet status for clink@2.4.0: 404 +Release Verify package on NuGet 2026-05-12T21:21:16.9670333Z NuGet status for clink@2.4.0: 404 +Release Verify package on NuGet 2026-05-12T21:21:47.0368546Z NuGet status for clink@2.4.0: 404 +Release Verify package on NuGet 2026-05-12T21:22:47.1082969Z NuGet status for clink@2.4.0: 404 +Release Verify package on NuGet 2026-05-12T21:22:47.1099540Z ##[error]clink@2.4.0 was not available from NuGet after publish. +Release Verify package on NuGet 2026-05-12T21:22:47.1106918Z ##[error]Process completed with exit code 1. +Release Post Run actions/checkout@v6 2026-05-12T21:22:47.1186011Z Post job cleanup. +Release Post Run actions/checkout@v6 2026-05-12T21:22:47.1854100Z [command]/usr/bin/git version +Release Post Run actions/checkout@v6 2026-05-12T21:22:47.1884440Z git version 2.53.0 +Release Post Run actions/checkout@v6 2026-05-12T21:22:47.1914993Z Temporarily overriding HOME='/home/runner/work/_temp/92f808f0-b247-4818-bb43-01124b0e705b' before making global git config changes +Release Post Run actions/checkout@v6 2026-05-12T21:22:47.1916435Z Adding repository directory to the temporary git global config as a safe directory +Release Post Run actions/checkout@v6 2026-05-12T21:22:47.1919469Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/link-cli/link-cli +Release Post Run actions/checkout@v6 2026-05-12T21:22:47.1944593Z Removing SSH command configuration +Release Post Run actions/checkout@v6 2026-05-12T21:22:47.1949519Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand +Release Post Run actions/checkout@v6 2026-05-12T21:22:47.1979448Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :" +Release Post Run actions/checkout@v6 2026-05-12T21:22:47.2196732Z Removing HTTP extra header +Release Post Run actions/checkout@v6 2026-05-12T21:22:47.2201294Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader +Release Post Run actions/checkout@v6 2026-05-12T21:22:47.2230006Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :" +Release Post Run actions/checkout@v6 2026-05-12T21:22:47.2410006Z Removing includeIf entries pointing to credentials config files +Release Post Run actions/checkout@v6 2026-05-12T21:22:47.2415708Z [command]/usr/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir: +Release Post Run actions/checkout@v6 2026-05-12T21:22:47.2435659Z includeif.gitdir:/home/runner/work/link-cli/link-cli/.git.path +Release Post Run actions/checkout@v6 2026-05-12T21:22:47.2436451Z includeif.gitdir:/home/runner/work/link-cli/link-cli/.git/worktrees/*.path +Release Post Run actions/checkout@v6 2026-05-12T21:22:47.2437062Z includeif.gitdir:/github/workspace/.git.path +Release Post Run actions/checkout@v6 2026-05-12T21:22:47.2437604Z includeif.gitdir:/github/workspace/.git/worktrees/*.path +Release Post Run actions/checkout@v6 2026-05-12T21:22:47.2443523Z [command]/usr/bin/git config --local --get-all includeif.gitdir:/home/runner/work/link-cli/link-cli/.git.path +Release Post Run actions/checkout@v6 2026-05-12T21:22:47.2462204Z /home/runner/work/_temp/git-credentials-b9563dbc-b8f1-4f4a-b2fd-d2285e354a98.config +Release Post Run actions/checkout@v6 2026-05-12T21:22:47.2470283Z [command]/usr/bin/git config --local --unset includeif.gitdir:/home/runner/work/link-cli/link-cli/.git.path /home/runner/work/_temp/git-credentials-b9563dbc-b8f1-4f4a-b2fd-d2285e354a98.config +Release Post Run actions/checkout@v6 2026-05-12T21:22:47.2497218Z [command]/usr/bin/git config --local --get-all includeif.gitdir:/home/runner/work/link-cli/link-cli/.git/worktrees/*.path +Release Post Run actions/checkout@v6 2026-05-12T21:22:47.2516056Z /home/runner/work/_temp/git-credentials-b9563dbc-b8f1-4f4a-b2fd-d2285e354a98.config +Release Post Run actions/checkout@v6 2026-05-12T21:22:47.2523539Z [command]/usr/bin/git config --local --unset includeif.gitdir:/home/runner/work/link-cli/link-cli/.git/worktrees/*.path /home/runner/work/_temp/git-credentials-b9563dbc-b8f1-4f4a-b2fd-d2285e354a98.config +Release Post Run actions/checkout@v6 2026-05-12T21:22:47.2548521Z [command]/usr/bin/git config --local --get-all includeif.gitdir:/github/workspace/.git.path +Release Post Run actions/checkout@v6 2026-05-12T21:22:47.2565498Z /github/runner_temp/git-credentials-b9563dbc-b8f1-4f4a-b2fd-d2285e354a98.config +Release Post Run actions/checkout@v6 2026-05-12T21:22:47.2571276Z [command]/usr/bin/git config --local --unset includeif.gitdir:/github/workspace/.git.path /github/runner_temp/git-credentials-b9563dbc-b8f1-4f4a-b2fd-d2285e354a98.config +Release Post Run actions/checkout@v6 2026-05-12T21:22:47.2595849Z [command]/usr/bin/git config --local --get-all includeif.gitdir:/github/workspace/.git/worktrees/*.path +Release Post Run actions/checkout@v6 2026-05-12T21:22:47.2612899Z /github/runner_temp/git-credentials-b9563dbc-b8f1-4f4a-b2fd-d2285e354a98.config +Release Post Run actions/checkout@v6 2026-05-12T21:22:47.2621753Z [command]/usr/bin/git config --local --unset includeif.gitdir:/github/workspace/.git/worktrees/*.path /github/runner_temp/git-credentials-b9563dbc-b8f1-4f4a-b2fd-d2285e354a98.config +Release Post Run actions/checkout@v6 2026-05-12T21:22:47.2648688Z [command]/usr/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url +Release Post Run actions/checkout@v6 2026-05-12T21:22:47.2827827Z Removing credentials config '/home/runner/work/_temp/git-credentials-b9563dbc-b8f1-4f4a-b2fd-d2285e354a98.config' +Release Complete job 2026-05-12T21:22:47.2959339Z Cleaning up orphan processes +Release Complete job 2026-05-12T21:22:47.3219043Z Terminate orphan process: pid (2613) (dotnet) +Release Complete job 2026-05-12T21:22:47.3241215Z Terminate orphan process: pid (2691) (VBCSCompiler) +Build Package Set up job 2026-05-12T20:43:01.2719568Z Current runner version: '2.334.0' +Build Package Set up job 2026-05-12T20:43:01.2753494Z ##[group]Runner Image Provisioner +Build Package Set up job 2026-05-12T20:43:01.2754808Z Hosted Compute Agent +Build Package Set up job 2026-05-12T20:43:01.2755729Z Version: 20260213.493 +Build Package Set up job 2026-05-12T20:43:01.2756778Z Commit: 5c115507f6dd24b8de37d8bbe0bb4509d0cc0fa3 +Build Package Set up job 2026-05-12T20:43:01.2757883Z Build Date: 2026-02-13T00:28:41Z +Build Package Set up job 2026-05-12T20:43:01.2759401Z Worker ID: {cec34f8c-8314-490b-8a13-4ce25dcfba00} +Build Package Set up job 2026-05-12T20:43:01.2760601Z Azure Region: northcentralus +Build Package Set up job 2026-05-12T20:43:01.2761456Z ##[endgroup] +Build Package Set up job 2026-05-12T20:43:01.2764697Z ##[group]Operating System +Build Package Set up job 2026-05-12T20:43:01.2765680Z Ubuntu +Build Package Set up job 2026-05-12T20:43:01.2766494Z 24.04.4 +Build Package Set up job 2026-05-12T20:43:01.2767419Z LTS +Build Package Set up job 2026-05-12T20:43:01.2768265Z ##[endgroup] +Build Package Set up job 2026-05-12T20:43:01.2769320Z ##[group]Runner Image +Build Package Set up job 2026-05-12T20:43:01.2770327Z Image: ubuntu-24.04 +Build Package Set up job 2026-05-12T20:43:01.2771217Z Version: 20260413.86.1 +Build Package Set up job 2026-05-12T20:43:01.2772851Z Included Software: https://github.com/actions/runner-images/blob/ubuntu24/20260413.86/images/ubuntu/Ubuntu2404-Readme.md +Build Package Set up job 2026-05-12T20:43:01.2775834Z Image Release: https://github.com/actions/runner-images/releases/tag/ubuntu24%2F20260413.86 +Build Package Set up job 2026-05-12T20:43:01.2777469Z ##[endgroup] +Build Package Set up job 2026-05-12T20:43:01.2783441Z ##[group]GITHUB_TOKEN Permissions +Build Package Set up job 2026-05-12T20:43:01.2786618Z Actions: write +Build Package Set up job 2026-05-12T20:43:01.2788079Z ArtifactMetadata: write +Build Package Set up job 2026-05-12T20:43:01.2789274Z Attestations: write +Build Package Set up job 2026-05-12T20:43:01.2790207Z Checks: write +Build Package Set up job 2026-05-12T20:43:01.2791123Z CodeQuality: write +Build Package Set up job 2026-05-12T20:43:01.2792170Z Contents: write +Build Package Set up job 2026-05-12T20:43:01.2793026Z Deployments: write +Build Package Set up job 2026-05-12T20:43:01.2793937Z Discussions: write +Build Package Set up job 2026-05-12T20:43:01.2794837Z Issues: write +Build Package Set up job 2026-05-12T20:43:01.2795656Z Metadata: read +Build Package Set up job 2026-05-12T20:43:01.2796544Z Models: read +Build Package Set up job 2026-05-12T20:43:01.2797398Z Packages: write +Build Package Set up job 2026-05-12T20:43:01.2798431Z Pages: write +Build Package Set up job 2026-05-12T20:43:01.2799520Z PullRequests: write +Build Package Set up job 2026-05-12T20:43:01.2800727Z RepositoryProjects: write +Build Package Set up job 2026-05-12T20:43:01.2801697Z SecurityEvents: write +Build Package Set up job 2026-05-12T20:43:01.2802623Z Statuses: write +Build Package Set up job 2026-05-12T20:43:01.2803715Z VulnerabilityAlerts: read +Build Package Set up job 2026-05-12T20:43:01.2804668Z ##[endgroup] +Build Package Set up job 2026-05-12T20:43:01.2807447Z Secret source: Actions +Build Package Set up job 2026-05-12T20:43:01.2809171Z Prepare workflow directory +Build Package Set up job 2026-05-12T20:43:01.3406430Z Prepare all required actions +Build Package Set up job 2026-05-12T20:43:01.3463486Z Getting action download info +Build Package Set up job 2026-05-12T20:43:01.6471561Z Download action repository 'actions/checkout@v6' (SHA:de0fac2e4500dabe0009e67214ff5f5447ce83dd) +Build Package Set up job 2026-05-12T20:43:01.8031691Z Download action repository 'actions/setup-dotnet@v5' (SHA:c2fa09f4bde5ebb9d1777cf28262a3eb3db3ced7) +Build Package Set up job 2026-05-12T20:43:02.1748838Z Download action repository 'actions/upload-artifact@v7' (SHA:043fb46d1a93c77aae656e7c1c64a875d1fc6a0a) +Build Package Set up job 2026-05-12T20:43:02.7271477Z Complete job name: Build Package +Build Package Run actions/checkout@v6 2026-05-12T20:43:02.7993743Z ##[group]Run actions/checkout@v6 +Build Package Run actions/checkout@v6 2026-05-12T20:43:02.7994682Z with: +Build Package Run actions/checkout@v6 2026-05-12T20:43:02.7995100Z repository: link-foundation/link-cli +Build Package Run actions/checkout@v6 2026-05-12T20:43:02.7995784Z token: *** +Build Package Run actions/checkout@v6 2026-05-12T20:43:02.7996154Z ssh-strict: true +Build Package Run actions/checkout@v6 2026-05-12T20:43:02.7996565Z ssh-user: git +Build Package Run actions/checkout@v6 2026-05-12T20:43:02.7996962Z persist-credentials: true +Build Package Run actions/checkout@v6 2026-05-12T20:43:02.7997403Z clean: true +Build Package Run actions/checkout@v6 2026-05-12T20:43:02.7997806Z sparse-checkout-cone-mode: true +Build Package Run actions/checkout@v6 2026-05-12T20:43:02.7998275Z fetch-depth: 1 +Build Package Run actions/checkout@v6 2026-05-12T20:43:02.7999045Z fetch-tags: false +Build Package Run actions/checkout@v6 2026-05-12T20:43:02.7999557Z show-progress: true +Build Package Run actions/checkout@v6 2026-05-12T20:43:02.7999949Z lfs: false +Build Package Run actions/checkout@v6 2026-05-12T20:43:02.8000304Z submodules: false +Build Package Run actions/checkout@v6 2026-05-12T20:43:02.8000713Z set-safe-directory: true +Build Package Run actions/checkout@v6 2026-05-12T20:43:02.8001745Z env: +Build Package Run actions/checkout@v6 2026-05-12T20:43:02.8002177Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Build Package Run actions/checkout@v6 2026-05-12T20:43:02.8002726Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Build Package Run actions/checkout@v6 2026-05-12T20:43:02.8003205Z DOTNET_NOLOGO: true +Build Package Run actions/checkout@v6 2026-05-12T20:43:02.8003601Z ##[endgroup] +Build Package Run actions/checkout@v6 2026-05-12T20:43:02.8993670Z Syncing repository: link-foundation/link-cli +Build Package Run actions/checkout@v6 2026-05-12T20:43:02.8995569Z ##[group]Getting Git version info +Build Package Run actions/checkout@v6 2026-05-12T20:43:02.8996264Z Working directory is '/home/runner/work/link-cli/link-cli' +Build Package Run actions/checkout@v6 2026-05-12T20:43:02.8997195Z [command]/usr/bin/git version +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.1586532Z git version 2.53.0 +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.1609712Z ##[endgroup] +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.1624572Z Temporarily overriding HOME='/home/runner/work/_temp/dcbd5986-aa99-4069-b053-2fcbe6ac7bad' before making global git config changes +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.1626665Z Adding repository directory to the temporary git global config as a safe directory +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.1630324Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/link-cli/link-cli +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.1663234Z Deleting the contents of '/home/runner/work/link-cli/link-cli' +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.1667386Z ##[group]Initializing the repository +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.1672095Z [command]/usr/bin/git init /home/runner/work/link-cli/link-cli +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.1785595Z hint: Using 'master' as the name for the initial branch. This default branch name +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.1789020Z hint: will change to "main" in Git 3.0. To configure the initial branch name +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.1792192Z hint: to use in all of your new repositories, which will suppress this warning, +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.1795042Z hint: call: +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.1796336Z hint: +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.1797850Z hint: git config --global init.defaultBranch +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.1800028Z hint: +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.1801691Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.1804508Z hint: 'development'. The just-created branch can be renamed via this command: +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.1806875Z hint: +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.1807567Z hint: git branch -m +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.1808370Z hint: +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.1809830Z hint: Disable this message with "git config set advice.defaultBranchName false" +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.1812617Z Initialized empty Git repository in /home/runner/work/link-cli/link-cli/.git/ +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.1816953Z [command]/usr/bin/git remote add origin https://github.com/link-foundation/link-cli +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.1863523Z ##[endgroup] +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.1866397Z ##[group]Disabling automatic garbage collection +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.1869191Z [command]/usr/bin/git config --local gc.auto 0 +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.1896674Z ##[endgroup] +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.1899545Z ##[group]Setting up auth +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.1901445Z Removing SSH command configuration +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.1904440Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.1937172Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :" +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.2205963Z Removing HTTP extra header +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.2212141Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.2241672Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :" +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.2462397Z Removing includeIf entries pointing to credentials config files +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.2466873Z [command]/usr/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir: +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.2496882Z [command]/usr/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.2719434Z [command]/usr/bin/git config --file /home/runner/work/_temp/git-credentials-ac6fa0a1-e459-4171-b1f8-3333838d2f78.config http.https://github.com/.extraheader AUTHORIZATION: basic *** +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.2756194Z [command]/usr/bin/git config --local includeIf.gitdir:/home/runner/work/link-cli/link-cli/.git.path /home/runner/work/_temp/git-credentials-ac6fa0a1-e459-4171-b1f8-3333838d2f78.config +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.2787140Z [command]/usr/bin/git config --local includeIf.gitdir:/home/runner/work/link-cli/link-cli/.git/worktrees/*.path /home/runner/work/_temp/git-credentials-ac6fa0a1-e459-4171-b1f8-3333838d2f78.config +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.2819536Z [command]/usr/bin/git config --local includeIf.gitdir:/github/workspace/.git.path /github/runner_temp/git-credentials-ac6fa0a1-e459-4171-b1f8-3333838d2f78.config +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.2857246Z [command]/usr/bin/git config --local includeIf.gitdir:/github/workspace/.git/worktrees/*.path /github/runner_temp/git-credentials-ac6fa0a1-e459-4171-b1f8-3333838d2f78.config +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.2893437Z ##[endgroup] +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.2896296Z ##[group]Fetching the repository +Build Package Run actions/checkout@v6 2026-05-12T20:43:03.2903282Z [command]/usr/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules --depth=1 origin +0c8092c56b0fb11704f89398b6d831cd9bbe007d:refs/remotes/origin/main +Build Package Run actions/checkout@v6 2026-05-12T20:43:04.0515571Z From https://github.com/link-foundation/link-cli +Build Package Run actions/checkout@v6 2026-05-12T20:43:04.0517495Z * [new ref] 0c8092c56b0fb11704f89398b6d831cd9bbe007d -> origin/main +Build Package Run actions/checkout@v6 2026-05-12T20:43:04.0549149Z [command]/usr/bin/git branch --list --remote origin/main +Build Package Run actions/checkout@v6 2026-05-12T20:43:04.0572062Z origin/main +Build Package Run actions/checkout@v6 2026-05-12T20:43:04.0580344Z [command]/usr/bin/git rev-parse refs/remotes/origin/main +Build Package Run actions/checkout@v6 2026-05-12T20:43:04.0603069Z 0c8092c56b0fb11704f89398b6d831cd9bbe007d +Build Package Run actions/checkout@v6 2026-05-12T20:43:04.0606808Z ##[endgroup] +Build Package Run actions/checkout@v6 2026-05-12T20:43:04.0607244Z ##[group]Determining the checkout info +Build Package Run actions/checkout@v6 2026-05-12T20:43:04.0608165Z ##[endgroup] +Build Package Run actions/checkout@v6 2026-05-12T20:43:04.0612428Z [command]/usr/bin/git sparse-checkout disable +Build Package Run actions/checkout@v6 2026-05-12T20:43:04.0650386Z [command]/usr/bin/git config --local --unset-all extensions.worktreeConfig +Build Package Run actions/checkout@v6 2026-05-12T20:43:04.0674800Z ##[group]Checking out the ref +Build Package Run actions/checkout@v6 2026-05-12T20:43:04.0678990Z [command]/usr/bin/git checkout --progress --force -B main refs/remotes/origin/main +Build Package Run actions/checkout@v6 2026-05-12T20:43:04.1325885Z Switched to a new branch 'main' +Build Package Run actions/checkout@v6 2026-05-12T20:43:04.1327898Z branch 'main' set up to track 'origin/main'. +Build Package Run actions/checkout@v6 2026-05-12T20:43:04.1339203Z ##[endgroup] +Build Package Run actions/checkout@v6 2026-05-12T20:43:04.1377243Z [command]/usr/bin/git log -1 --format=%H +Build Package Run actions/checkout@v6 2026-05-12T20:43:04.1399858Z 0c8092c56b0fb11704f89398b6d831cd9bbe007d +Build Package Setup .NET 2026-05-12T20:43:04.1627515Z ##[group]Run actions/setup-dotnet@v5 +Build Package Setup .NET 2026-05-12T20:43:04.1628098Z with: +Build Package Setup .NET 2026-05-12T20:43:04.1628383Z dotnet-version: 8.0.x +Build Package Setup .NET 2026-05-12T20:43:04.1629030Z cache: false +Build Package Setup .NET 2026-05-12T20:43:04.1629411Z env: +Build Package Setup .NET 2026-05-12T20:43:04.1629710Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Build Package Setup .NET 2026-05-12T20:43:04.1630140Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Build Package Setup .NET 2026-05-12T20:43:04.1630556Z DOTNET_NOLOGO: true +Build Package Setup .NET 2026-05-12T20:43:04.1630906Z ##[endgroup] +Build Package Setup .NET 2026-05-12T20:43:04.2930293Z [command]/home/runner/work/_actions/actions/setup-dotnet/v5/externals/install-dotnet.sh --skip-non-versioned-files --runtime dotnet --channel LTS +Build Package Setup .NET 2026-05-12T20:43:04.5275370Z dotnet-install: Attempting to download using aka.ms link https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.8/dotnet-runtime-10.0.8-linux-x64.tar.gz +Build Package Setup .NET 2026-05-12T20:43:04.7602489Z dotnet-install: Remote file https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.8/dotnet-runtime-10.0.8-linux-x64.tar.gz size is 36625163 bytes. +Build Package Setup .NET 2026-05-12T20:43:04.7605249Z dotnet-install: Extracting archive from https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.8/dotnet-runtime-10.0.8-linux-x64.tar.gz +Build Package Setup .NET 2026-05-12T20:43:05.4204543Z dotnet-install: Downloaded file size is 36625163 bytes. +Build Package Setup .NET 2026-05-12T20:43:05.4205521Z dotnet-install: The remote and local file sizes are equal. +Build Package Setup .NET 2026-05-12T20:43:05.4484775Z dotnet-install: Installed version is 10.0.8 +Build Package Setup .NET 2026-05-12T20:43:05.4541384Z dotnet-install: Adding to current process PATH: `/usr/share/dotnet`. Note: This change will be visible only when sourcing script. +Build Package Setup .NET 2026-05-12T20:43:05.4543178Z dotnet-install: Note that the script does not resolve dependencies during installation. +Build Package Setup .NET 2026-05-12T20:43:05.4544778Z dotnet-install: To check the list of dependencies, go to https://learn.microsoft.com/dotnet/core/install, select your operating system and check the "Dependencies" section. +Build Package Setup .NET 2026-05-12T20:43:05.4545753Z dotnet-install: Installation finished successfully. +Build Package Setup .NET 2026-05-12T20:43:05.4568105Z [command]/home/runner/work/_actions/actions/setup-dotnet/v5/externals/install-dotnet.sh --skip-non-versioned-files --channel 8.0 +Build Package Setup .NET 2026-05-12T20:43:05.6662584Z dotnet-install: Attempting to download using aka.ms link https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.421/dotnet-sdk-8.0.421-linux-x64.tar.gz +Build Package Setup .NET 2026-05-12T20:43:06.5397091Z dotnet-install: Download attempt #1 has failed: 200 Unable to download https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.421/dotnet-sdk-8.0.421-linux-x64.tar.gz. +Build Package Setup .NET 2026-05-12T20:43:06.5398341Z dotnet-install: Attempt #2 will start in 10 seconds. +Build Package Setup .NET 2026-05-12T20:43:17.3998219Z dotnet-install: Remote file https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.421/dotnet-sdk-8.0.421-linux-x64.tar.gz size is 216612394 bytes. +Build Package Setup .NET 2026-05-12T20:43:17.4001874Z dotnet-install: Extracting archive from https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.421/dotnet-sdk-8.0.421-linux-x64.tar.gz +Build Package Setup .NET 2026-05-12T20:43:21.7627030Z dotnet-install: Downloaded file size is 216612394 bytes. +Build Package Setup .NET 2026-05-12T20:43:21.7629214Z dotnet-install: The remote and local file sizes are equal. +Build Package Setup .NET 2026-05-12T20:43:22.0285386Z dotnet-install: Installed version is 8.0.421 +Build Package Setup .NET 2026-05-12T20:43:22.0340656Z dotnet-install: Adding to current process PATH: `/usr/share/dotnet`. Note: This change will be visible only when sourcing script. +Build Package Setup .NET 2026-05-12T20:43:22.0341795Z dotnet-install: Note that the script does not resolve dependencies during installation. +Build Package Setup .NET 2026-05-12T20:43:22.0342991Z dotnet-install: To check the list of dependencies, go to https://learn.microsoft.com/dotnet/core/install, select your operating system and check the "Dependencies" section. +Build Package Setup .NET 2026-05-12T20:43:22.0344617Z dotnet-install: Installation finished successfully. +Build Package Restore dependencies 2026-05-12T20:43:22.0559002Z ##[group]Run dotnet restore +Build Package Restore dependencies 2026-05-12T20:43:22.0559375Z ^[[36;1mdotnet restore^[[0m +Build Package Restore dependencies 2026-05-12T20:43:22.0585712Z shell: /usr/bin/bash -e {0} +Build Package Restore dependencies 2026-05-12T20:43:22.0585952Z env: +Build Package Restore dependencies 2026-05-12T20:43:22.0586137Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Build Package Restore dependencies 2026-05-12T20:43:22.0586402Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Build Package Restore dependencies 2026-05-12T20:43:22.0586618Z DOTNET_NOLOGO: true +Build Package Restore dependencies 2026-05-12T20:43:22.0586810Z DOTNET_ROOT: /usr/share/dotnet +Build Package Restore dependencies 2026-05-12T20:43:22.0587043Z ##[endgroup] +Build Package Restore dependencies 2026-05-12T20:43:23.0285346Z Determining projects to restore... +Build Package Restore dependencies 2026-05-12T20:43:26.1159638Z Restored /home/runner/work/link-cli/link-cli/csharp/Foundation.Data.Doublets.Cli.Tests/Foundation.Data.Doublets.Cli.Tests.csproj (in 2.71 sec). +Build Package Restore dependencies 2026-05-12T20:43:26.1491713Z Restored /home/runner/work/link-cli/link-cli/csharp/Foundation.Data.Doublets.Cli/Foundation.Data.Doublets.Cli.csproj (in 2.7 sec). +Build Package Build Release 2026-05-12T20:43:26.1522244Z ##[group]Run dotnet build --no-restore --configuration Release +Build Package Build Release 2026-05-12T20:43:26.1522750Z ^[[36;1mdotnet build --no-restore --configuration Release^[[0m +Build Package Build Release 2026-05-12T20:43:26.1543769Z shell: /usr/bin/bash -e {0} +Build Package Build Release 2026-05-12T20:43:26.1543999Z env: +Build Package Build Release 2026-05-12T20:43:26.1544188Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Build Package Build Release 2026-05-12T20:43:26.1544455Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Build Package Build Release 2026-05-12T20:43:26.1544681Z DOTNET_NOLOGO: true +Build Package Build Release 2026-05-12T20:43:26.1544871Z DOTNET_ROOT: /usr/share/dotnet +Build Package Build Release 2026-05-12T20:43:26.1545083Z ##[endgroup] +Build Package Build Release 2026-05-12T20:43:32.2209809Z Foundation.Data.Doublets.Cli -> /home/runner/work/link-cli/link-cli/csharp/Foundation.Data.Doublets.Cli/bin/Release/net8/Foundation.Data.Doublets.Cli.dll +Build Package Build Release 2026-05-12T20:43:33.6889978Z Foundation.Data.Doublets.Cli.Tests -> /home/runner/work/link-cli/link-cli/csharp/Foundation.Data.Doublets.Cli.Tests/bin/Release/net8/Foundation.Data.Doublets.Cli.Tests.dll +Build Package Build Release 2026-05-12T20:43:33.7109281Z +Build Package Build Release 2026-05-12T20:43:33.7115779Z Build succeeded. +Build Package Build Release 2026-05-12T20:43:33.7116523Z 0 Warning(s) +Build Package Build Release 2026-05-12T20:43:33.7117075Z 0 Error(s) +Build Package Build Release 2026-05-12T20:43:33.7117652Z +Build Package Build Release 2026-05-12T20:43:33.7118170Z Time Elapsed 00:00:07.39 +Build Package Pack NuGet package 2026-05-12T20:43:33.7296460Z ##[group]Run dotnet pack --no-build --configuration Release --output ./artifacts +Build Package Pack NuGet package 2026-05-12T20:43:33.7297017Z ^[[36;1mdotnet pack --no-build --configuration Release --output ./artifacts^[[0m +Build Package Pack NuGet package 2026-05-12T20:43:33.7318170Z shell: /usr/bin/bash -e {0} +Build Package Pack NuGet package 2026-05-12T20:43:33.7318395Z env: +Build Package Pack NuGet package 2026-05-12T20:43:33.7318813Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Build Package Pack NuGet package 2026-05-12T20:43:33.7319214Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Build Package Pack NuGet package 2026-05-12T20:43:33.7319638Z DOTNET_NOLOGO: true +Build Package Pack NuGet package 2026-05-12T20:43:33.7319837Z DOTNET_ROOT: /usr/share/dotnet +Build Package Pack NuGet package 2026-05-12T20:43:33.7320060Z ##[endgroup] +Build Package Pack NuGet package 2026-05-12T20:43:34.3069822Z Foundation.Data.Doublets.Cli -> /home/runner/work/link-cli/link-cli/csharp/Foundation.Data.Doublets.Cli/bin/Release/net8/publish/ +Build Package Pack NuGet package 2026-05-12T20:43:34.6723497Z Successfully created package '/home/runner/work/link-cli/link-cli/csharp/artifacts/clink.2.4.0.nupkg'. +Build Package Upload artifacts 2026-05-12T20:43:34.7046613Z ##[group]Run actions/upload-artifact@v7 +Build Package Upload artifacts 2026-05-12T20:43:34.7046881Z with: +Build Package Upload artifacts 2026-05-12T20:43:34.7047050Z name: nuget-package +Build Package Upload artifacts 2026-05-12T20:43:34.7047247Z path: csharp/artifacts/*.nupkg +Build Package Upload artifacts 2026-05-12T20:43:34.7047478Z if-no-files-found: warn +Build Package Upload artifacts 2026-05-12T20:43:34.7047684Z compression-level: 6 +Build Package Upload artifacts 2026-05-12T20:43:34.7047868Z overwrite: false +Build Package Upload artifacts 2026-05-12T20:43:34.7048057Z include-hidden-files: false +Build Package Upload artifacts 2026-05-12T20:43:34.7048258Z archive: true +Build Package Upload artifacts 2026-05-12T20:43:34.7048421Z env: +Build Package Upload artifacts 2026-05-12T20:43:34.7048864Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Build Package Upload artifacts 2026-05-12T20:43:34.7049151Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Build Package Upload artifacts 2026-05-12T20:43:34.7049376Z DOTNET_NOLOGO: true +Build Package Upload artifacts 2026-05-12T20:43:34.7049576Z DOTNET_ROOT: /usr/share/dotnet +Build Package Upload artifacts 2026-05-12T20:43:34.7049790Z ##[endgroup] +Build Package Upload artifacts 2026-05-12T20:43:34.8470370Z With the provided path, there will be 1 file uploaded +Build Package Upload artifacts 2026-05-12T20:43:34.8475745Z Artifact name is valid! +Build Package Upload artifacts 2026-05-12T20:43:34.8476393Z Root directory input is valid! +Build Package Upload artifacts 2026-05-12T20:43:34.9487036Z Uploading artifact: nuget-package.zip +Build Package Upload artifacts 2026-05-12T20:43:34.9552711Z Beginning upload of artifact content to blob storage +Build Package Upload artifacts 2026-05-12T20:43:35.2049749Z Uploaded bytes 509860 +Build Package Upload artifacts 2026-05-12T20:43:35.2343490Z Finished uploading artifact content to blob storage! +Build Package Upload artifacts 2026-05-12T20:43:35.2344891Z SHA256 digest of uploaded artifact is 8326f3f90ffedf82f3530167ea7e853cf35595e7e360268baee03b384e41d5c9 +Build Package Upload artifacts 2026-05-12T20:43:35.2345795Z Finalizing artifact upload +Build Package Upload artifacts 2026-05-12T20:43:35.3875571Z Artifact nuget-package successfully finalized. Artifact ID 6955390326 +Build Package Upload artifacts 2026-05-12T20:43:35.3877258Z Artifact nuget-package has been successfully uploaded! Final size is 509860 bytes. Artifact ID is 6955390326 +Build Package Upload artifacts 2026-05-12T20:43:35.3880799Z Artifact download URL: https://github.com/link-foundation/link-cli/actions/runs/25760911270/artifacts/6955390326 +Build Package Post Setup .NET 2026-05-12T20:43:35.4008176Z Post job cleanup. +Build Package Post Run actions/checkout@v6 2026-05-12T20:43:35.5339604Z Post job cleanup. +Build Package Post Run actions/checkout@v6 2026-05-12T20:43:35.6223066Z [command]/usr/bin/git version +Build Package Post Run actions/checkout@v6 2026-05-12T20:43:35.6269302Z git version 2.53.0 +Build Package Post Run actions/checkout@v6 2026-05-12T20:43:35.6305944Z Temporarily overriding HOME='/home/runner/work/_temp/576f69b5-c6b4-4e8b-aa52-a5802711b750' before making global git config changes +Build Package Post Run actions/checkout@v6 2026-05-12T20:43:35.6307423Z Adding repository directory to the temporary git global config as a safe directory +Build Package Post Run actions/checkout@v6 2026-05-12T20:43:35.6309865Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/link-cli/link-cli +Build Package Post Run actions/checkout@v6 2026-05-12T20:43:35.6342380Z Removing SSH command configuration +Build Package Post Run actions/checkout@v6 2026-05-12T20:43:35.6349307Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand +Build Package Post Run actions/checkout@v6 2026-05-12T20:43:35.6383981Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :" +Build Package Post Run actions/checkout@v6 2026-05-12T20:43:35.6620320Z Removing HTTP extra header +Build Package Post Run actions/checkout@v6 2026-05-12T20:43:35.6626878Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader +Build Package Post Run actions/checkout@v6 2026-05-12T20:43:35.6662038Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :" +Build Package Post Run actions/checkout@v6 2026-05-12T20:43:35.6894418Z Removing includeIf entries pointing to credentials config files +Build Package Post Run actions/checkout@v6 2026-05-12T20:43:35.6900795Z [command]/usr/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir: +Build Package Post Run actions/checkout@v6 2026-05-12T20:43:35.6956074Z includeif.gitdir:/home/runner/work/link-cli/link-cli/.git.path +Build Package Post Run actions/checkout@v6 2026-05-12T20:43:35.6957280Z includeif.gitdir:/home/runner/work/link-cli/link-cli/.git/worktrees/*.path +Build Package Post Run actions/checkout@v6 2026-05-12T20:43:35.6959053Z includeif.gitdir:/github/workspace/.git.path +Build Package Post Run actions/checkout@v6 2026-05-12T20:43:35.6960043Z includeif.gitdir:/github/workspace/.git/worktrees/*.path +Build Package Post Run actions/checkout@v6 2026-05-12T20:43:35.6966890Z [command]/usr/bin/git config --local --get-all includeif.gitdir:/home/runner/work/link-cli/link-cli/.git.path +Build Package Post Run actions/checkout@v6 2026-05-12T20:43:35.6988480Z /home/runner/work/_temp/git-credentials-ac6fa0a1-e459-4171-b1f8-3333838d2f78.config +Build Package Post Run actions/checkout@v6 2026-05-12T20:43:35.7001673Z [command]/usr/bin/git config --local --unset includeif.gitdir:/home/runner/work/link-cli/link-cli/.git.path /home/runner/work/_temp/git-credentials-ac6fa0a1-e459-4171-b1f8-3333838d2f78.config +Build Package Post Run actions/checkout@v6 2026-05-12T20:43:35.7033848Z [command]/usr/bin/git config --local --get-all includeif.gitdir:/home/runner/work/link-cli/link-cli/.git/worktrees/*.path +Build Package Post Run actions/checkout@v6 2026-05-12T20:43:35.7056331Z /home/runner/work/_temp/git-credentials-ac6fa0a1-e459-4171-b1f8-3333838d2f78.config +Build Package Post Run actions/checkout@v6 2026-05-12T20:43:35.7066002Z [command]/usr/bin/git config --local --unset includeif.gitdir:/home/runner/work/link-cli/link-cli/.git/worktrees/*.path /home/runner/work/_temp/git-credentials-ac6fa0a1-e459-4171-b1f8-3333838d2f78.config +Build Package Post Run actions/checkout@v6 2026-05-12T20:43:35.7097164Z [command]/usr/bin/git config --local --get-all includeif.gitdir:/github/workspace/.git.path +Build Package Post Run actions/checkout@v6 2026-05-12T20:43:35.7118129Z /github/runner_temp/git-credentials-ac6fa0a1-e459-4171-b1f8-3333838d2f78.config +Build Package Post Run actions/checkout@v6 2026-05-12T20:43:35.7126129Z [command]/usr/bin/git config --local --unset includeif.gitdir:/github/workspace/.git.path /github/runner_temp/git-credentials-ac6fa0a1-e459-4171-b1f8-3333838d2f78.config +Build Package Post Run actions/checkout@v6 2026-05-12T20:43:35.7157778Z [command]/usr/bin/git config --local --get-all includeif.gitdir:/github/workspace/.git/worktrees/*.path +Build Package Post Run actions/checkout@v6 2026-05-12T20:43:35.7179859Z /github/runner_temp/git-credentials-ac6fa0a1-e459-4171-b1f8-3333838d2f78.config +Build Package Post Run actions/checkout@v6 2026-05-12T20:43:35.7187837Z [command]/usr/bin/git config --local --unset includeif.gitdir:/github/workspace/.git/worktrees/*.path /github/runner_temp/git-credentials-ac6fa0a1-e459-4171-b1f8-3333838d2f78.config +Build Package Post Run actions/checkout@v6 2026-05-12T20:43:35.7219933Z [command]/usr/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url +Build Package Post Run actions/checkout@v6 2026-05-12T20:43:35.7448921Z Removing credentials config '/home/runner/work/_temp/git-credentials-ac6fa0a1-e459-4171-b1f8-3333838d2f78.config' +Build Package Complete job 2026-05-12T20:43:35.7603925Z Cleaning up orphan processes +Build Package Complete job 2026-05-12T20:43:35.7928998Z Terminate orphan process: pid (2787) (dotnet) +Build Package Complete job 2026-05-12T20:43:35.7960087Z Terminate orphan process: pid (2851) (VBCSCompiler) +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2439462Z Current runner version: '2.334.0' +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2464551Z ##[group]Runner Image Provisioner +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2465457Z Hosted Compute Agent +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2466021Z Version: 20260213.493 +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2466592Z Commit: 5c115507f6dd24b8de37d8bbe0bb4509d0cc0fa3 +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2467739Z Build Date: 2026-02-13T00:28:41Z +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2468398Z Worker ID: {38d48466-335f-4d41-9e30-381c40319148} +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2469135Z Azure Region: northcentralus +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2469751Z ##[endgroup] +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2471221Z ##[group]Operating System +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2471811Z Ubuntu +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2472367Z 24.04.4 +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2472858Z LTS +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2473324Z ##[endgroup] +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2473861Z ##[group]Runner Image +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2474400Z Image: ubuntu-24.04 +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2474916Z Version: 20260413.86.1 +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2476289Z Included Software: https://github.com/actions/runner-images/blob/ubuntu24/20260413.86/images/ubuntu/Ubuntu2404-Readme.md +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2478415Z Image Release: https://github.com/actions/runner-images/releases/tag/ubuntu24%2F20260413.86 +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2479432Z ##[endgroup] +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2482337Z ##[group]GITHUB_TOKEN Permissions +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2484727Z Actions: write +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2485305Z ArtifactMetadata: write +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2485924Z Attestations: write +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2486402Z Checks: write +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2486972Z CodeQuality: write +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2487845Z Contents: write +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2488327Z Deployments: write +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2488924Z Discussions: write +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2489468Z Issues: write +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2489957Z Metadata: read +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2490475Z Models: read +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2490971Z Packages: write +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2491575Z Pages: write +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2492118Z PullRequests: write +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2492704Z RepositoryProjects: write +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2493240Z SecurityEvents: write +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2493823Z Statuses: write +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2494326Z VulnerabilityAlerts: read +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2494880Z ##[endgroup] +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2496905Z Secret source: Actions +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.2498085Z Prepare workflow directory +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.3056193Z Prepare all required actions +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.3111835Z Getting action download info +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.6711082Z Download action repository 'actions/checkout@v6' (SHA:de0fac2e4500dabe0009e67214ff5f5447ce83dd) +Test (ubuntu-latest) Set up job 2026-05-12T20:40:23.8341077Z Download action repository 'actions/setup-dotnet@v5' (SHA:c2fa09f4bde5ebb9d1777cf28262a3eb3db3ced7) +Test (ubuntu-latest) Set up job 2026-05-12T20:40:24.2907361Z Download action repository 'codecov/codecov-action@v5' (SHA:75cd11691c0faa626561e295848008c8a7dddffe) +Test (ubuntu-latest) Set up job 2026-05-12T20:40:24.6134564Z Getting action download info +Test (ubuntu-latest) Set up job 2026-05-12T20:40:24.7836793Z Download action repository 'actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea' (SHA:60a0d83039c74a4aee543508d2ffcb1c3799cdea) +Test (ubuntu-latest) Set up job 2026-05-12T20:40:25.1780723Z Complete job name: Test (ubuntu-latest) +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.2629348Z ##[group]Run actions/checkout@v6 +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.2630668Z with: +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.2631459Z repository: link-foundation/link-cli +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.2632719Z token: *** +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.2633446Z ssh-strict: true +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.2634222Z ssh-user: git +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.2635002Z persist-credentials: true +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.2635879Z clean: true +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.2636663Z sparse-checkout-cone-mode: true +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.2637830Z fetch-depth: 1 +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.2638595Z fetch-tags: false +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.2639378Z show-progress: true +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.2640164Z lfs: false +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.2640881Z submodules: false +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.2641666Z set-safe-directory: true +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.2642739Z env: +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.2643507Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.2644541Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.2645488Z DOTNET_NOLOGO: true +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.2646264Z ##[endgroup] +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.3624512Z Syncing repository: link-foundation/link-cli +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.3627766Z ##[group]Getting Git version info +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.3629076Z Working directory is '/home/runner/work/link-cli/link-cli' +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.3630868Z [command]/usr/bin/git version +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.3688939Z git version 2.53.0 +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.3743662Z ##[endgroup] +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.3758240Z Temporarily overriding HOME='/home/runner/work/_temp/7c9d37e7-b177-4fe7-9f3f-4f5a87f1566f' before making global git config changes +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.3760953Z Adding repository directory to the temporary git global config as a safe directory +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.3764403Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/link-cli/link-cli +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.3795701Z Deleting the contents of '/home/runner/work/link-cli/link-cli' +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.3800330Z ##[group]Initializing the repository +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.3804250Z [command]/usr/bin/git init /home/runner/work/link-cli/link-cli +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.3890520Z hint: Using 'master' as the name for the initial branch. This default branch name +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.3893096Z hint: will change to "main" in Git 3.0. To configure the initial branch name +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.3894825Z hint: to use in all of your new repositories, which will suppress this warning, +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.3896942Z hint: call: +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.3898270Z hint: +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.3899255Z hint: git config --global init.defaultBranch +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.3900354Z hint: +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.3902065Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.3904083Z hint: 'development'. The just-created branch can be renamed via this command: +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.3905438Z hint: +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.3906177Z hint: git branch -m +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.3907551Z hint: +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.3908732Z hint: Disable this message with "git config set advice.defaultBranchName false" +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.3910550Z Initialized empty Git repository in /home/runner/work/link-cli/link-cli/.git/ +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.3913525Z [command]/usr/bin/git remote add origin https://github.com/link-foundation/link-cli +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.3933201Z ##[endgroup] +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.3934959Z ##[group]Disabling automatic garbage collection +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.3936944Z [command]/usr/bin/git config --local gc.auto 0 +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.3964576Z ##[endgroup] +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.3966109Z ##[group]Setting up auth +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.3967259Z Removing SSH command configuration +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.3971207Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.4001241Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :" +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.4273679Z Removing HTTP extra header +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.4280045Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.4314529Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :" +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.4523958Z Removing includeIf entries pointing to credentials config files +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.4531036Z [command]/usr/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir: +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.4563600Z [command]/usr/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.4784675Z [command]/usr/bin/git config --file /home/runner/work/_temp/git-credentials-a9a776d8-3a98-4a9f-8c8b-1deac78e195d.config http.https://github.com/.extraheader AUTHORIZATION: basic *** +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.4821083Z [command]/usr/bin/git config --local includeIf.gitdir:/home/runner/work/link-cli/link-cli/.git.path /home/runner/work/_temp/git-credentials-a9a776d8-3a98-4a9f-8c8b-1deac78e195d.config +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.4852962Z [command]/usr/bin/git config --local includeIf.gitdir:/home/runner/work/link-cli/link-cli/.git/worktrees/*.path /home/runner/work/_temp/git-credentials-a9a776d8-3a98-4a9f-8c8b-1deac78e195d.config +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.4882510Z [command]/usr/bin/git config --local includeIf.gitdir:/github/workspace/.git.path /github/runner_temp/git-credentials-a9a776d8-3a98-4a9f-8c8b-1deac78e195d.config +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.4912584Z [command]/usr/bin/git config --local includeIf.gitdir:/github/workspace/.git/worktrees/*.path /github/runner_temp/git-credentials-a9a776d8-3a98-4a9f-8c8b-1deac78e195d.config +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.4938929Z ##[endgroup] +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.4940237Z ##[group]Fetching the repository +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:25.4948367Z [command]/usr/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules --depth=1 origin +0c8092c56b0fb11704f89398b6d831cd9bbe007d:refs/remotes/origin/main +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:26.2606891Z From https://github.com/link-foundation/link-cli +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:26.2610247Z * [new ref] 0c8092c56b0fb11704f89398b6d831cd9bbe007d -> origin/main +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:26.2653481Z [command]/usr/bin/git branch --list --remote origin/main +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:26.2679520Z origin/main +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:26.2691904Z [command]/usr/bin/git rev-parse refs/remotes/origin/main +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:26.2718982Z 0c8092c56b0fb11704f89398b6d831cd9bbe007d +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:26.2730779Z ##[endgroup] +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:26.2731512Z ##[group]Determining the checkout info +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:26.2732170Z ##[endgroup] +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:26.2800434Z [command]/usr/bin/git sparse-checkout disable +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:26.2803038Z [command]/usr/bin/git config --local --unset-all extensions.worktreeConfig +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:26.2804792Z ##[group]Checking out the ref +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:26.2805543Z [command]/usr/bin/git checkout --progress --force -B main refs/remotes/origin/main +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:26.3471367Z Switched to a new branch 'main' +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:26.3472953Z branch 'main' set up to track 'origin/main'. +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:26.3487296Z ##[endgroup] +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:26.3526493Z [command]/usr/bin/git log -1 --format=%H +Test (ubuntu-latest) Run actions/checkout@v6 2026-05-12T20:40:26.3549505Z 0c8092c56b0fb11704f89398b6d831cd9bbe007d +Test (ubuntu-latest) Setup .NET 2026-05-12T20:40:26.3766060Z ##[group]Run actions/setup-dotnet@v5 +Test (ubuntu-latest) Setup .NET 2026-05-12T20:40:26.3766407Z with: +Test (ubuntu-latest) Setup .NET 2026-05-12T20:40:26.3766625Z dotnet-version: 8.0.x +Test (ubuntu-latest) Setup .NET 2026-05-12T20:40:26.3766874Z cache: false +Test (ubuntu-latest) Setup .NET 2026-05-12T20:40:26.3767304Z env: +Test (ubuntu-latest) Setup .NET 2026-05-12T20:40:26.3767537Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Test (ubuntu-latest) Setup .NET 2026-05-12T20:40:26.3767860Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Test (ubuntu-latest) Setup .NET 2026-05-12T20:40:26.3768137Z DOTNET_NOLOGO: true +Test (ubuntu-latest) Setup .NET 2026-05-12T20:40:26.3768374Z ##[endgroup] +Test (ubuntu-latest) Setup .NET 2026-05-12T20:40:26.5112093Z [command]/home/runner/work/_actions/actions/setup-dotnet/v5/externals/install-dotnet.sh --skip-non-versioned-files --runtime dotnet --channel LTS +Test (ubuntu-latest) Setup .NET 2026-05-12T20:40:26.7816276Z dotnet-install: Attempting to download using aka.ms link https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.8/dotnet-runtime-10.0.8-linux-x64.tar.gz +Test (ubuntu-latest) Setup .NET 2026-05-12T20:40:26.9564244Z dotnet-install: Remote file https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.8/dotnet-runtime-10.0.8-linux-x64.tar.gz size is 36625163 bytes. +Test (ubuntu-latest) Setup .NET 2026-05-12T20:40:26.9573194Z dotnet-install: Extracting archive from https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.8/dotnet-runtime-10.0.8-linux-x64.tar.gz +Test (ubuntu-latest) Setup .NET 2026-05-12T20:40:27.6476103Z dotnet-install: Downloaded file size is 36625163 bytes. +Test (ubuntu-latest) Setup .NET 2026-05-12T20:40:27.6476962Z dotnet-install: The remote and local file sizes are equal. +Test (ubuntu-latest) Setup .NET 2026-05-12T20:40:27.6756143Z dotnet-install: Installed version is 10.0.8 +Test (ubuntu-latest) Setup .NET 2026-05-12T20:40:27.6812350Z dotnet-install: Adding to current process PATH: `/usr/share/dotnet`. Note: This change will be visible only when sourcing script. +Test (ubuntu-latest) Setup .NET 2026-05-12T20:40:27.6813688Z dotnet-install: Note that the script does not resolve dependencies during installation. +Test (ubuntu-latest) Setup .NET 2026-05-12T20:40:27.6814932Z dotnet-install: To check the list of dependencies, go to https://learn.microsoft.com/dotnet/core/install, select your operating system and check the "Dependencies" section. +Test (ubuntu-latest) Setup .NET 2026-05-12T20:40:27.6815953Z dotnet-install: Installation finished successfully. +Test (ubuntu-latest) Setup .NET 2026-05-12T20:40:27.6838262Z [command]/home/runner/work/_actions/actions/setup-dotnet/v5/externals/install-dotnet.sh --skip-non-versioned-files --channel 8.0 +Test (ubuntu-latest) Setup .NET 2026-05-12T20:40:27.9444667Z dotnet-install: Attempting to download using aka.ms link https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.421/dotnet-sdk-8.0.421-linux-x64.tar.gz +Test (ubuntu-latest) Setup .NET 2026-05-12T20:40:29.2300129Z dotnet-install: Remote file https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.421/dotnet-sdk-8.0.421-linux-x64.tar.gz size is 216612394 bytes. +Test (ubuntu-latest) Setup .NET 2026-05-12T20:40:29.2302539Z dotnet-install: Extracting archive from https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.421/dotnet-sdk-8.0.421-linux-x64.tar.gz +Test (ubuntu-latest) Setup .NET 2026-05-12T20:40:33.8089072Z dotnet-install: Downloaded file size is 216612394 bytes. +Test (ubuntu-latest) Setup .NET 2026-05-12T20:40:33.8089811Z dotnet-install: The remote and local file sizes are equal. +Test (ubuntu-latest) Setup .NET 2026-05-12T20:40:34.0465742Z dotnet-install: Installed version is 8.0.421 +Test (ubuntu-latest) Setup .NET 2026-05-12T20:40:34.0520619Z dotnet-install: Adding to current process PATH: `/usr/share/dotnet`. Note: This change will be visible only when sourcing script. +Test (ubuntu-latest) Setup .NET 2026-05-12T20:40:34.0522080Z dotnet-install: Note that the script does not resolve dependencies during installation. +Test (ubuntu-latest) Setup .NET 2026-05-12T20:40:34.0523503Z dotnet-install: To check the list of dependencies, go to https://learn.microsoft.com/dotnet/core/install, select your operating system and check the "Dependencies" section. +Test (ubuntu-latest) Setup .NET 2026-05-12T20:40:34.0524766Z dotnet-install: Installation finished successfully. +Test (ubuntu-latest) Restore dependencies 2026-05-12T20:40:34.0662542Z ##[group]Run dotnet restore +Test (ubuntu-latest) Restore dependencies 2026-05-12T20:40:34.0662844Z ^[[36;1mdotnet restore^[[0m +Test (ubuntu-latest) Restore dependencies 2026-05-12T20:40:34.0688792Z shell: /usr/bin/bash -e {0} +Test (ubuntu-latest) Restore dependencies 2026-05-12T20:40:34.0689056Z env: +Test (ubuntu-latest) Restore dependencies 2026-05-12T20:40:34.0689255Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Test (ubuntu-latest) Restore dependencies 2026-05-12T20:40:34.0689522Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Test (ubuntu-latest) Restore dependencies 2026-05-12T20:40:34.0689745Z DOTNET_NOLOGO: true +Test (ubuntu-latest) Restore dependencies 2026-05-12T20:40:34.0689943Z DOTNET_ROOT: /usr/share/dotnet +Test (ubuntu-latest) Restore dependencies 2026-05-12T20:40:34.0690227Z ##[endgroup] +Test (ubuntu-latest) Restore dependencies 2026-05-12T20:40:36.3262925Z Determining projects to restore... +Test (ubuntu-latest) Restore dependencies 2026-05-12T20:40:40.5327625Z Restored /home/runner/work/link-cli/link-cli/csharp/Foundation.Data.Doublets.Cli.Tests/Foundation.Data.Doublets.Cli.Tests.csproj (in 3.6 sec). +Test (ubuntu-latest) Restore dependencies 2026-05-12T20:40:40.5354635Z Restored /home/runner/work/link-cli/link-cli/csharp/Foundation.Data.Doublets.Cli/Foundation.Data.Doublets.Cli.csproj (in 3.6 sec). +Test (ubuntu-latest) Build 2026-05-12T20:40:40.5733112Z ##[group]Run dotnet build --no-restore --configuration Release +Test (ubuntu-latest) Build 2026-05-12T20:40:40.5733619Z ^[[36;1mdotnet build --no-restore --configuration Release^[[0m +Test (ubuntu-latest) Build 2026-05-12T20:40:40.5755217Z shell: /usr/bin/bash -e {0} +Test (ubuntu-latest) Build 2026-05-12T20:40:40.5755443Z env: +Test (ubuntu-latest) Build 2026-05-12T20:40:40.5755633Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Test (ubuntu-latest) Build 2026-05-12T20:40:40.5755892Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Test (ubuntu-latest) Build 2026-05-12T20:40:40.5756124Z DOTNET_NOLOGO: true +Test (ubuntu-latest) Build 2026-05-12T20:40:40.5756322Z DOTNET_ROOT: /usr/share/dotnet +Test (ubuntu-latest) Build 2026-05-12T20:40:40.5756541Z ##[endgroup] +Test (ubuntu-latest) Build 2026-05-12T20:40:46.6625069Z Foundation.Data.Doublets.Cli -> /home/runner/work/link-cli/link-cli/csharp/Foundation.Data.Doublets.Cli/bin/Release/net8/Foundation.Data.Doublets.Cli.dll +Test (ubuntu-latest) Build 2026-05-12T20:40:48.0237317Z Foundation.Data.Doublets.Cli.Tests -> /home/runner/work/link-cli/link-cli/csharp/Foundation.Data.Doublets.Cli.Tests/bin/Release/net8/Foundation.Data.Doublets.Cli.Tests.dll +Test (ubuntu-latest) Build 2026-05-12T20:40:48.0453744Z +Test (ubuntu-latest) Build 2026-05-12T20:40:48.0460840Z Build succeeded. +Test (ubuntu-latest) Build 2026-05-12T20:40:48.0461513Z 0 Warning(s) +Test (ubuntu-latest) Build 2026-05-12T20:40:48.0461998Z 0 Error(s) +Test (ubuntu-latest) Build 2026-05-12T20:40:48.0462402Z +Test (ubuntu-latest) Build 2026-05-12T20:40:48.0462919Z Time Elapsed 00:00:07.27 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:48.0641511Z ##[group]Run dotnet test --no-build --configuration Release --verbosity normal --collect:"XPlat Code Coverage" +Test (ubuntu-latest) Run tests 2026-05-12T20:40:48.0642257Z ^[[36;1mdotnet test --no-build --configuration Release --verbosity normal --collect:"XPlat Code Coverage"^[[0m +Test (ubuntu-latest) Run tests 2026-05-12T20:40:48.0663320Z shell: /usr/bin/bash -e {0} +Test (ubuntu-latest) Run tests 2026-05-12T20:40:48.0663537Z env: +Test (ubuntu-latest) Run tests 2026-05-12T20:40:48.0663720Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Test (ubuntu-latest) Run tests 2026-05-12T20:40:48.0664174Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Test (ubuntu-latest) Run tests 2026-05-12T20:40:48.0664400Z DOTNET_NOLOGO: true +Test (ubuntu-latest) Run tests 2026-05-12T20:40:48.0664588Z DOTNET_ROOT: /usr/share/dotnet +Test (ubuntu-latest) Run tests 2026-05-12T20:40:48.0664803Z ##[endgroup] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:48.2348682Z Build started 05/12/2026 20:40:48. +Test (ubuntu-latest) Run tests 2026-05-12T20:40:48.4054770Z 1>Project "/home/runner/work/link-cli/link-cli/csharp/Foundation.Data.Doublets.Cli.sln" on node 1 (VSTest target(s)). +Test (ubuntu-latest) Run tests 2026-05-12T20:40:48.4056201Z 1>ValidateSolutionConfiguration: +Test (ubuntu-latest) Run tests 2026-05-12T20:40:48.4056813Z Building solution configuration "Release|Any CPU". +Test (ubuntu-latest) Run tests 2026-05-12T20:40:48.7341359Z Test run for /home/runner/work/link-cli/link-cli/csharp/Foundation.Data.Doublets.Cli.Tests/bin/Release/net8/Foundation.Data.Doublets.Cli.Tests.dll (.NETCoreApp,Version=v8.0) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:49.1602598Z A total of 1 test files matched the specified pattern. +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.4468977Z [xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v3.1.5+1b188a7b0a (64-bit .NET 8.0.27) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.5162153Z [xUnit.net 00:00:00.08] Discovering: Foundation.Data.Doublets.Cli.Tests +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.5871735Z [xUnit.net 00:00:00.15] Discovered: Foundation.Data.Doublets.Cli.Tests +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.6316319Z [xUnit.net 00:00:00.20] Starting: Foundation.Data.Doublets.Cli.Tests +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.7042409Z === Debug: Alternative Scenario === +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.7043452Z Input changes: +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.7044116Z 1. (1: 1 2) -> (0: 0 0) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.7044504Z 2. (1: 1 2) -> (1: 2 1) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.7044868Z 3. (2: 2 1) -> (2: 1 2) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.7045284Z Actual simplified changes: +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.7045717Z 1. (1: 1 2) -> (1: 2 1) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.7046075Z 2. (2: 2 1) -> (2: 1 2) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.7046504Z Count: 2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.7046788Z === End Debug === +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.7674375Z [Trace] Constructing SimpleLinksDecorator with names DB: /tmp/tmpIytwfx.names.links +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.8198506Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.ChangesSimplifierTests.SimplifyChanges_Issue26_AlternativeScenario_NoSimplificationOccurs [36 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.8206261Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.ChangesSimplifierTests.SimplifyChanges_NoChange_StillKeepsFirstAndLastState [7 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.8208955Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.ChangesSimplifierTests.SimplifyChanges_Issue26_UpdateOperationSimplification [< 1 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.8211202Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.ChangesSimplifierTests.SimplifyChanges_SpecificExample_RemovesIntermediateStates [1 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.8213666Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.ChangesSimplifierTests.SimplifyChanges_MultipleChainsFromSameBefore_RemovesIntermediateStates [< 1 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.8216387Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.ChangesSimplifierTests.SimplifyChanges_MultipleBranchesFromSameInitial_ProducesCorrectFinalStates [1 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.8219530Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.ChangesSimplifierTests.SimplifyChanges_MultipleBranchesFromSameInitial_ProducesCorrectFinalStates_InCorrectOrder [5 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.8222128Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.ChangesSimplifierTests.SimplifyChanges_SpecificExample_KeepsUnchangedStates [< 1 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.8385001Z Passed Foundation.Data.Doublets.Cli.Tests.SimpleLinksDecoratorTests.CanConstructSimpleLinksDecorator [88 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.8417510Z Passed Foundation.Data.Doublets.Cli.Tests.SimpleLinksDecoratorTests.Delete_WithRestriction_DoesNotThrow [10 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.8418722Z Passed Foundation.Data.Doublets.Cli.Tests.SimpleLinksDecoratorTests.DeleteAfterGetOrCreate_DoesNotThrow_WithTracing [3 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.8428298Z Passed Foundation.Data.Doublets.Cli.Tests.SimpleLinksDecoratorTests.DeleteAfterGetOrCreate_DoesNotThrow [11 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.8430059Z Passed Foundation.Data.Doublets.Cli.Tests.LinoDatabaseInputTests.ImportText_ReproducesNumberedLinksAtTheirExplicitIndexes [31 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.8431643Z Passed Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.WriteToFile_WritesCompleteDatabaseAsLinoLines [31 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.8433999Z Passed Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.FormatStructure_RendersLeftBranchWithLinkIndexes [8 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.8435804Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.BasicQueryProcessor.DeleteSingleLinkTest_Source2Target2 [101 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.8524103Z Passed Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.FormatStructure_RendersRepeatedSourceAndTargetAsReferenceOnRight [7 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.8552680Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.BasicQueryProcessor.DeleteMultipleLinksTest [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.8554364Z Passed Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.FormatDatabase_EscapesNamesThatNeedQuoting [5 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.8555909Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.BasicQueryProcessor.CreateSingleLinkTest [5 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.8557715Z Passed Foundation.Data.Doublets.Cli.Tests.LinoDatabaseInputTests.ImportText_TreatsOutOfRangeNumbersAsNames [24 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.8559580Z Passed Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.FormatDatabase_UsesNamesForIndexesSourcesAndTargets_WhenNamesExist [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.8561235Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.BasicQueryProcessor.UpdateSingleLinkTest [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.8653833Z Passed Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.FormatDatabase_SelectsQuoteStyleForNamesContainingQuotes [5 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.8655742Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.BasicQueryProcessor.CreateLinkWithSource2Target2Test [3 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.8657649Z Passed Foundation.Data.Doublets.Cli.Tests.LinoDatabaseInputTests.ImportText_UnquotesNamesWrittenByExporter [7 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.8659112Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.BasicQueryProcessor.MultipleUpdatesTest [3 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.8660701Z Passed Foundation.Data.Doublets.Cli.Tests.LinoDatabaseOutputTests.FormatDatabase_UsesNumberedReferences_WhenLinksHaveNoNames [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.8662399Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.BasicQueryProcessor.CreateMultipleLinksTest [3 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.8663937Z Passed Foundation.Data.Doublets.Cli.Tests.LinoDatabaseInputTests.ImportText_CreatesNamedReferencesAsPointLinks [9 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.8884954Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.BasicQueryProcessor.DeleteSingleLinkTest_Source1Target2 [3 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.8918732Z Passed Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_UsesProvidedPinnedTypesDecorator [6 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.8944382Z Passed Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_CanRemoveNames [10 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.8946574Z Passed Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.SetName_OverwriteOldName [13 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.8949222Z Passed Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.MakeNamesDatabaseFilename_CorrectlyGeneratesFilename(dbFilename: "test.db", expected: "test.names.links") [< 1 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.8952090Z Passed Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.MakeNamesDatabaseFilename_CorrectlyGeneratesFilename(dbFilename: "a.b.c", expected: "a.b.names.links") [< 1 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.8980115Z Passed Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.MakeNamesDatabaseFilename_CorrectlyGeneratesFilename(dbFilename: "/tmp/test.db", expected: "/tmp/test.names.links") [< 1 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.9007460Z [Trace] Constructing NamedLinksDecorator with names DB: /tmp/tmpAIW0Vf.names.links +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.9143703Z Passed Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_DeleteRemovesAssociatedNames [7 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.9162760Z Passed Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_CanSetAndGetNames [5 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.9176600Z Passed Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.AfterCreation_SetNameAndGetName_ShouldWork [12 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.9178830Z Passed Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_HandlesNonexistentNames [5 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.9188417Z Passed Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.CanConstructNamedLinksDecorator [9 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.9190504Z Passed Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_ReassigningExistingNameMovesNameToNewLink [6 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.9191578Z Passed Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.RemoveName_NonExistent_DoesNotThrow [6 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.9332133Z Passed Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_ImplementsILinks [5 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.9335051Z Passed Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_CanConstructFromDatabaseFilename [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.9338003Z Passed Foundation.Data.Doublets.Cli.Tests.PinnedTypesTests.Should_Terminate_Enumeration_When_Iterated_Without_Take [26 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.9349371Z Passed Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.RemoveName_ShouldReturnNullAfterRemoval [11 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.9372754Z Passed Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_CanEnumeratePinnedTypes [9 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.9379321Z Passed Foundation.Data.Doublets.Cli.Tests.PinnedTypesTests.Should_Validate_Existing_Links_With_Ulong [7 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.9381141Z Passed Foundation.Data.Doublets.Cli.Tests.PinnedTypesTests.Should_Destructure_PinnedTypes [6 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.9460380Z Passed Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.SetNameAndGetName_ShouldReturnSameName [15 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.9489911Z Passed Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_CanOverwriteNames [11 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.9496028Z Passed Foundation.Data.Doublets.Cli.Tests.PinnedTypesTests.Should_Validate_Existing_Links [5 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.9498360Z Passed Foundation.Data.Doublets.Cli.Tests.PinnedTypesTests.Should_Reset_Enumerator [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.9499742Z Passed Foundation.Data.Doublets.Cli.Tests.NamedLinksDecoratorTests.DeleteLink_RemovesNameAutomatically [6 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.9501331Z Passed Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_ImplementsIPinnedTypes [7 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.9502999Z Passed Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_ImplementsINamedTypes [5 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.9701226Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.CreateLinkWithSource2Target2Test [11 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.9714702Z Passed Foundation.Data.Doublets.Cli.Tests.PinnedTypesTests.Should_Throw_Exception_For_Invalid_Link_Structure [12 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.9716182Z Passed Foundation.Data.Doublets.Cli.Tests.NamedTypesDecoratorTests.NamedTypesDecorator_CanGetLinkByName [7 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.9717947Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.DeleteAllLinksByIndexTest [5 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.9719294Z Passed Foundation.Data.Doublets.Cli.Tests.PinnedTypesTests.Should_Create_And_Iterate_Over_Types [6 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.9720769Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.DeleteAllLinksBySourceAndTargetTest [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:50.9722465Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.DeleteLinksByAnyTargetTest [5 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.0108357Z Passed Foundation.Data.Doublets.Cli.Tests.PinnedTypesTests.Should_Create_And_Iterate_Over_Types_With_RealDataStore [8 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.0110681Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.DeleteLinksByAnySourceTest [5 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.0131975Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.CreateAndRetriveUserDefinedTypeTest [7 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.0142721Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.CreateAndRetrieveMultipleStringTypesTest(typeName: "UnicodeSymbol") [10 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.0145593Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.DeleteMultipleLinksTest [16 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.0155711Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.CreateAndRetrieveMultipleStringTypesTest(typeName: "EmptyString") [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.0158860Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.CreateAndRetrieveMultipleStringTypesTest(typeName: "String") [3 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.0161106Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.CreateMultipleLinksTest [8 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.0298097Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.CreateAndRetrieveMultipleStringTypesTest(typeName: "Name") [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.0302994Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.CreateAndRetrieveMultipleStringTypesTest(typeName: "UnicodeSequence") [3 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.0305778Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.CreateAndRetrieveMultipleStringTypesTest(typeName: "Type") [3 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.0308417Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.NameIsRemovedWhenExternalReferenceIsDeletedTest [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.0310457Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.NameExternalReferenceTest [7 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.0312384Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.CreateAndRetrieveUnicodeStringTest [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.0314453Z Passed Foundation.Data.Doublets.Cli.Tests.Issue62ReviewCoverageTests.ExplicitNumericIdUpdate_CanBeReversedWithAnotherUpdate [70 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.0316636Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.ReverseSourceWithTargetUsingVariablesTest [29 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.0547512Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.CreateAndRetrieveSimpleStringTest [5 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.0551619Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.DeletingNonNamedLinkDoesNotAffectOtherNamesTest [5 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.0553687Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.CreateSingleLinkTest [6 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.0555498Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.CreateAndRetrieveEmptyStringTest [6 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.0558222Z Passed Foundation.Data.Doublets.Cli.Tests.Issue62ReviewCoverageTests.NamedLink_CreateDeleteRecreate_DoesNotLeaveStaleNameMapping [20 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.0560276Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.RetrieveTypeByNameTest [5 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.0562038Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.NoUpdateUsingVariablesTest [14 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.0816830Z [Test] All links: (1: 2->1) (2: 1->2) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.0897282Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.CreateAndRetrieveMultipleStringsTest [9 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.0901354Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.DeleteSingleLinkTest_Source1Target2 [11 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.0905748Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.NameIsRemovedWhenLinkIsDeletedTest [10 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.0907723Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.MixedMultipleUpdatesTest [14 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.0910003Z Passed Foundation.Data.Doublets.Cli.Tests.UnicodeStringStorageTests.ExternalReferenceCanUseNameThatAlreadyExistsInternallyTest [7 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.0911930Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.DeleteSingleLinkTest_Source2Target2 [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.0913823Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.SwapSourceAndTargetForAllLinksUsingVariablesTest [41 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.1866870Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.CreationWithEmptySlotDuringUpdateTest [11 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.1868983Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.CreateSingleLinkWithIndexAfterDoubleGapTest [10 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.1869872Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.MultipleUpdatesTest [14 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.1870797Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.PersistentTransformationDecoratorTests.NeverRemovesMatchingStoredTrigger [29 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.1871859Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.CreateSingleLinkWithIndexAfterGapTest [15 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.1872937Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.PersistentTransformationDecoratorTests.AlwaysTriggerIsStoredInLinksAndAppliedAfterWrite [25 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.1873943Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.CreationDuringUpdateTest [41 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.1874903Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.PersistentTransformationDecoratorTests.OnceTriggerDeletesItselfAfterFirstMatch [41 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4334488Z [Test] All links: (1: 2->1) (2: 2->2) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4371547Z [Test] All links: (1: 1->2) (2: 2->1) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4403536Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.NameLookupConsistencyTest [97 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4405294Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.UpdateSingleLinkTest [200 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4406844Z Passed Foundation.Data.Doublets.Cli.Tests.PinnedTypesDecoratorTests.Should_Implement_Both_ILinks_And_IPinnedTypes [191 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4408639Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.CreateSingleLinkWithIndexTest [47 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4409436Z Passed Foundation.Data.Doublets.Cli.Tests.PinnedTypesDecoratorTests.Should_Support_Deconstruction [46 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4410208Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.MixedQueryProcessor.DeletionDuringUpdateTest [10 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4411190Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.SwapEqualSourceAndTargetUsingVariablesHasAllChangesTest [250 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4412163Z Passed Foundation.Data.Doublets.Cli.Tests.PinnedTypesDecoratorTests.Should_Work_As_ILinks_Decorator [12 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4419565Z [Test] All links: (1: 1->1) (3: 3->3) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4689463Z [Test] All links: (1: 1->1) (2: 2->1) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4763994Z [Test] All links: (21: 21->21) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4851080Z [Test] All links: (1: 1->1) (2: 2->2) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4879250Z [Test] All links: (2: 2->2) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4895731Z [Trace] Constructing NamedTypesDecorator with names DB: /tmp/tmpwEjPrF.names.links +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4918970Z [ProcessQuery] Query: "(() ((link: link link)))" +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4921408Z [ProcessQuery] Parser returned 1 top-level link(s). +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4923697Z [ProcessQuery] Restriction link => Id="" Values.Count=0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4924536Z [ProcessQuery] Substitution link => Id="" Values.Count=1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4925561Z [ProcessQuery] No restriction, but substitution is non-empty => creation scenario. +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4926429Z [ValidateLinksExistOrWillBeCreated] Starting validation +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4927431Z [ValidateLinksExistOrWillBeCreated] Numeric links to be created: +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4928289Z [ValidateLinksExistOrWillBeCreated] Named links to be created: link +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4929287Z [Trace] GetByName called for name: 'link' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4929759Z [Trace] GetByName result: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4930534Z [ValidateReferencesInPattern] Named link 'link' reference validated in substitution pattern +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4931346Z [Trace] GetByName called for name: 'link' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4931848Z [Trace] GetByName result: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4932617Z [ValidateReferencesInPattern] Named link 'link' reference validated in substitution pattern +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4933768Z [ValidateLinksExistOrWillBeCreated] Validation completed +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4935899Z [Trace] GetByName called for name: 'link' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4937669Z [Trace] GetByName result: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4938174Z [Trace] Update called with restriction: [1] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4948303Z [Trace] Debug: handlerWrapper invoked - before=1,0,0, after=1,0,0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4949249Z [Trace] Update result: 4294967295 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4950167Z [EnsureNestedLinkCreatedRecursively] Created named leaf 'link' => ID=1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4951069Z [Trace] SetName called for link: 1 with name: 'link' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4951621Z [Trace] RemoveName called for link: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4952101Z [Trace] RemoveName completed for link: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4952561Z [Trace] SetName result: 100 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4956386Z [EnsureNestedLinkCreatedRecursively] Updating link ID=1 => Source=1, Target=1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4959530Z [Trace] Update called with restriction: [1,0,0] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4960294Z [Trace] Debug: handlerWrapper invoked - before=1,0,0, after=1,1,1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4961294Z [EnsureNestedLinkCreatedRecursively] Update handler: before=(1: 0->0), after=(1: 1->1) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4962105Z [Trace] Update result: 4294967295 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4962705Z [ProcessQuery] Created link ID #1 from substitution pattern. +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4963352Z [Test] All links: (1: 1->1) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4963777Z [Trace] GetByName called for name: 'link' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4964234Z [Trace] GetByName result: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4964648Z [Trace] GetName called for link: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.4965072Z [Trace] GetName result: link +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.5014570Z [Test] All links: (1: 1->1) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.5055304Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MultipleUpdatesTest [6 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.5059122Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreationWithEmptySlotDuringUpdateTest [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.5061176Z Passed Foundation.Data.Doublets.Cli.Tests.PinnedTypesDecoratorTests.Should_Enumerate_PinnedTypes [33 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.5063385Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLeftCompositeIntegerChildrenWithoutExtraLeaf_ShouldSucceed [23 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.5065975Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Issue20_SubstituteFullPointWithUnboundParts_ShouldKeepFullPoint [10 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.5068649Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MatchAndDelete2LevelNestedLinksTest [6 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.5070834Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteLinksByAnyTargetTest [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.5073161Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateNamedLinkWithStringId_ShouldCreateSingleLink [8 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.5075479Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeletionDuringUpdateTest [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.5162737Z [Test] All links: (1: 1->1) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.5203118Z [Test] All links: +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.5827466Z [Test] All links: (1: 1->1) (2: 2->2) (3: 1->2) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.5877936Z [Test] All links: (1: 1->2) (2: 1->1) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.5942701Z [Test] All links: (1: 1->1) (2: 2->2) (3: 2->1) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.5982567Z [Test] All links: (2: 2->2) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.6027556Z [Test] All links: (1: 1->1) (2: 2->2) (3: 2->1) (4: 3->3) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.6090814Z [Test] All links: (1: 1->1) (2: 2->2) (3: 1->2) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.6134833Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateNamedLinkWithMissingNamedReferences_ShouldThrowException [7 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.6139241Z [Test] All links: (1: 1->2) (2: 2->1) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.6140819Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithIntegerId_ShouldCreateSingleLink [5 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.6143110Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteAllLinksByIndexTest [56 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.6144893Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateNamedFamilyLinksTest [10 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.6146986Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateDuplicatePairWithNumericLinks_ShouldCreateOnlyOneSubLink [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.6149644Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.StringAliasesInVariableRestriction_ShouldConstrainMatchesToNamedLinks [6 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.6151902Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateSingleLinkWithIndexAfterGapTest [3 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.6154138Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateDuplicatePairWithNamedLinks_ShouldCreateOnlyOneSubLink [6 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.6156674Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateNamedLinkWithAutoCreateMissingNamedReferences_ShouldCreatePointLinks [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.6176474Z [Test] All links: (1: 2->1) (2: 1->1) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.6178949Z [Test] ===== Starting UpdateNamedLinkNameTest ===== +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.6195452Z [Trace] Constructing NamedTypesDecorator with names DB: /tmp/tmpr7uOUe.names.links +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7674485Z [Test] Constants: Null=0, Any=4294967292, Continue=4294967295 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7697370Z [Test] Step 1: Creating initial link +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7703154Z [Test] Query: (() ((child: father mother))) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7703985Z [ProcessQuery] Query: "(() ((child: father mother)))" +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7704757Z [ProcessQuery] Parser returned 1 top-level link(s). +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7706377Z [ProcessQuery] Restriction link => Id="" Values.Count=0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7708349Z [ProcessQuery] Substitution link => Id="" Values.Count=1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7710245Z [ProcessQuery] No restriction, but substitution is non-empty => creation scenario. +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7712523Z [ValidateLinksExistOrWillBeCreated] Starting validation +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7714648Z [ValidateLinksExistOrWillBeCreated] Numeric links to be created: +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7715867Z [ValidateLinksExistOrWillBeCreated] Named links to be created: child +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7717204Z [Trace] GetByName called for name: 'father' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7718150Z [Trace] GetByName result: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7718707Z [Trace] GetByName called for name: 'mother' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7719284Z [Trace] GetByName result: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7719793Z [Trace] GetByName called for name: 'father' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7720301Z [Trace] GetByName result: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7721235Z [ValidateLinksExistOrWillBeCreated] Auto-creating missing named reference 'father' as point link. +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7722241Z [Trace] GetByName called for name: 'father' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7722806Z [Trace] GetByName result: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7723334Z [Trace] Update called with restriction: [1] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7724081Z [Trace] Debug: handlerWrapper invoked - before=1,0,0, after=1,0,0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7724804Z [Trace] Update result: 4294967295 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7725458Z [Trace] SetName called for link: 1 with name: 'father' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7726150Z [Trace] RemoveName called for link: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7727648Z [Trace] RemoveName completed for link: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7729109Z [Trace] SetName result: 108 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7730505Z [Trace] Update called with restriction: [1,0,0] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7731690Z [Trace] Debug: handlerWrapper invoked - before=1,0,0, after=1,1,1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7733276Z [Trace] Update result: 4294967295 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7735946Z [Trace] GetByName called for name: 'mother' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7736645Z [Trace] GetByName result: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7738031Z [ValidateLinksExistOrWillBeCreated] Auto-creating missing named reference 'mother' as point link. +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7739050Z [Trace] GetByName called for name: 'mother' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7740014Z [Trace] GetByName result: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7740606Z [Trace] Update called with restriction: [2] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7741429Z [Trace] Debug: handlerWrapper invoked - before=2,0,0, after=2,0,0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7742177Z [Trace] Update result: 4294967295 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7742879Z [Trace] SetName called for link: 2 with name: 'mother' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7743591Z [Trace] RemoveName called for link: 2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7744244Z [Trace] RemoveName completed for link: 2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7744837Z [Trace] SetName result: 110 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7745499Z [Trace] Update called with restriction: [2,0,0] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7746317Z [Trace] Debug: handlerWrapper invoked - before=2,0,0, after=2,2,2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7747386Z [Trace] Update result: 4294967295 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7748148Z [ValidateLinksExistOrWillBeCreated] Validation completed +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7748971Z [Trace] GetByName called for name: 'father' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7749598Z [Trace] GetByName result: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7750498Z [EnsureNestedLinkCreatedRecursively] Found existing named leaf 'father' => ID=1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7751413Z [Trace] GetByName called for name: 'mother' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7752060Z [Trace] GetByName result: 2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7752956Z [EnsureNestedLinkCreatedRecursively] Found existing named leaf 'mother' => ID=2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7754102Z [EnsureLinkCreated] Creating link for (S=1, T=2). +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7754691Z [EnsureLinkCreated] => assigned new ID=3 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7755197Z [Trace] Update called with restriction: [3] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7755845Z [Trace] Debug: handlerWrapper invoked - before=3,0,0, after=3,1,2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7756435Z [Trace] Update result: 4294967295 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7757660Z [EnsureNestedLinkCreatedRecursively] Created or ensured composite link => Index=0, Source=1, Target=2 => Actual ID=3 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7758699Z [Trace] SetName called for link: 3 with name: 'child' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7759235Z [Trace] RemoveName called for link: 3 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7759718Z [Trace] RemoveName completed for link: 3 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7760171Z [Trace] SetName result: 118 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7760702Z [ProcessQuery] Created link ID #3 from substitution pattern. +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7761264Z [Test] Initial link creation completed +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7761703Z [Test] Step 2: Verifying initial state +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7762200Z [Trace] GetByName called for name: 'child' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7763280Z [Trace] GetByName result: 3 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7763710Z [Test] Initial child ID: 3 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7764159Z [Trace] GetByName called for name: 'father' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7764626Z [Trace] GetByName result: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7765022Z [Test] Initial father ID: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7765458Z [Trace] GetByName called for name: 'mother' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7765987Z [Trace] GetByName result: 2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7766376Z [Test] Initial mother ID: 2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7766821Z [Test] Initial links count: 3 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7767634Z [Test] Initial link: Index=(1: 1->1), Source=1, Target=1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7768345Z [Test] Initial link: Index=(2: 2->2), Source=2, Target=2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7769029Z [Test] Initial link: Index=(3: 1->2), Source=1, Target=2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7769620Z [Test] Initial state verification completed +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7770232Z [Test] Step 3: Updating link name from 'child' to 'son' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7770924Z [Test] Query: (((child: father mother)) ((son: father mother))) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7771532Z [Test] Current state before update: +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7772031Z [Trace] GetByName called for name: 'child' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7772997Z [Trace] GetByName result: 3 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7773452Z [Test] - child name exists: True +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7773919Z [Trace] GetByName called for name: 'son' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7774400Z [Trace] GetByName result: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7774805Z [Test] - son name exists: False +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7775280Z [Trace] GetByName called for name: 'father' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7775953Z [Trace] GetByName result: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7776399Z [Test] - father name exists: True +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7776868Z [Trace] GetByName called for name: 'mother' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7777791Z [Trace] GetByName result: 2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7778207Z [Test] - mother name exists: True +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7778710Z [Test] Starting ProcessQuery for update... +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7779221Z [Test] Current links before update: +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7779725Z [Test] Link: Index=(1: 1->1), Source=1, Target=1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7780288Z [Test] Link: Index=(2: 2->2), Source=2, Target=2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7780864Z [Test] Link: Index=(3: 1->2), Source=1, Target=2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7781618Z [ProcessQuery] Query: "(((child: father mother)) ((son: father mother)))" +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7782381Z [ProcessQuery] Parser returned 1 top-level link(s). +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7783051Z [ProcessQuery] Restriction link => Id="" Values.Count=1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7783731Z [ProcessQuery] Substitution link => Id="" Values.Count=1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7784381Z [ProcessQuery] Restriction patterns to parse: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7785040Z [ProcessQuery] Substitution patterns to parse: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7785712Z [ValidateLinksExistOrWillBeCreated] Starting validation +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7786558Z [ValidateLinksExistOrWillBeCreated] Numeric links to be created: +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7787664Z [ValidateLinksExistOrWillBeCreated] Named links to be created: son +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7788377Z [Trace] GetByName called for name: 'child' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7788864Z [Trace] GetByName result: 3 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7789657Z [ValidateReferencesInPattern] Named link 'child' reference validated in restriction pattern +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7790536Z [Trace] GetByName called for name: 'father' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7791025Z [Trace] GetByName result: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7791816Z [ValidateReferencesInPattern] Named link 'father' reference validated in restriction pattern +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7792709Z [Trace] GetByName called for name: 'mother' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7793192Z [Trace] GetByName result: 2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7793987Z [ValidateReferencesInPattern] Named link 'mother' reference validated in restriction pattern +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7794858Z [Trace] GetByName called for name: 'father' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7795352Z [Trace] GetByName result: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7796156Z [ValidateReferencesInPattern] Named link 'father' reference validated in substitution pattern +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7797263Z [Trace] GetByName called for name: 'mother' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7797776Z [Trace] GetByName result: 2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7798601Z [ValidateReferencesInPattern] Named link 'mother' reference validated in substitution pattern +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7799615Z [ValidateLinksExistOrWillBeCreated] Validation completed +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7800744Z [ProcessQuery] Detected single sub-link with 2 sub-values => replaced with one composite restriction pattern. +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7801793Z [ProcessQuery] Converting restriction patterns => done. +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7802505Z [ProcessQuery] Converting substitution patterns => done. +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7803258Z [ProcessQuery] Finding solutions for restriction patterns... +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7803904Z [Trace] GetByName called for name: 'child' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7804392Z [Trace] GetByName result: 3 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7804840Z [Trace] GetByName called for name: 'father' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7805306Z [Trace] GetByName result: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7805811Z [Trace] GetByName called for name: 'mother' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7806272Z [Trace] GetByName result: 2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7806818Z [ProcessQuery] Found 1 total solution(s) matching restriction patterns. +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7807696Z [Trace] GetByName called for name: 'child' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7807977Z [Trace] GetByName result: 3 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7808231Z [Trace] GetByName called for name: 'father' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7808506Z [Trace] GetByName result: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7808748Z [Trace] GetByName called for name: 'mother' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7809011Z [Trace] GetByName result: 2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7809392Z [Trace] GetByName called for name: 'son' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7809647Z [Trace] GetByName result: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7809894Z [Trace] GetByName called for name: 'father' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7810147Z [Trace] GetByName result: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7810387Z [Trace] GetByName called for name: 'mother' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7810640Z [Trace] GetByName result: 2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7810902Z [ProcessQuery] allSolutionsNoOperation=False +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7811312Z [ProcessQuery] Some solutions lead to actual changes => building operations. +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7811717Z [Trace] GetByName called for name: 'son' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7811981Z [Trace] GetByName result: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7812212Z [Trace] GetByName called for name: 'father' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7812511Z [Trace] GetByName result: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7812743Z [Trace] GetByName called for name: 'mother' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7813003Z [Trace] GetByName result: 2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7813236Z [Trace] GetByName called for name: 'child' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7813524Z [Trace] GetByName result: 3 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7813837Z [Trace] GetByName called for name: 'father' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7814311Z [Trace] GetByName result: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7814739Z [Trace] GetByName called for name: 'mother' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7815217Z [Trace] GetByName result: 2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7815932Z [ProcessQuery] For a solution => substitution links count=1, restriction links count=1. +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7816838Z [ProcessQuery] => 2 operation(s) derived from these patterns. +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7817746Z [ProcessQuery] All planned operations => 2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7818355Z [ProcessQuery] Applying all planned operations... +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7819242Z [ApplyAllPlannedOperations] Operation: before=(3:1->2), after=(0:0->0) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7819976Z [Trace] GetName called for link: 3 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7820455Z [Trace] GetName result: child +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7821065Z [ApplyAllPlannedOperations] Name for before.Index 3 = 'child' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7821838Z [ApplyAllPlannedOperations] Deleting link => ID=3, S=1, T=2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7822575Z [RemoveLinks] Found 1 link(s) matching (ID=3, S=1, T=2). +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7823171Z [Trace] RemoveName called for link: 3 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7823688Z [Trace] RemoveName completed for link: 3 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7824238Z [RemoveLinks] Deleting link => ID=3, S=1, T=2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7824846Z [Trace] Delete called with restriction: [3,1,2] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7825863Z [Trace] Debug: this._links is of type: Foundation.Data.Doublets.Cli.PinnedTypesDecorator`1[System.UInt32] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7826841Z [Trace] Debug: Calling underlying _links.Delete +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7827776Z [Trace] Debug: handlerWrapper invoked - before=3,1,2, after=3,0,0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7828428Z [Test] Update ChangesHandler called: +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7828917Z [Test] - Before state: (3: 1->2) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7829356Z [Test] - After state: (3: 0->0) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7829798Z [Trace] GetByName called for name: 'child' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7830264Z [Trace] GetByName result: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7830690Z [Test] - child name during change: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7831155Z [Trace] GetByName called for name: 'son' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7831608Z [Trace] GetByName result: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7832004Z [Test] - son name during change: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7832469Z [Trace] GetByName called for name: 'father' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7832933Z [Trace] GetByName result: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7833338Z [Test] - father name during change: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7833818Z [Trace] GetByName called for name: 'mother' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7834178Z [Trace] GetByName result: 2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7834621Z [Test] - mother name during change: 2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7834881Z [Test] - All links during change: +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7835211Z [Test] Link: Index=(1: 1->1), Source=1, Target=1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7835539Z [Test] Link: Index=(2: 2->2), Source=2, Target=2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7835846Z [Test] Link: Index=(3: 0->0), Source=0, Target=0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7836250Z [Trace] Debug: handlerWrapper invoked - before=3,0,0, after=null +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7836720Z [Trace] RemoveName called for link: 3 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7836989Z [Trace] RemoveName completed for link: 3 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7837620Z [Test] Update ChangesHandler called: +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7837923Z [Test] - Before state: (3: 0->0) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7838162Z [Test] - After state: +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7838390Z [Trace] GetByName called for name: 'child' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7838659Z [Trace] GetByName result: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7838895Z [Test] - child name during change: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7839156Z [Trace] GetByName called for name: 'son' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7839423Z [Trace] GetByName result: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7839692Z [Test] - son name during change: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7839971Z [Trace] GetByName called for name: 'father' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7840256Z [Trace] GetByName result: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7840491Z [Test] - father name during change: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7840770Z [Trace] GetByName called for name: 'mother' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7841032Z [Trace] GetByName result: 2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7841262Z [Test] - mother name during change: 2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7841508Z [Test] - All links during change: +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7841793Z [Test] Link: Index=(1: 1->1), Source=1, Target=1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7842106Z [Test] Link: Index=(2: 2->2), Source=2, Target=2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7842398Z [Trace] Debug: Delete result: 4294967295 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7842869Z [ApplyAllPlannedOperations] Operation: before=(0:0->0), after=(4294967292:1->2) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7843284Z [Trace] GetName called for link: 4294967292 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7843561Z [Trace] GetName result: String +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7843945Z [ApplyAllPlannedOperations] Name for after.Index 4294967292 = 'String' (pre-op) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7844444Z [ApplyAllPlannedOperations] Creating link => ID=4294967292, S=1, T=2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7844940Z [CreateOrUpdateLink] Detected wildcard substitution => nested create & name. +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7845346Z [Trace] GetByName called for name: 'father' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7845616Z [Trace] GetByName result: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7846002Z [EnsureNestedLinkCreatedRecursively] Found existing named leaf 'father' => ID=1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7846428Z [Trace] GetByName called for name: 'mother' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7846685Z [Trace] GetByName result: 2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7847330Z [EnsureNestedLinkCreatedRecursively] Found existing named leaf 'mother' => ID=2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7847789Z [EnsureLinkCreated] Creating link for (S=1, T=2). +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7848097Z [EnsureLinkCreated] => assigned new ID=3 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7848370Z [Test] Update ChangesHandler called: +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7848637Z [Test] - Before state: +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7848861Z [Test] - After state: (3: 0->0) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7849111Z [Trace] GetByName called for name: 'child' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7849377Z [Trace] GetByName result: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7849607Z [Test] - child name during change: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7849871Z [Trace] GetByName called for name: 'son' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7850126Z [Trace] GetByName result: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7850358Z [Test] - son name during change: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7850617Z [Trace] GetByName called for name: 'father' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7850879Z [Trace] GetByName result: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7851113Z [Test] - father name during change: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7851411Z [Trace] GetByName called for name: 'mother' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7851682Z [Trace] GetByName result: 2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7851910Z [Test] - mother name during change: 2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7852169Z [Test] - All links during change: +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7852446Z [Test] Link: Index=(1: 1->1), Source=1, Target=1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7852920Z [Test] Link: Index=(2: 2->2), Source=2, Target=2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7853220Z [Test] Link: Index=(3: 0->0), Source=0, Target=0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7853543Z [Test] Creating new link: Index=3, Source=0, Target=0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7853845Z [Test] Checking if link exists: True +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7854100Z [Test] Checking if source exists: False +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7854512Z [Test] Checking if target exists: False +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7854764Z [Test] Names before creation: +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7855016Z [Trace] GetByName called for name: 'child' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7855271Z [Trace] GetByName result: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7855500Z [Test] - child: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7855709Z [Trace] GetByName called for name: 'son' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7855965Z [Trace] GetByName result: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7856165Z [Test] - son: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7856383Z [Trace] GetByName called for name: 'father' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7856643Z [Trace] GetByName result: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7856851Z [Test] - father: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7857234Z [Trace] GetByName called for name: 'mother' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7857491Z [Trace] GetByName result: 2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7857697Z [Test] - mother: 2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7857910Z [Trace] Update called with restriction: [3] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7858266Z [Trace] Debug: handlerWrapper invoked - before=3,0,0, after=3,1,2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7858605Z [Test] Update ChangesHandler called: +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7858868Z [Test] - Before state: (3: 0->0) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7859110Z [Test] - After state: (3: 1->2) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7859353Z [Trace] GetByName called for name: 'child' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7859612Z [Trace] GetByName result: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7859837Z [Test] - child name during change: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7860098Z [Trace] GetByName called for name: 'son' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7860349Z [Trace] GetByName result: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7860576Z [Test] - son name during change: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7860834Z [Trace] GetByName called for name: 'father' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7861095Z [Trace] GetByName result: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7861328Z [Test] - father name during change: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7861590Z [Trace] GetByName called for name: 'mother' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7861847Z [Trace] GetByName result: 2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7862150Z [Test] - mother name during change: 2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7862642Z [Test] - All links during change: +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7863147Z [Test] Link: Index=(1: 1->1), Source=1, Target=1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7863716Z [Test] Link: Index=(2: 2->2), Source=2, Target=2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7864281Z [Test] Link: Index=(3: 1->2), Source=1, Target=2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7864795Z [Trace] Update result: 4294967295 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7866025Z [EnsureNestedLinkCreatedRecursively] Created or ensured composite link => Index=0, Source=1, Target=2 => Actual ID=3 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7867337Z [Trace] SetName called for link: 3 with name: 'son' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7867916Z [Trace] RemoveName called for link: 3 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7868420Z [Trace] RemoveName completed for link: 3 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7868905Z [Trace] SetName result: 118 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7869354Z [Trace] GetName called for link: 4294967292 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7869849Z [Trace] GetName result: String +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7870615Z [ApplyAllPlannedOperations] Name for after.Index 4294967292 = 'String' (post-op) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7871500Z [ProcessQuery] Restoring unexpected deletions if any... +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7872277Z [RestoreUnexpectedLinkDeletions] No unexpected deletions found. +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7872957Z [ProcessQuery] Finished processing query. +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7873462Z [Test] Update operation completed +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7873901Z [Test] Step 4: Verifying final state +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7874386Z [Trace] GetByName called for name: 'child' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7874844Z [Trace] GetByName result: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7875229Z [Test] Final child ID: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7875642Z [Trace] GetByName called for name: 'son' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7876091Z [Trace] GetByName result: 3 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7876700Z [Test] Final son ID: 3 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7877336Z [Trace] GetByName called for name: 'father' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7877840Z [Trace] GetByName result: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7878218Z [Test] Final father ID: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7878642Z [Trace] GetByName called for name: 'mother' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7879096Z [Trace] GetByName result: 2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7879476Z [Test] Final mother ID: 2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7880019Z [Test] Final links count: 3 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7880510Z [Test] Final link: Index=(1: 1->1), Source=1, Target=1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7881135Z [Test] Final link: Index=(2: 2->2), Source=2, Target=2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7881535Z [Test] Final link: Index=(3: 1->2), Source=1, Target=2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7881922Z [Test] ===== UpdateNamedLinkNameTest completed successfully ===== +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7882492Z [Test] All links: (1: 1->1) (2: 2->2) (3: 3->3) (4: 4->4) (5: 5->5) (6: 6->6) (7: 5->6) (8: 4->7) (9: 3->8) (10: 2->9) (11: 1->10) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7882956Z [Test] All links: (1: 1->1) (2: 1->2) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7934228Z [Test] All links: (10: 10->10) (20: 10->20) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.7987424Z [Test] All links: (1: 1->1) (2: 2->2) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.8037874Z [Test] All links: (1: 1->1) (2: 2->2) (3: 2->1) (4: 3->3) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.8082518Z [Test] All links: (1: 1->1) (2: 1->2) (3: 3->1) (4: 1->4) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.8149785Z [Test] All links: (1: 1->1) (2: 1->2) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.8179312Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateMultipleLinksWithCrossReferences_ShouldSucceed [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.8183648Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MakeAllLinksToGoIntoFirstLinkUsingVariablesTest [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.8185816Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.UpdateNamedLinkNameTest [158 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.8187931Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Create6LevelNestedLinksTest [5 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.8190234Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateRightCompositeStringChildrenWithoutExtraLeaf_ShouldSucceed [5 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.8192986Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithAutoCreateMissingNumericReferences_ShouldCreatePointLinks [5 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.8195384Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateMultipleLinksTest [5 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.8197864Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateMixedNamedAndNumericLinks_ShouldReuseExistingLinks [3 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.8200553Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MatchSelfReferencingAndMakeThemGoOutFromFirstLinkUsingVariablesTest [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.8222466Z [Test] All links: (1: 1->1) (2: 2->2) (3: 3->3) (4: 4->4) (5: 5->5) (6: 4->5) (7: 3->6) (8: 2->7) (9: 1->8) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.8265598Z [Test] All links: (1: 1->1) (2: 2->2) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.8306610Z [Test] All links: (1: 1->2) (2: 2->2) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.8351872Z [Test] All links: (1: 1->2) (2: 2->1) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.8389438Z [Test] All links: +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.8431969Z [Test] All links: (1: 1->1) (2: 2->2) (3: 1->2) (4: 2->1) (5: 3->4) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.8482387Z [Test] All links: (1: 1->1) (2: 2->1) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.8536150Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateRightCompositeIntegerChildrenWithoutExtraLeaf_ShouldSucceed [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.8539267Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.EnsureCreated_WithSpecialAnyReference_ShouldThrowControlledException [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.8541513Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Create5LevelNestedLinksTest [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.8543698Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MatchWithExactIndexAndDelete2LevelNestedLinksTest [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.8546111Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.UpdateSingleLinkTest [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.8548154Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MixedMultipleUpdatesTest [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.8550239Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.NestedDeleteAllLinksBySourceAndTargetTest1 [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.8553399Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateWithDifferentPairs_ShouldNotDeduplicateDifferentLinks [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.8555991Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLeftCompositeStringChildrenWithoutExtraLeaf_ShouldSucceed [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.8557980Z [Test] All links: (1: 1->1) (2: 2->2) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.8581473Z [Test] All links: (1: 1->2) (2: 1->1) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.8623771Z [Test] All links: (3: 3->3) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.8686323Z [Test] All links: (1: 1->1) (2: 18->20) (18: 1->21) (19: 1->20) (20: 20->20) (21: 21->21) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.8794284Z [Test] All links: (1: 1->1) (2: 2->2) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.8899474Z [Test] All links: (1: 0->0) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.8948702Z [Test] All links: (1: 1->1) (2: 2->2) (3: 1->2) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.8988385Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.NoExactMatch2LevelNestedLinksTest [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.8990453Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MakeAllLinksToGoOutOfFirstLinkUsingVariablesTest [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.8992424Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateSingleLinkWithIndexAfterDoubleGapTest [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.8994624Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Issue20_SubstituteMatchedLinkAndOutgoingLink_ShouldPreserveExistingParts [6 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.8996704Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteNamedFamilyLinksRemovesNamesTest [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9000187Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.ExactMatchAndDelete2LevelNestedLinksTest [5 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9002042Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteByNamesTest [5 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9003794Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithVariableReferences_ShouldSucceed [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9005816Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Create2LevelNestedLinksTest [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9007731Z [Test] All links: (1: 1->1) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9017799Z [Trace] Constructing NamedTypesDecorator with names DB: /tmp/tmpWrgRqP.names.links +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9050874Z [Test] Starting UpdateNamedLinkNameTest +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9054058Z [Test] Step 1: Creating initial link +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9055126Z [ProcessQuery] Query: "(() ((child: father mother)))" +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9056310Z [ProcessQuery] Parser returned 1 top-level link(s). +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9057798Z [ProcessQuery] Restriction link => Id="" Values.Count=0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9058992Z [ProcessQuery] Substitution link => Id="" Values.Count=1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9060415Z [ProcessQuery] No restriction, but substitution is non-empty => creation scenario. +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9061736Z [ValidateLinksExistOrWillBeCreated] Starting validation +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9062848Z [ValidateLinksExistOrWillBeCreated] Numeric links to be created: +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9064032Z [ValidateLinksExistOrWillBeCreated] Named links to be created: child +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9065021Z [Trace] GetByName called for name: 'father' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9085651Z [Trace] GetByName result: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9086338Z [Trace] GetByName called for name: 'mother' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9086989Z [Trace] GetByName result: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9087936Z [Trace] GetByName called for name: 'father' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9088849Z [Trace] GetByName result: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9089701Z [ValidateLinksExistOrWillBeCreated] Auto-creating missing named reference 'father' as point link. +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9090578Z [Trace] GetByName called for name: 'father' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9091025Z [Trace] GetByName result: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9091443Z [Trace] Update called with restriction: [1] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9092038Z [Trace] Debug: handlerWrapper invoked - before=1,0,0, after=1,0,0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9092915Z [Trace] Update result: 4294967295 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9093376Z [Trace] SetName called for link: 1 with name: 'father' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9093887Z [Trace] RemoveName called for link: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9094330Z [Trace] RemoveName completed for link: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9094887Z [Trace] SetName result: 108 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9095353Z [Trace] Update called with restriction: [1,0,0] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9095975Z [Trace] Debug: handlerWrapper invoked - before=1,0,0, after=1,1,1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9096556Z [Trace] Update result: 4294967295 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9096982Z [Trace] GetByName called for name: 'mother' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9097784Z [Trace] GetByName result: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9098583Z [ValidateLinksExistOrWillBeCreated] Auto-creating missing named reference 'mother' as point link. +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9099464Z [Trace] GetByName called for name: 'mother' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9099902Z [Trace] GetByName result: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9100353Z [Trace] Update called with restriction: [2] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9100940Z [Trace] Debug: handlerWrapper invoked - before=2,0,0, after=2,0,0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9101518Z [Trace] Update result: 4294967295 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9102019Z [Trace] SetName called for link: 2 with name: 'mother' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9102548Z [Trace] RemoveName called for link: 2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9103004Z [Trace] RemoveName completed for link: 2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9103452Z [Trace] SetName result: 110 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9103929Z [Trace] Update called with restriction: [2,0,0] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9104555Z [Trace] Debug: handlerWrapper invoked - before=2,0,0, after=2,2,2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9105129Z [Trace] Update result: 4294967295 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9105674Z [ValidateLinksExistOrWillBeCreated] Validation completed +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9106274Z [Trace] GetByName called for name: 'father' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9106737Z [Trace] GetByName result: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9107659Z [EnsureNestedLinkCreatedRecursively] Found existing named leaf 'father' => ID=1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9108454Z [Trace] GetByName called for name: 'mother' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9108933Z [Trace] GetByName result: 2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9109595Z [EnsureNestedLinkCreatedRecursively] Found existing named leaf 'mother' => ID=2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9110360Z [EnsureLinkCreated] Creating link for (S=1, T=2). +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9110833Z [EnsureLinkCreated] => assigned new ID=3 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9111250Z [Trace] Update called with restriction: [3] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9111770Z [Trace] Debug: handlerWrapper invoked - before=3,0,0, after=3,1,2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9112315Z [Trace] Update result: 4294967295 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9113258Z [EnsureNestedLinkCreatedRecursively] Created or ensured composite link => Index=0, Source=1, Target=2 => Actual ID=3 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9114284Z [Trace] SetName called for link: 3 with name: 'child' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9114855Z [Trace] RemoveName called for link: 3 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9115329Z [Trace] RemoveName completed for link: 3 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9115803Z [Trace] SetName result: 118 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9116367Z [ProcessQuery] Created link ID #3 from substitution pattern. +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9116955Z [Test] Initial link creation completed +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9117593Z [Test] Step 2: Verifying initial state +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9118034Z [Trace] GetByName called for name: 'child' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9118465Z [Trace] GetByName result: 3 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9118819Z [Test] Initial child ID: 3 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9119222Z [Trace] GetByName called for name: 'father' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9119646Z [Trace] GetByName result: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9120458Z [Test] Initial father ID: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9120845Z [Trace] GetByName called for name: 'mother' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9121283Z [Trace] GetByName result: 2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9121630Z [Test] Initial mother ID: 2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9122050Z [Test] All links: (1: 1->1) (2: 2->2) (3: 1->2) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9122501Z [Test] Initial links count: 3 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9122918Z [Test] Initial state verification completed +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9123562Z [Test] Step 3: Updating link name +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9123955Z [Test] Removing old name 'child' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9124367Z [Trace] RemoveName called for link: 3 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9124870Z [Trace] RemoveName completed for link: 3 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9125282Z [Test] Old name removed +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9125649Z [Test] Creating new link with name 'son' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9126140Z [ProcessQuery] Query: "(() ((son: father mother)))" +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9126701Z [ProcessQuery] Parser returned 1 top-level link(s). +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9127599Z [ProcessQuery] Restriction link => Id="" Values.Count=0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9128213Z [ProcessQuery] Substitution link => Id="" Values.Count=1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9128981Z [ProcessQuery] No restriction, but substitution is non-empty => creation scenario. +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9129782Z [ValidateLinksExistOrWillBeCreated] Starting validation +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9130522Z [ValidateLinksExistOrWillBeCreated] Numeric links to be created: +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9131395Z [ValidateLinksExistOrWillBeCreated] Named links to be created: son +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9132031Z [Trace] GetByName called for name: 'father' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9132465Z [Trace] GetByName result: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9133194Z [ValidateReferencesInPattern] Named link 'father' reference validated in substitution pattern +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9133963Z [Trace] GetByName called for name: 'mother' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9134395Z [Trace] GetByName result: 2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9135102Z [ValidateReferencesInPattern] Named link 'mother' reference validated in substitution pattern +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9135991Z [ValidateLinksExistOrWillBeCreated] Validation completed +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9136564Z [Trace] GetByName called for name: 'father' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9137170Z [Trace] GetByName result: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9137835Z [EnsureNestedLinkCreatedRecursively] Found existing named leaf 'father' => ID=1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9138593Z [Trace] GetByName called for name: 'mother' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9139059Z [Trace] GetByName result: 2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9139746Z [EnsureNestedLinkCreatedRecursively] Found existing named leaf 'mother' => ID=2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9140581Z [EnsureLinkCreated] Link already found => ID=3 => no-op. +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9141668Z [EnsureNestedLinkCreatedRecursively] Created or ensured composite link => Index=0, Source=1, Target=2 => Actual ID=3 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9142679Z [Trace] SetName called for link: 3 with name: 'son' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9143207Z [Trace] RemoveName called for link: 3 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9143674Z [Trace] RemoveName completed for link: 3 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9144121Z [Trace] SetName result: 123 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9144650Z [ProcessQuery] Created link ID #3 from substitution pattern. +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9145238Z [Test] New link creation completed +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9145687Z [Test] Step 4: Verifying final state +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9146151Z [Trace] GetByName called for name: 'child' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9146642Z [Trace] GetByName result: 0 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9147241Z [Trace] GetByName called for name: 'son' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9147702Z [Trace] GetByName result: 3 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9148063Z [Test] Final son ID: 3 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9148495Z [Trace] GetByName called for name: 'father' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9148991Z [Trace] GetByName result: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9149367Z [Test] Final father ID: 1 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9149778Z [Trace] GetByName called for name: 'mother' +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9150231Z [Trace] GetByName result: 2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9150606Z [Test] Final mother ID: 2 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9151029Z [Test] All links: (1: 1->1) (2: 2->2) (3: 1->2) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9151718Z [Test] Final links count: 3 +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9152130Z [Test] Final state verification completed +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9152695Z [Test] UpdateNamedLinkNameTest completed successfully +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9201746Z [Test] All links: (1: 1->1) (2: 2->2) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9256422Z [Test] All links: (1: 1->1) (2: 2->2) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9303647Z [Test] All links: +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9413440Z [Test] All links: (2: 2->2) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9495133Z [Test] All links: (1: 1->1) (2: 2->2) (3: 3->3) (4: 2->3) (5: 1->4) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9544622Z [Test] All links: (1: 1->1) (2: 2->2) (3: 1->2) (4: 3->3) (5: 3->4) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9556149Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteLinksByAnySourceTest [5 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9560104Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateTwoNamedLinksTest [7 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9562064Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.NoUpdateUsingVariablesTest [12 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9564237Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.MakeAllLinksSelfReferencingUsingVariablesTest [5 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9566313Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteMultipleLinksTest [5 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9568607Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.UpdateWithNonExistentReference_ShouldThrowException [5 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9570790Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteSingleLinkTest_Source1Target2 [5 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9572801Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteNamedLinkTest [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9574724Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Create3LevelNestedLinksTest [3 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9588731Z [Test] All links: (1: 1->1) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9625364Z [Test] All links: (1: 1->1) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:51.9666939Z [Test] All links: (1: 1->1) (2: 2->2) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:52.0250745Z [Test] All links: (1: 0->0) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:52.0318908Z [Test] All links: +Test (ubuntu-latest) Run tests 2026-05-12T20:40:52.0418077Z [Test] All links: (1: 1->1) (2: 2->2) (3: 1->2) (4: 3->3) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:52.0527914Z [Test] All links: (1: 1->1) (2: 2->1) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:52.0615341Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateTripleDuplicatePair_ShouldCreateOnlyOneSubLink [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:52.0617383Z [Test] All links: +Test (ubuntu-latest) Run tests 2026-05-12T20:40:52.0618900Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithValidSelfReference_ShouldSucceed [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:52.0620913Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateSingleLinkTest [3 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:52.0622733Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreationDuringUpdateTest [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:52.0624810Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithWildcardReferences_ShouldSucceed [56 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:52.0626967Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteSingleLinkTest_Source2Target2 [6 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:52.0629281Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateNamedLinks_MultipleQueries_ShouldReuseSameIds [7 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:52.0631601Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithNonExistentReference_ShouldThrowException [6 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:52.0634118Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.SwapSourceAndTargetForSingleLinkUsingVariablesTest [7 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:52.0723373Z [Test] All links: (1: 1->1) (2: 2->2) (3: 3->3) (4: 4->4) (5: 5->5) (6: 6->6) (7: 7->7) (8: 6->7) (9: 5->8) (10: 4->9) (11: 3->10) (12: 2->11) (13: 1->12) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:52.1778160Z [Test] All links: (1: 1->1) (2: 2->1) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:52.1867877Z [Test] All links: +Test (ubuntu-latest) Run tests 2026-05-12T20:40:52.1928072Z [Test] All links: (1: 1->1) (2: 2->2) (3: 1->2) (4: 3->3) (5: 4->4) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:52.1979957Z [Test] All links: (1: 1->1) (2: 2->2) (3: 3->3) (4: 4->4) (5: 3->4) (6: 2->5) (7: 1->6) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:52.2021150Z [Test] All links: (1: 1->1) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:52.2074176Z [Test] All links: (1: 1->1) (2: 2->2) +Test (ubuntu-latest) Run tests 2026-05-12T20:40:53.5596748Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteAllLinksBySourceAndTargetTest2 [9 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:53.5598969Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Create7LevelNestedLinksTest [8 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:53.5600112Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkReferencingExistingLink_ShouldSucceed [108 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:53.5601297Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeleteAllLinksBySourceAndTargetTest1 [7 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:53.5602632Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.DeduplicateNestedDuplicates_ShouldDeduplicateAtAllLevels [6 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:53.5604544Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.Create4LevelNestedLinksTest [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:53.5606123Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateSingleLinkWithIndexTest [5 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:53.5607363Z Passed Foundation.Data.Doublets.Cli.Tests.Tests.AdvancedMixedQueryProcessor.CreateLinkWithSource2Target2Test [4 ms] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:55.0553856Z Passed Foundation.Data.Doublets.Cli.Tests.CliExportIntegrationTests.ExportAlias_WritesNamedReferences [2 s] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:57.4797373Z Passed Foundation.Data.Doublets.Cli.Tests.CliExportIntegrationTests.AlwaysTriggerOption_StoresTriggerAndAppliesItOnLaterChange [3 s] +Test (ubuntu-latest) Run tests 2026-05-12T20:40:59.2851297Z Passed Foundation.Data.Doublets.Cli.Tests.CliExportIntegrationTests.ExportAlias_WritesNumberedReferences [1 s] +Test (ubuntu-latest) Run tests 2026-05-12T20:41:08.1572602Z Passed Foundation.Data.Doublets.Cli.Tests.CliExportIntegrationTests.StructureOption_RendersLeftBranchWithIndexes [8 s] +Test (ubuntu-latest) Run tests 2026-05-12T20:41:09.8916030Z [xUnit.net 00:00:19.46] Finished: Foundation.Data.Doublets.Cli.Tests +Test (ubuntu-latest) Run tests 2026-05-12T20:41:10.3052895Z Passed Foundation.Data.Doublets.Cli.Tests.CliExportIntegrationTests.ImportOption_ReadsNumberedLinoFile [1 s] +Test (ubuntu-latest) Run tests 2026-05-12T20:41:10.3151784Z +Test (ubuntu-latest) Run tests 2026-05-12T20:41:10.3187315Z Test Run Successful. +Test (ubuntu-latest) Run tests 2026-05-12T20:41:10.3187678Z Total tests: 187 +Test (ubuntu-latest) Run tests 2026-05-12T20:41:10.3187973Z Passed: 187 +Test (ubuntu-latest) Run tests 2026-05-12T20:41:10.3189464Z Total time: 21.1563 Seconds +Test (ubuntu-latest) Run tests 2026-05-12T20:41:10.3404796Z 1>Done Building Project "/home/runner/work/link-cli/link-cli/csharp/Foundation.Data.Doublets.Cli.sln" (VSTest target(s)). +Test (ubuntu-latest) Run tests 2026-05-12T20:41:10.3497777Z +Test (ubuntu-latest) Run tests 2026-05-12T20:41:10.3504608Z Build succeeded. +Test (ubuntu-latest) Run tests 2026-05-12T20:41:10.3508112Z 0 Warning(s) +Test (ubuntu-latest) Run tests 2026-05-12T20:41:10.3508747Z 0 Error(s) +Test (ubuntu-latest) Run tests 2026-05-12T20:41:10.3509351Z +Test (ubuntu-latest) Run tests 2026-05-12T20:41:10.3509789Z Time Elapsed 00:00:22.11 +Test (ubuntu-latest) Run tests 2026-05-12T20:41:10.5111471Z +Test (ubuntu-latest) Run tests 2026-05-12T20:41:10.5117044Z Attachments: +Test (ubuntu-latest) Run tests 2026-05-12T20:41:10.5120143Z /home/runner/work/link-cli/link-cli/csharp/Foundation.Data.Doublets.Cli.Tests/TestResults/3d5957c7-986b-412f-b61c-afe8557cbee5/coverage.cobertura.xml +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5844169Z ##[group]Run codecov/codecov-action@v5 +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5844469Z with: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5844639Z fail_ci_if_error: false +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5844873Z disable_file_fixes: false +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5845072Z disable_search: false +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5845277Z disable_safe_directory: false +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5845488Z disable_telem: false +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5845680Z dry_run: false +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5845860Z git_service: github +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5846039Z gcov_executable: gcov +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5846240Z handle_no_reports_found: false +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5846457Z recurse_submodules: false +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5846668Z run_command: upload-coverage +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5846879Z skip_validation: false +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5847356Z use_legacy_upload_endpoint: false +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5847578Z use_oidc: false +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5847751Z use_pypi: false +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5847912Z verbose: false +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5848077Z version: latest +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5848236Z env: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5848438Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5848688Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5849080Z DOTNET_NOLOGO: true +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5849269Z DOTNET_ROOT: /usr/share/dotnet +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5849480Z ##[endgroup] +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5950150Z ##[group]Run missing_deps="" +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5950412Z ^[[36;1mmissing_deps=""^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5950604Z ^[[36;1m^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5950796Z ^[[36;1m# Check for always-required commands^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5951058Z ^[[36;1mfor cmd in bash git curl; do^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5951331Z ^[[36;1m if ! command -v "$cmd" >/dev/null 2>&1; then^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5951618Z ^[[36;1m missing_deps="$missing_deps $cmd"^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5951857Z ^[[36;1m fi^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5952007Z ^[[36;1mdone^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5952160Z ^[[36;1m^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5952386Z ^[[36;1m# Check for gpg only if validation is not being skipped^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5952699Z ^[[36;1mif [ "false" != "true" ]; then^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5952979Z ^[[36;1m if ! command -v gpg >/dev/null 2>&1; then^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5953268Z ^[[36;1m missing_deps="$missing_deps gpg"^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5953511Z ^[[36;1m fi^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5953662Z ^[[36;1mfi^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5953815Z ^[[36;1m^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5953997Z ^[[36;1m# Report missing required dependencies^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5954270Z ^[[36;1mif [ -n "$missing_deps" ]; then^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5954633Z ^[[36;1m echo "Error: The following required dependencies are missing:$missing_deps"^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5955119Z ^[[36;1m echo "Please install these dependencies before using this action."^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5955461Z ^[[36;1m exit 1^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5955622Z ^[[36;1mfi^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5955773Z ^[[36;1m^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5955998Z ^[[36;1mecho "All required system dependencies are available."^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5992767Z shell: /usr/bin/sh -e {0} +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5993001Z env: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5993192Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5993468Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5993702Z DOTNET_NOLOGO: true +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5993915Z DOTNET_ROOT: /usr/share/dotnet +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.5994125Z ##[endgroup] +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6044135Z All required system dependencies are available. +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6070391Z ##[group]Run CC_ACTION_VERSION=$(cat ${GITHUB_ACTION_PATH}/src/version) +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6070839Z ^[[36;1mCC_ACTION_VERSION=$(cat ${GITHUB_ACTION_PATH}/src/version)^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6071264Z ^[[36;1mecho -e "\033[0;32m==>\033[0m Running Action version $CC_ACTION_VERSION"^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6090387Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6090696Z env: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6090882Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6091135Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6091362Z DOTNET_NOLOGO: true +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6091552Z DOTNET_ROOT: /usr/share/dotnet +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6091947Z ##[endgroup] +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6143185Z ^[[0;32m==>^[[0m Running Action version 5.5.4 +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6166332Z ##[group]Run git config --global --add safe.directory "/home/runner/work/link-cli/link-cli" +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6166904Z ^[[36;1mgit config --global --add safe.directory "/home/runner/work/link-cli/link-cli"^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6167710Z ^[[36;1mgit config --global --add safe.directory "$GITHUB_WORKSPACE"^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6186711Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6187368Z env: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6187587Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6187849Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6188076Z DOTNET_NOLOGO: true +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6188265Z DOTNET_ROOT: /usr/share/dotnet +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6188491Z ##[endgroup] +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6276359Z ##[group]Run CC_FORK="false" +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6276615Z ^[[36;1mCC_FORK="false"^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6277517Z ^[[36;1mif [ -n "$GITHUB_EVENT_PULL_REQUEST_HEAD_REPO_FULL_NAME" ] && [ "$GITHUB_EVENT_PULL_REQUEST_HEAD_REPO_FULL_NAME" != "$GITHUB_REPOSITORY" ];^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6278262Z ^[[36;1mthen^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6278485Z ^[[36;1m echo -e "\033[0;32m==>\033[0m Fork detected"^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6278753Z ^[[36;1m CC_FORK="true"^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6278949Z ^[[36;1mfi^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6279144Z ^[[36;1mecho "CC_FORK=$CC_FORK" >> "$GITHUB_ENV"^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6298201Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6298517Z env: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6298705Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6298955Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6299181Z DOTNET_NOLOGO: true +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6299372Z DOTNET_ROOT: /usr/share/dotnet +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6299605Z GITHUB_EVENT_PULL_REQUEST_HEAD_LABEL: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6299875Z GITHUB_EVENT_PULL_REQUEST_HEAD_REPO_FULL_NAME: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6300168Z GITHUB_REPOSITORY: link-foundation/link-cli +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6300415Z ##[endgroup] +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6403892Z ##[group]Run actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6404272Z with: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6404840Z script: if (process.env.CC_USE_OIDC === 'true' && process.env.CC_FORK != 'true') { +Test (ubuntu-latest) Upload coverage to Codecov const id_token = await core.getIDToken(process.env.CC_OIDC_AUDIENCE) +Test (ubuntu-latest) Upload coverage to Codecov return id_token +Test (ubuntu-latest) Upload coverage to Codecov } +Test (ubuntu-latest) Upload coverage to Codecov +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6405611Z github-token: *** +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6405799Z debug: false +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6405991Z user-agent: actions/github-script +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6406227Z result-encoding: json +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6406415Z retries: 0 +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6406610Z retry-exempt-status-codes: 400,401,403,404,422 +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6406864Z env: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6407349Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6407619Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6407846Z DOTNET_NOLOGO: true +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6408035Z DOTNET_ROOT: /usr/share/dotnet +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6408256Z CC_FORK: false +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6408445Z CC_OIDC_AUDIENCE: https://codecov.io +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6408690Z CC_USE_OIDC: false +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.6408864Z ##[endgroup] +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7363166Z ##[group]Run if [ "false" == 'true' ] && [ "$CC_FORK" != 'true' ]; +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7363579Z ^[[36;1mif [ "false" == 'true' ] && [ "$CC_FORK" != 'true' ];^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7363861Z ^[[36;1mthen^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7364156Z ^[[36;1m echo "CC_TOKEN=$CC_OIDC_TOKEN" >> "$GITHUB_ENV"^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7364439Z ^[[36;1melif [ -n "" ];^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7364632Z ^[[36;1mthen^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7364850Z ^[[36;1m echo -e "\033[0;32m==>\033[0m Token set from env"^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7365152Z ^[[36;1m echo "CC_TOKEN=" >> "$GITHUB_ENV"^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7365390Z ^[[36;1melse^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7365554Z ^[[36;1m if [ -n "" ];^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7365743Z ^[[36;1m then^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7365966Z ^[[36;1m echo -e "\033[0;32m==>\033[0m Token set from input"^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7366442Z ^[[36;1m CC_TOKEN=$(echo "" | tr -d '\n')^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7366736Z ^[[36;1m echo "CC_TOKEN=$CC_TOKEN" >> "$GITHUB_ENV"^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7366998Z ^[[36;1m fi^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7367358Z ^[[36;1mfi^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7387916Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7388234Z env: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7388412Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7388684Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7400898Z DOTNET_NOLOGO: true +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7401132Z DOTNET_ROOT: /usr/share/dotnet +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7401366Z CC_FORK: false +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7401543Z CC_OIDC_TOKEN: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7401741Z CC_OIDC_AUDIENCE: https://codecov.io +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7401977Z ##[endgroup] +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7463784Z ##[group]Run if [ -z "$CC_BRANCH" ] && [ -z "$CC_TOKEN" ] && [ "$CC_FORK" == 'true' ] +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7464238Z ^[[36;1mif [ -z "$CC_BRANCH" ] && [ -z "$CC_TOKEN" ] && [ "$CC_FORK" == 'true' ]^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7464568Z ^[[36;1mthen^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7465185Z ^[[36;1m echo -e "\033[0;32m==>\033[0m Fork detected, setting branch to $GITHUB_EVENT_PULL_REQUEST_HEAD_LABEL"^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7465703Z ^[[36;1m TOKENLESS="$GITHUB_EVENT_PULL_REQUEST_HEAD_LABEL"^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7466038Z ^[[36;1m CC_BRANCH="$GITHUB_EVENT_PULL_REQUEST_HEAD_LABEL"^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7466347Z ^[[36;1m echo "TOKENLESS=$TOKENLESS" >> "$GITHUB_ENV"^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7466607Z ^[[36;1mfi^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7466764Z ^[[36;1m^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7466955Z ^[[36;1mecho "CC_BRANCH=$CC_BRANCH" >> "$GITHUB_ENV"^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7486268Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7486580Z env: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7486759Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7487240Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7487478Z DOTNET_NOLOGO: true +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7487680Z DOTNET_ROOT: /usr/share/dotnet +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7487895Z CC_FORK: false +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7488070Z CC_BRANCH: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7488251Z GITHUB_EVENT_PULL_REQUEST_HEAD_LABEL: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7488521Z GITHUB_EVENT_PULL_REQUEST_HEAD_REPO_FULL_NAME: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7488809Z GITHUB_REPOSITORY: link-foundation/link-cli +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7489050Z ##[endgroup] +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7546370Z ##[group]Run if [ -z "$CC_SHA" ]; +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7546630Z ^[[36;1mif [ -z "$CC_SHA" ];^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7546836Z ^[[36;1mthen^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7547358Z ^[[36;1m CC_SHA="$GITHUB_EVENT_PULL_REQUEST_HEAD_SHA"^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7547646Z ^[[36;1mfi^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7547857Z ^[[36;1mif [ -z "$CC_PR" ] && [ "$CC_FORK" == 'true' ];^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7548125Z ^[[36;1mthen^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7548312Z ^[[36;1m CC_PR="$GITHUB_EVENT_NUMBER"^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7548534Z ^[[36;1mfi^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7548697Z ^[[36;1m^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7548876Z ^[[36;1mecho "CC_SHA=$CC_SHA" >> "$GITHUB_ENV"^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7549165Z ^[[36;1mecho "CC_PR=$CC_PR" >> "$GITHUB_ENV"^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7568216Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7568521Z env: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7568713Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7568965Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7569195Z DOTNET_NOLOGO: true +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7569383Z DOTNET_ROOT: /usr/share/dotnet +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7569598Z CC_FORK: false +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7569760Z CC_BRANCH: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7569920Z CC_PR: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7570063Z CC_SHA: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7570215Z GITHUB_EVENT_NAME: push +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7570419Z GITHUB_EVENT_NUMBER: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7570618Z GITHUB_EVENT_PULL_REQUEST_HEAD_SHA: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7570846Z ##[endgroup] +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7634904Z ##[group]Run ${GITHUB_ACTION_PATH}/dist/codecov.sh +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7635243Z ^[[36;1m${GITHUB_ACTION_PATH}/dist/codecov.sh^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7654668Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7654990Z env: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7655178Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7655438Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7655671Z DOTNET_NOLOGO: true +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7655863Z DOTNET_ROOT: /usr/share/dotnet +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7656077Z CC_FORK: false +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7656236Z CC_BRANCH: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7656392Z CC_SHA: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7656533Z CC_PR: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7656681Z CC_BASE_SHA: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7656832Z CC_BINARY: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7657244Z CC_BUILD: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7657477Z CC_BUILD_URL: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7657638Z CC_CODE: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7657793Z CC_DIR: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7657952Z CC_DISABLE_FILE_FIXES: false +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7658173Z CC_DISABLE_SEARCH: false +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7658367Z CC_DISABLE_TELEM: false +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7658556Z CC_DRY_RUN: false +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7658743Z CC_ENTERPRISE_URL: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7658932Z CC_ENV: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7659264Z CC_EXCLUDES: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7659444Z CC_FAIL_ON_ERROR: false +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7659624Z CC_FILES: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7659778Z CC_FLAGS: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7659926Z CC_FORCE: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7660073Z CC_GCOV_ARGS: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7660245Z CC_GCOV_EXECUTABLE: gcov +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7660434Z CC_GCOV_IGNORE: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7660602Z CC_GCOV_INCLUDE: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7660771Z CC_GIT_SERVICE: github +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7660974Z CC_HANDLE_NO_REPORTS_FOUND: false +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7661186Z CC_JOB_CODE: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7661354Z CC_LEGACY: false +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7661510Z CC_NAME: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7661671Z CC_NETWORK_FILTER: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7661857Z CC_NETWORK_PREFIX: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7662030Z CC_NETWORK_ROOT_FOLDER: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7662215Z CC_OS: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7662360Z CC_PARENT_SHA: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7662531Z CC_PLUGINS: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7662694Z CC_RECURSE_SUBMODULES: false +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7662901Z CC_REPORT_TYPE: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7663077Z CC_RUN_CMD: upload-coverage +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7663280Z CC_SERVICE: github +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7663456Z CC_SKIP_VALIDATION: false +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7663650Z CC_SLUG: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7663800Z CC_SWIFT_PROJECT: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7663973Z CC_USE_PYPI: false +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7664144Z CC_VERBOSE: false +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7664308Z CC_VERSION: latest +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7664475Z CC_YML_PATH: +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7664632Z ##[endgroup] +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7724122Z _____ _ +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7724479Z / ____| | | +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7724840Z | | ___ __| | ___ ___ _____ __ +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7725082Z | | / _ \ / _` |/ _ \/ __/ _ \ \ / / +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7725306Z | |___| (_) | (_| | __/ (_| (_) \ V / +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7725540Z \_____\___/ \__,_|\___|\___\___/ \_/ +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7726016Z ^[[0;31m Wrapper-0.2.7^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7726275Z +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7778403Z ^[[0;32m==>^[[0m Detected ^[[0;36mlinux^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7779042Z ^[[0;32m ->^[[0m Downloading ^[[0;36mhttps://cli.codecov.io/latest/linux/codecov^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7829670Z % Total % Received % Xferd Average Speed Time Time Time Current +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7830408Z Dload Upload Total Spent Left Speed +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.7830780Z +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.9031872Z 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.9032602Z 100 10.6M 100 10.6M 0 0 88.5M 0 --:--:-- --:--:-- --:--:-- 88.7M +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.9055193Z ^[[0;32m==>^[[0m Finishing downloading ^[[0;36mlinux:latest^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.9482833Z Version: ^[[0;36mv11.2.8^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.9483267Z +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.9785437Z gpg: directory '/home/runner/.gnupg' created +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:10.9787740Z gpg: keybox '/home/runner/.gnupg/pubring.kbx' created +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:11.0893425Z gpg: /home/runner/.gnupg/trustdb.gpg: trustdb created +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:11.0894727Z gpg: key 806BB28AED779869: public key "Codecov Uploader (Codecov Uploader Verification Key) " imported +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:11.1111246Z gpg: Total number processed: 1 +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:11.1111715Z gpg: imported: 1 +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:11.1118818Z ^[[0;32m==>^[[0m Verifying GPG signature integrity +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:11.1119914Z ^[[0;32m ->^[[0m Downloading ^[[0;36mhttps://cli.codecov.io/latest/linux/codecov.SHA256SUM^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:11.1121271Z ^[[0;32m ->^[[0m Downloading ^[[0;36mhttps://cli.codecov.io/latest/linux/codecov.SHA256SUM.sig^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:11.1122049Z +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:11.2312083Z gpg: Signature made Tue Apr 21 19:28:03 2026 UTC +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:11.2312790Z gpg: using RSA key 27034E7FDB850E0BBC2C62FF806BB28AED779869 +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:11.2315270Z gpg: Good signature from "Codecov Uploader (Codecov Uploader Verification Key) " [unknown] +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:11.2316264Z gpg: WARNING: This key is not certified with a trusted signature! +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:11.2316720Z gpg: There is no indication that the signature belongs to the owner. +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:11.2317582Z Primary key fingerprint: 2703 4E7F DB85 0E0B BC2C 62FF 806B B28A ED77 9869 +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:11.3437308Z codecov: OK +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:11.3446349Z ^[[0;32m==>^[[0m CLI integrity verified +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:11.3446692Z +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:11.4010748Z ^[[0;32m ->^[[0m Token length: 0 +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:11.4011381Z ^[[0;32m==>^[[0m Running upload-coverage +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:11.4020139Z ^[[0;36m./codecov upload-coverage --git-service github --gcov-executable gcov^[[0m +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:11.7563596Z info - 2026-05-12 20:41:11,756 -- ci service found: github-actions +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:11.7660194Z warning - 2026-05-12 20:41:11,765 -- No config file could be found. Ignoring config. +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:11.7979338Z warning - 2026-05-12 20:41:11,797 -- xcrun is not installed or can't be found. +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:11.8106717Z warning - 2026-05-12 20:41:11,810 -- No gcov data found. +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:11.8110898Z warning - 2026-05-12 20:41:11,810 -- coverage.py is not installed or can't be found. +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:11.8431908Z info - 2026-05-12 20:41:11,842 -- Found 2 coverage files to report +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:11.8435311Z info - 2026-05-12 20:41:11,843 -- > /home/runner/work/link-cli/link-cli/csharp/Foundation.Data.Doublets.Cli.Tests/TestResults/3d5957c7-986b-412f-b61c-afe8557cbee5/coverage.cobertura.xml +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:11.8437563Z info - 2026-05-12 20:41:11,843 -- > /home/runner/work/link-cli/link-cli/rust/tests/issue62_review_coverage_tests.rs +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:12.0809325Z info - 2026-05-12 20:41:12,080 -- Upload queued for processing complete +Test (ubuntu-latest) Upload coverage to Codecov 2026-05-12T20:41:12.0810632Z error - 2026-05-12 20:41:12,080 -- Upload queued for processing failed: {"message":"Token required - not valid tokenless upload"} +Test (ubuntu-latest) Post Setup .NET 2026-05-12T20:41:12.2335652Z Post job cleanup. +Test (ubuntu-latest) Post Run actions/checkout@v6 2026-05-12T20:41:12.3607526Z Post job cleanup. +Test (ubuntu-latest) Post Run actions/checkout@v6 2026-05-12T20:41:12.4422662Z [command]/usr/bin/git version +Test (ubuntu-latest) Post Run actions/checkout@v6 2026-05-12T20:41:12.4458562Z git version 2.53.0 +Test (ubuntu-latest) Post Run actions/checkout@v6 2026-05-12T20:41:12.4493225Z Copying '/home/runner/.gitconfig' to '/home/runner/work/_temp/406ea026-07af-4d34-8858-8b18829d33a9/.gitconfig' +Test (ubuntu-latest) Post Run actions/checkout@v6 2026-05-12T20:41:12.4502891Z Temporarily overriding HOME='/home/runner/work/_temp/406ea026-07af-4d34-8858-8b18829d33a9' before making global git config changes +Test (ubuntu-latest) Post Run actions/checkout@v6 2026-05-12T20:41:12.4504007Z Adding repository directory to the temporary git global config as a safe directory +Test (ubuntu-latest) Post Run actions/checkout@v6 2026-05-12T20:41:12.4508931Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/link-cli/link-cli +Test (ubuntu-latest) Post Run actions/checkout@v6 2026-05-12T20:41:12.4538578Z Removing SSH command configuration +Test (ubuntu-latest) Post Run actions/checkout@v6 2026-05-12T20:41:12.4544782Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand +Test (ubuntu-latest) Post Run actions/checkout@v6 2026-05-12T20:41:12.4579109Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :" +Test (ubuntu-latest) Post Run actions/checkout@v6 2026-05-12T20:41:12.4829047Z Removing HTTP extra header +Test (ubuntu-latest) Post Run actions/checkout@v6 2026-05-12T20:41:12.4833751Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader +Test (ubuntu-latest) Post Run actions/checkout@v6 2026-05-12T20:41:12.4865436Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :" +Test (ubuntu-latest) Post Run actions/checkout@v6 2026-05-12T20:41:12.5078293Z Removing includeIf entries pointing to credentials config files +Test (ubuntu-latest) Post Run actions/checkout@v6 2026-05-12T20:41:12.5084172Z [command]/usr/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir: +Test (ubuntu-latest) Post Run actions/checkout@v6 2026-05-12T20:41:12.5106431Z includeif.gitdir:/home/runner/work/link-cli/link-cli/.git.path +Test (ubuntu-latest) Post Run actions/checkout@v6 2026-05-12T20:41:12.5107522Z includeif.gitdir:/home/runner/work/link-cli/link-cli/.git/worktrees/*.path +Test (ubuntu-latest) Post Run actions/checkout@v6 2026-05-12T20:41:12.5107984Z includeif.gitdir:/github/workspace/.git.path +Test (ubuntu-latest) Post Run actions/checkout@v6 2026-05-12T20:41:12.5108361Z includeif.gitdir:/github/workspace/.git/worktrees/*.path +Test (ubuntu-latest) Post Run actions/checkout@v6 2026-05-12T20:41:12.5116118Z [command]/usr/bin/git config --local --get-all includeif.gitdir:/home/runner/work/link-cli/link-cli/.git.path +Test (ubuntu-latest) Post Run actions/checkout@v6 2026-05-12T20:41:12.5136938Z /home/runner/work/_temp/git-credentials-a9a776d8-3a98-4a9f-8c8b-1deac78e195d.config +Test (ubuntu-latest) Post Run actions/checkout@v6 2026-05-12T20:41:12.5147769Z [command]/usr/bin/git config --local --unset includeif.gitdir:/home/runner/work/link-cli/link-cli/.git.path /home/runner/work/_temp/git-credentials-a9a776d8-3a98-4a9f-8c8b-1deac78e195d.config +Test (ubuntu-latest) Post Run actions/checkout@v6 2026-05-12T20:41:12.5180862Z [command]/usr/bin/git config --local --get-all includeif.gitdir:/home/runner/work/link-cli/link-cli/.git/worktrees/*.path +Test (ubuntu-latest) Post Run actions/checkout@v6 2026-05-12T20:41:12.5201928Z /home/runner/work/_temp/git-credentials-a9a776d8-3a98-4a9f-8c8b-1deac78e195d.config +Test (ubuntu-latest) Post Run actions/checkout@v6 2026-05-12T20:41:12.5210770Z [command]/usr/bin/git config --local --unset includeif.gitdir:/home/runner/work/link-cli/link-cli/.git/worktrees/*.path /home/runner/work/_temp/git-credentials-a9a776d8-3a98-4a9f-8c8b-1deac78e195d.config +Test (ubuntu-latest) Post Run actions/checkout@v6 2026-05-12T20:41:12.5243213Z [command]/usr/bin/git config --local --get-all includeif.gitdir:/github/workspace/.git.path +Test (ubuntu-latest) Post Run actions/checkout@v6 2026-05-12T20:41:12.5264633Z /github/runner_temp/git-credentials-a9a776d8-3a98-4a9f-8c8b-1deac78e195d.config +Test (ubuntu-latest) Post Run actions/checkout@v6 2026-05-12T20:41:12.5273116Z [command]/usr/bin/git config --local --unset includeif.gitdir:/github/workspace/.git.path /github/runner_temp/git-credentials-a9a776d8-3a98-4a9f-8c8b-1deac78e195d.config +Test (ubuntu-latest) Post Run actions/checkout@v6 2026-05-12T20:41:12.5305835Z [command]/usr/bin/git config --local --get-all includeif.gitdir:/github/workspace/.git/worktrees/*.path +Test (ubuntu-latest) Post Run actions/checkout@v6 2026-05-12T20:41:12.5328628Z /github/runner_temp/git-credentials-a9a776d8-3a98-4a9f-8c8b-1deac78e195d.config +Test (ubuntu-latest) Post Run actions/checkout@v6 2026-05-12T20:41:12.5339913Z [command]/usr/bin/git config --local --unset includeif.gitdir:/github/workspace/.git/worktrees/*.path /github/runner_temp/git-credentials-a9a776d8-3a98-4a9f-8c8b-1deac78e195d.config +Test (ubuntu-latest) Post Run actions/checkout@v6 2026-05-12T20:41:12.5378840Z [command]/usr/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url +Test (ubuntu-latest) Post Run actions/checkout@v6 2026-05-12T20:41:12.5625838Z Removing credentials config '/home/runner/work/_temp/git-credentials-a9a776d8-3a98-4a9f-8c8b-1deac78e195d.config' +Test (ubuntu-latest) Complete job 2026-05-12T20:41:12.5791719Z Cleaning up orphan processes +Test (ubuntu-latest) Complete job 2026-05-12T20:41:12.6092727Z Terminate orphan process: pid (2781) (dotnet) +Test (ubuntu-latest) Complete job 2026-05-12T20:41:12.6121386Z Terminate orphan process: pid (2884) (VBCSCompiler) +Test (ubuntu-latest) Complete job 2026-05-12T20:41:12.6156955Z ##[warning]Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/ +Detect Changes Set up job 2026-05-12T20:40:15.5551023Z Current runner version: '2.334.0' +Detect Changes Set up job 2026-05-12T20:40:15.5576202Z ##[group]Runner Image Provisioner +Detect Changes Set up job 2026-05-12T20:40:15.5577046Z Hosted Compute Agent +Detect Changes Set up job 2026-05-12T20:40:15.5577613Z Version: 20260213.493 +Detect Changes Set up job 2026-05-12T20:40:15.5578281Z Commit: 5c115507f6dd24b8de37d8bbe0bb4509d0cc0fa3 +Detect Changes Set up job 2026-05-12T20:40:15.5578996Z Build Date: 2026-02-13T00:28:41Z +Detect Changes Set up job 2026-05-12T20:40:15.5579622Z Worker ID: {c5d74714-41cc-4808-9fb6-2155ca374e13} +Detect Changes Set up job 2026-05-12T20:40:15.5580347Z Azure Region: eastus +Detect Changes Set up job 2026-05-12T20:40:15.5580886Z ##[endgroup] +Detect Changes Set up job 2026-05-12T20:40:15.5582607Z ##[group]Operating System +Detect Changes Set up job 2026-05-12T20:40:15.5583268Z Ubuntu +Detect Changes Set up job 2026-05-12T20:40:15.5583771Z 24.04.4 +Detect Changes Set up job 2026-05-12T20:40:15.5584247Z LTS +Detect Changes Set up job 2026-05-12T20:40:15.5584753Z ##[endgroup] +Detect Changes Set up job 2026-05-12T20:40:15.5585312Z ##[group]Runner Image +Detect Changes Set up job 2026-05-12T20:40:15.5586138Z Image: ubuntu-24.04 +Detect Changes Set up job 2026-05-12T20:40:15.5586767Z Version: 20260413.86.1 +Detect Changes Set up job 2026-05-12T20:40:15.5587801Z Included Software: https://github.com/actions/runner-images/blob/ubuntu24/20260413.86/images/ubuntu/Ubuntu2404-Readme.md +Detect Changes Set up job 2026-05-12T20:40:15.5589468Z Image Release: https://github.com/actions/runner-images/releases/tag/ubuntu24%2F20260413.86 +Detect Changes Set up job 2026-05-12T20:40:15.5590400Z ##[endgroup] +Detect Changes Set up job 2026-05-12T20:40:15.5593520Z ##[group]GITHUB_TOKEN Permissions +Detect Changes Set up job 2026-05-12T20:40:15.5595816Z Actions: write +Detect Changes Set up job 2026-05-12T20:40:15.5596388Z ArtifactMetadata: write +Detect Changes Set up job 2026-05-12T20:40:15.5597015Z Attestations: write +Detect Changes Set up job 2026-05-12T20:40:15.5597587Z Checks: write +Detect Changes Set up job 2026-05-12T20:40:15.5598055Z CodeQuality: write +Detect Changes Set up job 2026-05-12T20:40:15.5598675Z Contents: write +Detect Changes Set up job 2026-05-12T20:40:15.5599437Z Deployments: write +Detect Changes Set up job 2026-05-12T20:40:15.5599938Z Discussions: write +Detect Changes Set up job 2026-05-12T20:40:15.5600514Z Issues: write +Detect Changes Set up job 2026-05-12T20:40:15.5601012Z Metadata: read +Detect Changes Set up job 2026-05-12T20:40:15.5601524Z Models: read +Detect Changes Set up job 2026-05-12T20:40:15.5602294Z Packages: write +Detect Changes Set up job 2026-05-12T20:40:15.5602945Z Pages: write +Detect Changes Set up job 2026-05-12T20:40:15.5603474Z PullRequests: write +Detect Changes Set up job 2026-05-12T20:40:15.5604023Z RepositoryProjects: write +Detect Changes Set up job 2026-05-12T20:40:15.5604655Z SecurityEvents: write +Detect Changes Set up job 2026-05-12T20:40:15.5605151Z Statuses: write +Detect Changes Set up job 2026-05-12T20:40:15.5605730Z VulnerabilityAlerts: read +Detect Changes Set up job 2026-05-12T20:40:15.5606396Z ##[endgroup] +Detect Changes Set up job 2026-05-12T20:40:15.5608595Z Secret source: Actions +Detect Changes Set up job 2026-05-12T20:40:15.5609646Z Prepare workflow directory +Detect Changes Set up job 2026-05-12T20:40:15.6011299Z Prepare all required actions +Detect Changes Set up job 2026-05-12T20:40:15.6048346Z Getting action download info +Detect Changes Set up job 2026-05-12T20:40:15.9572373Z Download action repository 'actions/checkout@v6' (SHA:de0fac2e4500dabe0009e67214ff5f5447ce83dd) +Detect Changes Set up job 2026-05-12T20:40:16.0801229Z Download action repository 'actions/setup-node@v6' (SHA:48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e) +Detect Changes Set up job 2026-05-12T20:40:16.3916617Z Complete job name: Detect Changes +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.4638197Z ##[group]Run actions/checkout@v6 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.4639179Z with: +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.4639610Z fetch-depth: 0 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.4640081Z repository: link-foundation/link-cli +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.4640803Z token: *** +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.4641237Z ssh-strict: true +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.4641923Z ssh-user: git +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.4642386Z persist-credentials: true +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.4642909Z clean: true +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.4643355Z sparse-checkout-cone-mode: true +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.4643889Z fetch-tags: false +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.4644317Z show-progress: true +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.4644761Z lfs: false +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.4645162Z submodules: false +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.4645603Z set-safe-directory: true +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.4646353Z env: +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.4646808Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.4647398Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.4647938Z DOTNET_NOLOGO: true +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.4648380Z ##[endgroup] +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.5626663Z Syncing repository: link-foundation/link-cli +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.5629716Z ##[group]Getting Git version info +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.5631053Z Working directory is '/home/runner/work/link-cli/link-cli' +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.5633461Z [command]/usr/bin/git version +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.5667611Z git version 2.53.0 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.5724637Z ##[endgroup] +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.5740938Z Temporarily overriding HOME='/home/runner/work/_temp/127bd864-5afe-4813-9ae6-41eef7cd05b9' before making global git config changes +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.5744631Z Adding repository directory to the temporary git global config as a safe directory +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.5748850Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/link-cli/link-cli +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.5787069Z Deleting the contents of '/home/runner/work/link-cli/link-cli' +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.5791531Z ##[group]Initializing the repository +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.5797416Z [command]/usr/bin/git init /home/runner/work/link-cli/link-cli +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.5900114Z hint: Using 'master' as the name for the initial branch. This default branch name +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.5902398Z hint: will change to "main" in Git 3.0. To configure the initial branch name +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.5904202Z hint: to use in all of your new repositories, which will suppress this warning, +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.5905043Z hint: call: +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.5905793Z hint: +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.5906663Z hint: git config --global init.defaultBranch +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.5907679Z hint: +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.5908676Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.5909760Z hint: 'development'. The just-created branch can be renamed via this command: +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.5910590Z hint: +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.5911007Z hint: git branch -m +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.5911488Z hint: +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.5912488Z hint: Disable this message with "git config set advice.defaultBranchName false" +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.5914066Z Initialized empty Git repository in /home/runner/work/link-cli/link-cli/.git/ +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.5916396Z [command]/usr/bin/git remote add origin https://github.com/link-foundation/link-cli +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.5954739Z ##[endgroup] +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.5955532Z ##[group]Disabling automatic garbage collection +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.5956234Z [command]/usr/bin/git config --local gc.auto 0 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.5986641Z ##[endgroup] +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.5987444Z ##[group]Setting up auth +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.5988467Z Removing SSH command configuration +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.5996562Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.6032841Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :" +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.6381494Z Removing HTTP extra header +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.6388767Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.6430411Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :" +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.6654380Z Removing includeIf entries pointing to credentials config files +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.6660517Z [command]/usr/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir: +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.6691360Z [command]/usr/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.6906697Z [command]/usr/bin/git config --file /home/runner/work/_temp/git-credentials-4225cc5d-2595-456a-a29f-51c096c9f84e.config http.https://github.com/.extraheader AUTHORIZATION: basic *** +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.6942591Z [command]/usr/bin/git config --local includeIf.gitdir:/home/runner/work/link-cli/link-cli/.git.path /home/runner/work/_temp/git-credentials-4225cc5d-2595-456a-a29f-51c096c9f84e.config +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.6970061Z [command]/usr/bin/git config --local includeIf.gitdir:/home/runner/work/link-cli/link-cli/.git/worktrees/*.path /home/runner/work/_temp/git-credentials-4225cc5d-2595-456a-a29f-51c096c9f84e.config +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.6999328Z [command]/usr/bin/git config --local includeIf.gitdir:/github/workspace/.git.path /github/runner_temp/git-credentials-4225cc5d-2595-456a-a29f-51c096c9f84e.config +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.7028042Z [command]/usr/bin/git config --local includeIf.gitdir:/github/workspace/.git/worktrees/*.path /github/runner_temp/git-credentials-4225cc5d-2595-456a-a29f-51c096c9f84e.config +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.7054406Z ##[endgroup] +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.7055247Z ##[group]Fetching the repository +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:16.7063828Z [command]/usr/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules origin +refs/heads/*:refs/remotes/origin/* +refs/tags/*:refs/tags/* +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2412784Z From https://github.com/link-foundation/link-cli +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2416749Z * [new branch] claude/code-review-and-issues-01WwM3yFJiaRwTrhABNoUkYa -> origin/claude/code-review-and-issues-01WwM3yFJiaRwTrhABNoUkYa +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2420204Z * [new branch] issue-11-36571c97 -> origin/issue-11-36571c97 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2422336Z * [new branch] issue-12-fc4292e4 -> origin/issue-12-fc4292e4 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2424261Z * [new branch] issue-15-d0c58a82 -> origin/issue-15-d0c58a82 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2425752Z * [new branch] issue-17-1bd2fb57 -> origin/issue-17-1bd2fb57 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2427065Z * [new branch] issue-18-f86143d5 -> origin/issue-18-f86143d5 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2428466Z * [new branch] issue-19-9de6817b -> origin/issue-19-9de6817b +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2429855Z * [new branch] issue-20-aba7a4fa -> origin/issue-20-aba7a4fa +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2431223Z * [new branch] issue-22-889744b4 -> origin/issue-22-889744b4 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2432976Z * [new branch] issue-23-e23fa86d -> origin/issue-23-e23fa86d +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2434413Z * [new branch] issue-24-3e3135c5 -> origin/issue-24-3e3135c5 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2435776Z * [new branch] issue-25-4c1591ce -> origin/issue-25-4c1591ce +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2437182Z * [new branch] issue-26-c9ed9c27 -> origin/issue-26-c9ed9c27 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2438682Z * [new branch] issue-3-af35a436 -> origin/issue-3-af35a436 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2440329Z * [new branch] issue-30-7073054f -> origin/issue-30-7073054f +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2442105Z * [new branch] issue-31-e51b89e4 -> origin/issue-31-e51b89e4 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2443708Z * [new branch] issue-32-3b3efd02 -> origin/issue-32-3b3efd02 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2445260Z * [new branch] issue-33-a60a3c86 -> origin/issue-33-a60a3c86 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2446852Z * [new branch] issue-34-22f3c425 -> origin/issue-34-22f3c425 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2448489Z * [new branch] issue-35-391818e8 -> origin/issue-35-391818e8 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2450214Z * [new branch] issue-56-73ae4c3a -> origin/issue-56-73ae4c3a +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2452575Z * [new branch] issue-58-2571f420 -> origin/issue-58-2571f420 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2454353Z * [new branch] issue-63-452491b85cd2 -> origin/issue-63-452491b85cd2 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2456141Z * [new branch] issue-65-5d06345e60dc -> origin/issue-65-5d06345e60dc +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2458011Z * [new branch] issue-67-d67d72474036 -> origin/issue-67-d67d72474036 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2460005Z * [new branch] issue-69-43fc7f1a4ec3 -> origin/issue-69-43fc7f1a4ec3 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2462361Z * [new branch] issue-71-c1debd4cdf5e -> origin/issue-71-c1debd4cdf5e +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2464472Z * [new branch] issue-73-d71d2656d381 -> origin/issue-73-d71d2656d381 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2466598Z * [new branch] issue-75-2384a28fe185 -> origin/issue-75-2384a28fe185 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2468776Z * [new branch] issue-77-388911d8eea6 -> origin/issue-77-388911d8eea6 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2470882Z * [new branch] issue-79-49ca4f759246 -> origin/issue-79-49ca4f759246 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2473217Z * [new branch] issue-79-c80df6f859e8 -> origin/issue-79-c80df6f859e8 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2475239Z * [new branch] issue-8-e91a69e5 -> origin/issue-8-e91a69e5 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2477266Z * [new branch] issue-82-7aea04680cb2 -> origin/issue-82-7aea04680cb2 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2479519Z * [new branch] issue-84-0f4c3bcac49c -> origin/issue-84-0f4c3bcac49c +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2481385Z * [new branch] main -> origin/main +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2483393Z * [new branch] named-links -> origin/named-links +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2485391Z * [new branch] nested-creation-1 -> origin/nested-creation-1 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2487135Z * [new tag] 1.0.1 -> 1.0.1 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2488661Z * [new tag] csharp-v2.4.0 -> csharp-v2.4.0 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2490261Z * [new tag] rust-v0.1.0 -> rust-v0.1.0 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2492063Z * [new tag] rust-v0.2.0 -> rust-v0.2.0 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2493662Z * [new tag] rust-v0.2.1 -> rust-v0.2.1 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2495165Z * [new tag] v1.2.1 -> v1.2.1 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2496613Z * [new tag] v1.2.2 -> v1.2.2 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2498069Z * [new tag] v1.2.3 -> v1.2.3 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2499541Z * [new tag] v1.3.0 -> v1.3.0 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2501528Z * [new tag] v1.3.1 -> v1.3.1 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2504049Z * [new tag] v1.4.0 -> v1.4.0 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2505603Z * [new tag] v1.4.1 -> v1.4.1 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2507478Z * [new tag] v1.5.0 -> v1.5.0 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2509317Z * [new tag] v1.6.0 -> v1.6.0 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2510795Z * [new tag] v1.7.0 -> v1.7.0 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2512527Z * [new tag] v1.7.1 -> v1.7.1 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2513947Z * [new tag] v1.7.2 -> v1.7.2 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2515424Z * [new tag] v1.7.3 -> v1.7.3 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2517350Z * [new tag] v1.7.4 -> v1.7.4 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2518767Z * [new tag] v1.8.0 -> v1.8.0 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2520170Z * [new tag] v2.0.2 -> v2.0.2 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2522259Z * [new tag] v2.1.0 -> v2.1.0 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2523800Z * [new tag] v2.1.1 -> v2.1.1 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2525190Z * [new tag] v2.1.2 -> v2.1.2 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2526562Z * [new tag] v2.1.3 -> v2.1.3 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2527941Z * [new tag] v2.2.0 -> v2.2.0 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2529342Z * [new tag] v2.2.1 -> v2.2.1 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2531283Z * [new tag] v2.2.2 -> v2.2.2 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2533559Z * [new tag] v2.4.0 -> v2.4.0 +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2536724Z [command]/usr/bin/git branch --list --remote origin/main +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2546350Z origin/main +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2557216Z [command]/usr/bin/git rev-parse refs/remotes/origin/main +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2578018Z 0c8092c56b0fb11704f89398b6d831cd9bbe007d +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2584155Z ##[endgroup] +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2586398Z ##[group]Determining the checkout info +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2588915Z ##[endgroup] +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2589924Z [command]/usr/bin/git sparse-checkout disable +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2625571Z [command]/usr/bin/git config --local --unset-all extensions.worktreeConfig +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2651862Z ##[group]Checking out the ref +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.2654515Z [command]/usr/bin/git checkout --progress --force -B main refs/remotes/origin/main +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.3306511Z Switched to a new branch 'main' +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.3308435Z branch 'main' set up to track 'origin/main'. +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.3323757Z ##[endgroup] +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.3362804Z [command]/usr/bin/git log -1 --format=%H +Detect Changes Run actions/checkout@v6 2026-05-12T20:40:17.3388266Z 0c8092c56b0fb11704f89398b6d831cd9bbe007d +Detect Changes Setup Node.js 2026-05-12T20:40:17.3711378Z ##[group]Run actions/setup-node@v6 +Detect Changes Setup Node.js 2026-05-12T20:40:17.3712709Z with: +Detect Changes Setup Node.js 2026-05-12T20:40:17.3713441Z node-version: 20.x +Detect Changes Setup Node.js 2026-05-12T20:40:17.3714288Z check-latest: false +Detect Changes Setup Node.js 2026-05-12T20:40:17.3715594Z token: *** +Detect Changes Setup Node.js 2026-05-12T20:40:17.3716403Z package-manager-cache: true +Detect Changes Setup Node.js 2026-05-12T20:40:17.3717373Z env: +Detect Changes Setup Node.js 2026-05-12T20:40:17.3718155Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Detect Changes Setup Node.js 2026-05-12T20:40:17.3719330Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Detect Changes Setup Node.js 2026-05-12T20:40:17.3720386Z DOTNET_NOLOGO: true +Detect Changes Setup Node.js 2026-05-12T20:40:17.3721232Z ##[endgroup] +Detect Changes Setup Node.js 2026-05-12T20:40:17.5865907Z Found in cache @ /opt/hostedtoolcache/node/20.20.2/x64 +Detect Changes Setup Node.js 2026-05-12T20:40:17.5869605Z ##[group]Environment details +Detect Changes Setup Node.js 2026-05-12T20:40:17.9744819Z node: v20.20.2 +Detect Changes Setup Node.js 2026-05-12T20:40:17.9746212Z npm: 10.8.2 +Detect Changes Setup Node.js 2026-05-12T20:40:17.9747386Z yarn: 1.22.22 +Detect Changes Setup Node.js 2026-05-12T20:40:17.9749160Z ##[endgroup] +Detect Changes Detect changes 2026-05-12T20:40:17.9916556Z ##[group]Run node csharp/scripts/detect-code-changes.mjs +Detect Changes Detect changes 2026-05-12T20:40:17.9918131Z ^[[36;1mnode csharp/scripts/detect-code-changes.mjs^[[0m +Detect Changes Detect changes 2026-05-12T20:40:17.9954552Z shell: /usr/bin/bash -e {0} +Detect Changes Detect changes 2026-05-12T20:40:17.9955479Z env: +Detect Changes Detect changes 2026-05-12T20:40:17.9956228Z DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true +Detect Changes Detect changes 2026-05-12T20:40:17.9957375Z DOTNET_CLI_TELEMETRY_OPTOUT: true +Detect Changes Detect changes 2026-05-12T20:40:17.9958361Z DOTNET_NOLOGO: true +Detect Changes Detect changes 2026-05-12T20:40:17.9959190Z GITHUB_EVENT_NAME: push +Detect Changes Detect changes 2026-05-12T20:40:17.9960054Z GITHUB_BASE_SHA: +Detect Changes Detect changes 2026-05-12T20:40:17.9960819Z GITHUB_HEAD_SHA: +Detect Changes Detect changes 2026-05-12T20:40:17.9961563Z ##[endgroup] +Detect Changes Detect changes 2026-05-12T20:40:18.0411528Z Detecting file changes for CI/CD... +Detect Changes Detect changes 2026-05-12T20:40:18.0412754Z +Detect Changes Detect changes 2026-05-12T20:40:18.0413245Z Comparing HEAD^ to HEAD +Detect Changes Detect changes 2026-05-12T20:40:18.0456538Z Changed files: +Detect Changes Detect changes 2026-05-12T20:40:18.0458038Z .github/workflows/csharp.yml +Detect Changes Detect changes 2026-05-12T20:40:18.0459861Z csharp/scripts/check-release-needed.mjs +Detect Changes Detect changes 2026-05-12T20:40:18.0462108Z csharp/scripts/release-scripts.test.mjs +Detect Changes Detect changes 2026-05-12T20:40:18.0464085Z docs/case-studies/issue-84/README.md +Detect Changes Detect changes 2026-05-12T20:40:18.0465857Z docs/case-studies/issue-84/evidence/all-releases.json +Detect Changes Detect changes 2026-05-12T20:40:18.0467807Z docs/case-studies/issue-84/evidence/csharp-releases.json +Detect Changes Detect changes 2026-05-12T20:40:18.0470174Z docs/case-studies/issue-84/evidence/git-tag-csharp-v2.4.0.txt +Detect Changes Detect changes 2026-05-12T20:40:18.0472168Z docs/case-studies/issue-84/evidence/issue-84-comments.json +Detect Changes Detect changes 2026-05-12T20:40:18.0473879Z docs/case-studies/issue-84/evidence/issue-84.json +Detect Changes Detect changes 2026-05-12T20:40:18.0475736Z docs/case-studies/issue-84/evidence/nuget-clink-2.3.0.headers.txt +Detect Changes Detect changes 2026-05-12T20:40:18.0477816Z docs/case-studies/issue-84/evidence/nuget-clink-2.4.0.headers.txt +Detect Changes Detect changes 2026-05-12T20:40:18.0479796Z docs/case-studies/issue-84/evidence/nuget-clink-index.json +Detect Changes Detect changes 2026-05-12T20:40:18.0481870Z docs/case-studies/issue-84/evidence/pr-85-comments.json +Detect Changes Detect changes 2026-05-12T20:40:18.0483795Z docs/case-studies/issue-84/evidence/pr-85-reviews.json +Detect Changes Detect changes 2026-05-12T20:40:18.0485452Z docs/case-studies/issue-84/evidence/pr-85.json +Detect Changes Detect changes 2026-05-12T20:40:18.0487172Z docs/case-studies/issue-84/evidence/run-25757419575-attempts.json +Detect Changes Detect changes 2026-05-12T20:40:18.0489113Z docs/case-studies/issue-84/evidence/run-25757419575-jobs.json +Detect Changes Detect changes 2026-05-12T20:40:18.0490754Z docs/case-studies/issue-84/evidence/run-25757419575.json +Detect Changes Detect changes 2026-05-12T20:40:18.0492757Z docs/case-studies/issue-84/evidence/runs-d39285a.json +Detect Changes Detect changes 2026-05-12T20:40:18.0494628Z docs/case-studies/issue-84/evidence/templates/csharp-create-github-release.mjs +Detect Changes Detect changes 2026-05-12T20:40:18.0496634Z docs/case-studies/issue-84/evidence/templates/csharp-release.yml +Detect Changes Detect changes 2026-05-12T20:40:18.0498590Z docs/case-studies/issue-84/evidence/templates/csharp-version-and-commit.mjs +Detect Changes Detect changes 2026-05-12T20:40:18.0500881Z docs/case-studies/issue-84/evidence/templates/js-check-release-needed.mjs +Detect Changes Detect changes 2026-05-12T20:40:18.0503544Z docs/case-studies/issue-84/evidence/templates/js-publish-to-npm.mjs +Detect Changes Detect changes 2026-05-12T20:40:18.0505582Z docs/case-studies/issue-84/evidence/templates/js-release.yml +Detect Changes Detect changes 2026-05-12T20:40:18.0508093Z docs/case-studies/issue-84/evidence/templates/rust-release.yml +Detect Changes Detect changes 2026-05-12T20:40:18.0509598Z js/test/repositoryLayout.test.mjs +Detect Changes Detect changes 2026-05-12T20:40:18.0510296Z +Detect Changes Detect changes 2026-05-12T20:40:18.0510627Z cs-changed=false +Detect Changes Detect changes 2026-05-12T20:40:18.0511459Z csproj-changed=false +Detect Changes Detect changes 2026-05-12T20:40:18.0513040Z sln-changed=false +Detect Changes Detect changes 2026-05-12T20:40:18.0514153Z props-changed=false +Detect Changes Detect changes 2026-05-12T20:40:18.0515203Z rs-changed=false +Detect Changes Detect changes 2026-05-12T20:40:18.0516026Z toml-changed=false +Detect Changes Detect changes 2026-05-12T20:40:18.0516820Z mjs-changed=true +Detect Changes Detect changes 2026-05-12T20:40:18.0517610Z docs-changed=true +Detect Changes Detect changes 2026-05-12T20:40:18.0518426Z workflow-changed=true +Detect Changes Detect changes 2026-05-12T20:40:18.0518934Z +Detect Changes Detect changes 2026-05-12T20:40:18.0519392Z Files considered as code changes: +Detect Changes Detect changes 2026-05-12T20:40:18.0520467Z .github/workflows/csharp.yml +Detect Changes Detect changes 2026-05-12T20:40:18.0521538Z csharp/scripts/check-release-needed.mjs +Detect Changes Detect changes 2026-05-12T20:40:18.0523088Z csharp/scripts/release-scripts.test.mjs +Detect Changes Detect changes 2026-05-12T20:40:18.0524266Z js/test/repositoryLayout.test.mjs +Detect Changes Detect changes 2026-05-12T20:40:18.0524991Z +Detect Changes Detect changes 2026-05-12T20:40:18.0525379Z any-code-changed=true +Detect Changes Detect changes 2026-05-12T20:40:18.0526501Z csharp-code-changed=false +Detect Changes Detect changes 2026-05-12T20:40:18.0527847Z rust-code-changed=false +Detect Changes Detect changes 2026-05-12T20:40:18.0528707Z +Detect Changes Detect changes 2026-05-12T20:40:18.0529390Z Change detection completed. +Detect Changes Post Setup Node.js 2026-05-12T20:40:18.0694349Z Post job cleanup. +Detect Changes Post Run actions/checkout@v6 2026-05-12T20:40:18.2120966Z Post job cleanup. +Detect Changes Post Run actions/checkout@v6 2026-05-12T20:40:18.2974975Z [command]/usr/bin/git version +Detect Changes Post Run actions/checkout@v6 2026-05-12T20:40:18.3043799Z git version 2.53.0 +Detect Changes Post Run actions/checkout@v6 2026-05-12T20:40:18.3088632Z Temporarily overriding HOME='/home/runner/work/_temp/e958300a-44bb-4f81-bc20-bc87af3591a1' before making global git config changes +Detect Changes Post Run actions/checkout@v6 2026-05-12T20:40:18.3094026Z Adding repository directory to the temporary git global config as a safe directory +Detect Changes Post Run actions/checkout@v6 2026-05-12T20:40:18.3098195Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/link-cli/link-cli +Detect Changes Post Run actions/checkout@v6 2026-05-12T20:40:18.3124401Z Removing SSH command configuration +Detect Changes Post Run actions/checkout@v6 2026-05-12T20:40:18.3132293Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand +Detect Changes Post Run actions/checkout@v6 2026-05-12T20:40:18.3166883Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :" +Detect Changes Post Run actions/checkout@v6 2026-05-12T20:40:18.3382008Z Removing HTTP extra header +Detect Changes Post Run actions/checkout@v6 2026-05-12T20:40:18.3387935Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader +Detect Changes Post Run actions/checkout@v6 2026-05-12T20:40:18.3422489Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :" +Detect Changes Post Run actions/checkout@v6 2026-05-12T20:40:18.3634066Z Removing includeIf entries pointing to credentials config files +Detect Changes Post Run actions/checkout@v6 2026-05-12T20:40:18.3638536Z [command]/usr/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir: +Detect Changes Post Run actions/checkout@v6 2026-05-12T20:40:18.3660522Z includeif.gitdir:/home/runner/work/link-cli/link-cli/.git.path +Detect Changes Post Run actions/checkout@v6 2026-05-12T20:40:18.3664166Z includeif.gitdir:/home/runner/work/link-cli/link-cli/.git/worktrees/*.path +Detect Changes Post Run actions/checkout@v6 2026-05-12T20:40:18.3667089Z includeif.gitdir:/github/workspace/.git.path +Detect Changes Post Run actions/checkout@v6 2026-05-12T20:40:18.3669610Z includeif.gitdir:/github/workspace/.git/worktrees/*.path +Detect Changes Post Run actions/checkout@v6 2026-05-12T20:40:18.3675837Z [command]/usr/bin/git config --local --get-all includeif.gitdir:/home/runner/work/link-cli/link-cli/.git.path +Detect Changes Post Run actions/checkout@v6 2026-05-12T20:40:18.3693768Z /home/runner/work/_temp/git-credentials-4225cc5d-2595-456a-a29f-51c096c9f84e.config +Detect Changes Post Run actions/checkout@v6 2026-05-12T20:40:18.3707886Z [command]/usr/bin/git config --local --unset includeif.gitdir:/home/runner/work/link-cli/link-cli/.git.path /home/runner/work/_temp/git-credentials-4225cc5d-2595-456a-a29f-51c096c9f84e.config +Detect Changes Post Run actions/checkout@v6 2026-05-12T20:40:18.3739865Z [command]/usr/bin/git config --local --get-all includeif.gitdir:/home/runner/work/link-cli/link-cli/.git/worktrees/*.path +Detect Changes Post Run actions/checkout@v6 2026-05-12T20:40:18.3762163Z /home/runner/work/_temp/git-credentials-4225cc5d-2595-456a-a29f-51c096c9f84e.config +Detect Changes Post Run actions/checkout@v6 2026-05-12T20:40:18.3772688Z [command]/usr/bin/git config --local --unset includeif.gitdir:/home/runner/work/link-cli/link-cli/.git/worktrees/*.path /home/runner/work/_temp/git-credentials-4225cc5d-2595-456a-a29f-51c096c9f84e.config +Detect Changes Post Run actions/checkout@v6 2026-05-12T20:40:18.3802320Z [command]/usr/bin/git config --local --get-all includeif.gitdir:/github/workspace/.git.path +Detect Changes Post Run actions/checkout@v6 2026-05-12T20:40:18.3822573Z /github/runner_temp/git-credentials-4225cc5d-2595-456a-a29f-51c096c9f84e.config +Detect Changes Post Run actions/checkout@v6 2026-05-12T20:40:18.3830652Z [command]/usr/bin/git config --local --unset includeif.gitdir:/github/workspace/.git.path /github/runner_temp/git-credentials-4225cc5d-2595-456a-a29f-51c096c9f84e.config +Detect Changes Post Run actions/checkout@v6 2026-05-12T20:40:18.3861277Z [command]/usr/bin/git config --local --get-all includeif.gitdir:/github/workspace/.git/worktrees/*.path +Detect Changes Post Run actions/checkout@v6 2026-05-12T20:40:18.3881364Z /github/runner_temp/git-credentials-4225cc5d-2595-456a-a29f-51c096c9f84e.config +Detect Changes Post Run actions/checkout@v6 2026-05-12T20:40:18.3891128Z [command]/usr/bin/git config --local --unset includeif.gitdir:/github/workspace/.git/worktrees/*.path /github/runner_temp/git-credentials-4225cc5d-2595-456a-a29f-51c096c9f84e.config +Detect Changes Post Run actions/checkout@v6 2026-05-12T20:40:18.3922270Z [command]/usr/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url +Detect Changes Post Run actions/checkout@v6 2026-05-12T20:40:18.4146536Z Removing credentials config '/home/runner/work/_temp/git-credentials-4225cc5d-2595-456a-a29f-51c096c9f84e.config' +Detect Changes Complete job 2026-05-12T20:40:18.4326944Z Evaluate and set job outputs +Detect Changes Complete job 2026-05-12T20:40:18.4337302Z Set output 'cs-changed' +Detect Changes Complete job 2026-05-12T20:40:18.4339950Z Set output 'csproj-changed' +Detect Changes Complete job 2026-05-12T20:40:18.4341558Z Set output 'sln-changed' +Detect Changes Complete job 2026-05-12T20:40:18.4343087Z Set output 'props-changed' +Detect Changes Complete job 2026-05-12T20:40:18.4344266Z Set output 'mjs-changed' +Detect Changes Complete job 2026-05-12T20:40:18.4345401Z Set output 'docs-changed' +Detect Changes Complete job 2026-05-12T20:40:18.4346563Z Set output 'workflow-changed' +Detect Changes Complete job 2026-05-12T20:40:18.4347782Z Set output 'any-code-changed' +Detect Changes Complete job 2026-05-12T20:40:18.4349013Z Set output 'csharp-code-changed' +Detect Changes Complete job 2026-05-12T20:40:18.4350884Z Cleaning up orphan processes diff --git a/docs/case-studies/issue-86/templates/csharp-ai-driven-development-pipeline-template/check-release-needed.mjs b/docs/case-studies/issue-86/templates/csharp-ai-driven-development-pipeline-template/check-release-needed.mjs new file mode 100644 index 0000000..f34f06d --- /dev/null +++ b/docs/case-studies/issue-86/templates/csharp-ai-driven-development-pipeline-template/check-release-needed.mjs @@ -0,0 +1,338 @@ +#!/usr/bin/env node + +/** + * Check if a C# release is needed based on changesets and NuGet registry state. + * + * This script checks: + * 1. If there are changeset files to process. + * 2. If the current csproj has already been published to NuGet. + * 3. If the matching GitHub Release already exists. + * + * IMPORTANT: This script checks NuGet (the source of truth for the package) + * and the GitHub Releases API, NOT git tags. Git tags can exist without the + * package being on NuGet — that is exactly the failure mode that motivates + * issue #11: a version-bump commit and a tag were pushed, but + * `dotnet nuget push` returned HTTP 403, so the public package was never + * created. Re-runs then short-circuited on the pre-existing tag and never + * retried the publish. + * + * This provides a self-healing mechanism: if a previous release attempt failed + * after the version commit and tag were pushed, the next push to main detects + * the unpublished version on NuGet and resumes the publish + GitHub release + * steps without requiring a new changeset. + * + * Analogous to `check-release-needed.mjs` in the JavaScript template. + * + * Usage: + * bun run scripts/check-release-needed.mjs + * [--csproj ] [--repository ] [--tag-prefix ] + * [--package-id ] + * + * Environment variables: + * - HAS_CHANGESETS: 'true' if changeset files exist (from check_changesets step) + * - NUGET_INDEX_URL: override NuGet flat-container endpoint (for tests) + * - GITHUB_API_URL: override GitHub API endpoint (for tests) + * - GITHUB_REPOSITORY: owner/repo, used when --repository is omitted + * - GH_TOKEN / GITHUB_TOKEN: optional auth for the GitHub release probe + * + * Outputs (written to GITHUB_OUTPUT): + * - should_release: 'true' if a release should be created + * - skip_bump: 'true' if the version bump should be skipped + * (csproj version is not yet on NuGet) + * - current_version: the current csproj value + * - nuget_published: 'true' if the current version is on NuGet + * - github_release_exists: 'true' if the matching GitHub release exists + * - reason: short human-readable reason + */ + +import { appendFileSync, readFileSync } from 'node:fs'; + +const NUGET_FLAT_CONTAINER = 'https://api.nuget.org/v3-flatcontainer'; +const GITHUB_API = 'https://api.github.com'; + +const args = process.argv.slice(2); + +/** + * Read a CLI flag value. + * @param {string} name + * @returns {string | null} + */ +function getArg(name) { + const equalsIndex = args.findIndex((arg) => arg.startsWith(`--${name}=`)); + if (equalsIndex !== -1) { + return args[equalsIndex].slice(`--${name}=`.length); + } + const index = args.indexOf(`--${name}`); + if (index === -1) { + return null; + } + const value = args[index + 1]; + if (value === undefined || value.startsWith('--')) { + return ''; + } + return value; +} + +/** + * Append a key/value pair to GITHUB_OUTPUT (when defined) and echo to stdout. + * @param {string} key + * @param {string} value + */ +export function setOutput(key, value) { + const outputFile = process.env.GITHUB_OUTPUT; + if (outputFile) { + appendFileSync(outputFile, `${key}=${value}\n`); + } + console.log(`Output: ${key}=${value}`); +} + +/** + * Append a markdown block to GITHUB_STEP_SUMMARY (when defined). + * @param {string} markdown + */ +function appendStepSummary(markdown) { + const summaryFile = process.env.GITHUB_STEP_SUMMARY; + if (summaryFile) { + appendFileSync(summaryFile, `${markdown}\n`); + } +} + +/** + * Extract and from a csproj file. + * @param {string} csprojPath + * @returns {{ version: string, packageId: string }} + */ +export function readCsprojInfo(csprojPath) { + const content = readFileSync(csprojPath, 'utf-8'); + + const versionMatch = content.match(/([^<]+)<\/Version>/); + if (!versionMatch) { + throw new Error(`Could not parse from ${csprojPath}`); + } + + const packageIdMatch = content.match(/([^<]+)<\/PackageId>/); + // PackageId falls back to the AssemblyName/csproj file name when omitted — + // expose the explicit value to the caller, otherwise the workflow will + // resolve via msbuild like it already does for the publish step. + return { + version: versionMatch[1].trim(), + packageId: packageIdMatch ? packageIdMatch[1].trim() : '', + }; +} + +/** + * Probe `https://api.nuget.org/v3-flatcontainer/{id-lower}/index.json` for the + * package's published versions. + * + * Returns null when the package id is not registered on NuGet at all (HTTP 404 + * for the index endpoint). Returns an empty array if the registration exists + * but the index has no versions (extremely rare). Otherwise returns the + * declared version list. + * + * @param {string} packageId + * @param {typeof fetch} fetchImpl + * @returns {Promise} + */ +export async function fetchNugetVersions(packageId, fetchImpl = fetch) { + const baseUrl = process.env.NUGET_INDEX_URL ?? NUGET_FLAT_CONTAINER; + const url = `${baseUrl}/${packageId.toLowerCase()}/index.json`; + console.log(`Fetching ${url}`); + + const response = await fetchImpl(url); + if (response.status === 404) { + return null; + } + if (!response.ok) { + throw new Error( + `NuGet flat-container index returned HTTP ${response.status} for ${packageId}` + ); + } + const payload = await response.json(); + return Array.isArray(payload.versions) ? payload.versions : []; +} + +/** + * Probe `GET /repos/{owner}/{repo}/releases/tags/{tag}` to see if a matching + * GitHub release already exists. + * + * @param {string} repository owner/repo + * @param {string} tag full tag, e.g. csharp_v2.4.0 + * @param {typeof fetch} fetchImpl + * @returns {Promise} + */ +export async function fetchGithubReleaseExists( + repository, + tag, + fetchImpl = fetch +) { + if (!repository) { + return false; + } + const baseUrl = process.env.GITHUB_API_URL ?? GITHUB_API; + const url = `${baseUrl}/repos/${repository}/releases/tags/${encodeURIComponent(tag)}`; + console.log(`Fetching ${url}`); + + const headers = { Accept: 'application/vnd.github+json' }; + if (process.env.GH_TOKEN) { + headers.Authorization = `Bearer ${process.env.GH_TOKEN}`; + } else if (process.env.GITHUB_TOKEN) { + headers.Authorization = `Bearer ${process.env.GITHUB_TOKEN}`; + } + + const response = await fetchImpl(url, { headers }); + if (response.status === 404) { + return false; + } + if (!response.ok) { + throw new Error(`GitHub releases endpoint returned HTTP ${response.status}`); + } + return true; +} + +/** + * @typedef {object} CheckResult + * @property {boolean} shouldRelease + * @property {boolean} skipBump + * @property {string} currentVersion + * @property {boolean} nugetPublished + * @property {boolean} githubReleaseExists + * @property {string} reason + */ + +/** + * Pure decision function — exported for unit tests. + * @param {object} input + * @param {boolean} input.hasChangesets + * @param {string} input.currentVersion + * @param {string[] | null} input.publishedVersions + * `null` when the package id is not registered on NuGet at all. + * @param {boolean} input.githubReleaseExists + * @returns {CheckResult} + */ +export function decide({ + hasChangesets, + currentVersion, + publishedVersions, + githubReleaseExists, +}) { + const nugetPublished = + Array.isArray(publishedVersions) && publishedVersions.includes(currentVersion); + + if (hasChangesets) { + return { + shouldRelease: true, + skipBump: false, + currentVersion, + nugetPublished, + githubReleaseExists, + reason: 'changesets present — normal release path', + }; + } + + if (!nugetPublished) { + return { + shouldRelease: true, + skipBump: true, + currentVersion, + nugetPublished, + githubReleaseExists, + reason: + publishedVersions === null + ? `package not yet registered on NuGet — self-healing resume for v${currentVersion}` + : `v${currentVersion} not yet published on NuGet — self-healing resume`, + }; + } + + if (!githubReleaseExists) { + return { + shouldRelease: true, + skipBump: true, + currentVersion, + nugetPublished, + githubReleaseExists, + reason: `v${currentVersion} on NuGet but no GitHub release — self-healing release creation`, + }; + } + + return { + shouldRelease: false, + skipBump: false, + currentVersion, + nugetPublished, + githubReleaseExists, + reason: `v${currentVersion} already on NuGet and GitHub — no release needed`, + }; +} + +async function main() { + const csprojPath = getArg('csproj') || 'src/MyPackage/MyPackage.csproj'; + const repository = getArg('repository') || process.env.GITHUB_REPOSITORY || ''; + const tagPrefix = getArg('tag-prefix') || 'csharp_v'; + const packageIdOverride = getArg('package-id') || ''; + + const csproj = readCsprojInfo(csprojPath); + const packageId = packageIdOverride || csproj.packageId || 'MyPackage'; + const currentVersion = csproj.version; + + console.log(`csproj path: ${csprojPath}`); + console.log(`Package id: ${packageId}`); + console.log(`Current version: ${currentVersion}`); + console.log(`Repository: ${repository || '(not set)'}`); + console.log(`Has changesets: ${process.env.HAS_CHANGESETS === 'true'}`); + + const publishedVersions = await fetchNugetVersions(packageId); + if (publishedVersions === null) { + console.log(`NuGet: package "${packageId}" not registered yet`); + } else { + console.log(`NuGet: ${publishedVersions.length} version(s) registered`); + console.log(`NuGet versions: ${publishedVersions.join(', ')}`); + } + + const tag = `${tagPrefix}${currentVersion}`; + const githubReleaseExists = await fetchGithubReleaseExists(repository, tag); + console.log(`GitHub release ${tag}: ${githubReleaseExists ? 'exists' : 'missing'}`); + + const decision = decide({ + hasChangesets: process.env.HAS_CHANGESETS === 'true', + currentVersion, + publishedVersions, + githubReleaseExists, + }); + + console.log(`Decision: ${decision.reason}`); + + setOutput('should_release', decision.shouldRelease ? 'true' : 'false'); + setOutput('skip_bump', decision.skipBump ? 'true' : 'false'); + setOutput('current_version', decision.currentVersion); + setOutput('nuget_published', decision.nugetPublished ? 'true' : 'false'); + setOutput( + 'github_release_exists', + decision.githubReleaseExists ? 'true' : 'false' + ); + setOutput('reason', decision.reason); + + appendStepSummary( + `### C# release decision\n\n` + + `- Package: \`${packageId}\`\n` + + `- csproj \`\`: \`${currentVersion}\`\n` + + `- On NuGet: ${decision.nugetPublished ? 'yes' : 'no'}\n` + + `- GitHub release \`${tag}\`: ${decision.githubReleaseExists ? 'exists' : 'missing'}\n` + + `- \`should_release\`: \`${decision.shouldRelease}\`\n` + + `- \`skip_bump\`: \`${decision.skipBump}\`\n` + + `- Reason: ${decision.reason}\n` + ); +} + +// Allow `import { decide, readCsprojInfo, ... }` without running main(). +const entryPath = process.argv[1]; +const invokedDirectly = + typeof entryPath === 'string' && + entryPath.length > 0 && + (import.meta.url === `file://${entryPath}` || + import.meta.url.endsWith(entryPath)); +if (invokedDirectly) { + main().catch((error) => { + console.error('Error:', error.message); + process.exit(1); + }); +} diff --git a/docs/case-studies/issue-86/templates/csharp-ai-driven-development-pipeline-template/file-tree.txt b/docs/case-studies/issue-86/templates/csharp-ai-driven-development-pipeline-template/file-tree.txt new file mode 100644 index 0000000..c23a50a --- /dev/null +++ b/docs/case-studies/issue-86/templates/csharp-ai-driven-development-pipeline-template/file-tree.txt @@ -0,0 +1,43 @@ +.changeset +.changeset/README.md +.changeset/config.json +.editorconfig +.github +.github/workflows +.github/workflows/release.yml +.gitignore +.gitkeep +.pre-commit-config.yaml +CHANGELOG.md +CONTRIBUTING.md +Directory.Build.props +LICENSE +MyPackage.sln +README.md +examples +examples/BasicUsage.cs +examples/BasicUsage.csproj +experiments +experiments/reproduce-bug.sh +scripts +scripts/bump-version.mjs +scripts/check-file-size.mjs +scripts/check-release-needed.mjs +scripts/check-release-needed.test.mjs +scripts/create-github-release.mjs +scripts/create-github-release.test.mjs +scripts/detect-code-changes.mjs +scripts/merge-changesets.mjs +scripts/validate-changeset.mjs +scripts/version-and-commit.mjs +scripts/version-and-commit.test.mjs +src +src/MyPackage +src/MyPackage/Calculator.cs +src/MyPackage/MyPackage.csproj +src/MyPackage/PackageInfo.cs +tests +tests/MyPackage.Tests +tests/MyPackage.Tests/CalculatorTests.cs +tests/MyPackage.Tests/MyPackage.Tests.csproj +tests/MyPackage.Tests/PackageInfoTests.cs diff --git a/docs/case-studies/issue-86/templates/csharp-ai-driven-development-pipeline-template/release.yml b/docs/case-studies/issue-86/templates/csharp-ai-driven-development-pipeline-template/release.yml new file mode 100644 index 0000000..5e87831 --- /dev/null +++ b/docs/case-studies/issue-86/templates/csharp-ai-driven-development-pipeline-template/release.yml @@ -0,0 +1,580 @@ +name: CI/CD Pipeline + +on: + push: + branches: + - main + pull_request: + types: [opened, synchronize, reopened] + workflow_dispatch: + inputs: + release_mode: + description: 'Release mode' + required: true + type: choice + default: 'instant' + options: + - instant + - changeset-pr + bump_type: + description: 'Version bump type' + required: true + type: choice + options: + - patch + - minor + - major + description: + description: 'Release description (optional)' + required: false + type: string + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +env: + DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true + DOTNET_CLI_TELEMETRY_OPTOUT: true + DOTNET_NOLOGO: true + +jobs: + # === DETECT CHANGES - determines which jobs should run === + detect-changes: + name: Detect Changes + runs-on: ubuntu-latest + if: github.event_name != 'workflow_dispatch' + outputs: + cs-changed: ${{ steps.changes.outputs.cs-changed }} + csproj-changed: ${{ steps.changes.outputs.csproj-changed }} + sln-changed: ${{ steps.changes.outputs.sln-changed }} + props-changed: ${{ steps.changes.outputs.props-changed }} + mjs-changed: ${{ steps.changes.outputs.mjs-changed }} + docs-changed: ${{ steps.changes.outputs.docs-changed }} + workflow-changed: ${{ steps.changes.outputs.workflow-changed }} + any-code-changed: ${{ steps.changes.outputs.any-code-changed }} + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Bun + uses: oven-sh/setup-bun@v2 + with: + bun-version: latest + + - name: Detect changes + id: changes + env: + GITHUB_EVENT_NAME: ${{ github.event_name }} + GITHUB_BASE_SHA: ${{ github.event.pull_request.base.sha }} + GITHUB_HEAD_SHA: ${{ github.event.pull_request.head.sha }} + run: bun run scripts/detect-code-changes.mjs + + # === CHANGESET CHECK - only runs on PRs with code changes === + # Docs-only PRs (./docs folder, markdown files) don't require changesets + changeset-check: + name: Changeset Validation + runs-on: ubuntu-latest + needs: [detect-changes] + if: github.event_name == 'pull_request' && needs.detect-changes.outputs.any-code-changed == 'true' + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Bun + uses: oven-sh/setup-bun@v2 + with: + bun-version: latest + + - name: Validate changeset + env: + GITHUB_BASE_REF: ${{ github.base_ref }} + GITHUB_BASE_SHA: ${{ github.event.pull_request.base.sha }} + GITHUB_HEAD_SHA: ${{ github.event.pull_request.head.sha }} + run: | + # Skip changeset check for automated release PRs + if [[ "${{ github.head_ref }}" == "changeset-release/"* ]] || [[ "${{ github.head_ref }}" == "changeset-manual-release-"* ]]; then + echo "Skipping changeset check for automated release PR" + exit 0 + fi + + # Run changeset validation script + bun run scripts/validate-changeset.mjs + + # === LINT AND FORMAT CHECK === + # Lint runs independently of changeset-check - it's a fast check that should always run + # See: https://github.com/link-foundation/js-ai-driven-development-pipeline-template/pull/18 for why this dependency was removed + lint: + name: Lint and Format Check + runs-on: ubuntu-latest + needs: [detect-changes] + if: | + github.event_name == 'push' || + github.event_name == 'workflow_dispatch' || + needs.detect-changes.outputs.cs-changed == 'true' || + needs.detect-changes.outputs.csproj-changed == 'true' || + needs.detect-changes.outputs.sln-changed == 'true' || + needs.detect-changes.outputs.props-changed == 'true' || + needs.detect-changes.outputs.mjs-changed == 'true' || + needs.detect-changes.outputs.docs-changed == 'true' || + needs.detect-changes.outputs.workflow-changed == 'true' + steps: + - uses: actions/checkout@v4 + + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: '8.0.x' + + - name: Setup Bun + uses: oven-sh/setup-bun@v2 + with: + bun-version: latest + + - name: Restore dependencies + run: dotnet restore + + - name: Check formatting + run: dotnet format --verify-no-changes --verbosity diagnostic + + - name: Build with warnings as errors + run: dotnet build --no-restore --configuration Release /warnaserror + + - name: Run script tests + run: bun test scripts/*.test.mjs + + - name: Check file size limit + run: bun run scripts/check-file-size.mjs + + # === TEST ON MULTIPLE OS === + test: + name: Test (${{ matrix.os }}) + runs-on: ${{ matrix.os }} + needs: [detect-changes, changeset-check] + # Run if: push event, workflow_dispatch, OR changeset-check succeeded, OR changeset-check was skipped (docs-only PR) + if: always() && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || needs.changeset-check.result == 'success' || needs.changeset-check.result == 'skipped') + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, macos-latest, windows-latest] + steps: + - uses: actions/checkout@v4 + + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: '8.0.x' + + - name: Restore dependencies + run: dotnet restore + + - name: Build + run: dotnet build --no-restore --configuration Release + + - name: Run tests + run: dotnet test --no-build --configuration Release --verbosity normal --collect:"XPlat Code Coverage" + + - name: Upload coverage to Codecov + if: matrix.os == 'ubuntu-latest' + uses: codecov/codecov-action@v4 + with: + fail_ci_if_error: false + + # === BUILD PACKAGE === + # Only runs if lint and test pass + build: + name: Build Package + runs-on: ubuntu-latest + needs: [lint, test] + if: always() && needs.lint.result == 'success' && needs.test.result == 'success' + steps: + - uses: actions/checkout@v4 + + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: '8.0.x' + + - name: Restore dependencies + run: dotnet restore + + - name: Build Release + run: dotnet build --no-restore --configuration Release + + - name: Pack NuGet package + run: dotnet pack --no-build --configuration Release --output ./artifacts + + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: nuget-package + path: ./artifacts/*.nupkg + + # === AUTOMATIC RELEASE === + # Runs on push to main using changesets + release: + name: Release + needs: [lint, test, build] + if: always() && github.ref == 'refs/heads/main' && github.event_name == 'push' && needs.lint.result == 'success' && needs.test.result == 'success' && needs.build.result == 'success' + runs-on: ubuntu-latest + permissions: + contents: write + packages: write + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: '8.0.x' + + - name: Setup Bun + uses: oven-sh/setup-bun@v2 + with: + bun-version: latest + + - name: Check for changesets + id: check_changesets + run: | + # Count changeset files (excluding README.md and config.json) + CHANGESET_COUNT=$(find .changeset -name "*.md" ! -name "README.md" 2>/dev/null | wc -l) + echo "Found $CHANGESET_COUNT changeset file(s)" + echo "has_changesets=$([[ $CHANGESET_COUNT -gt 0 ]] && echo 'true' || echo 'false')" >> $GITHUB_OUTPUT + echo "changeset_count=$CHANGESET_COUNT" >> $GITHUB_OUTPUT + + - name: Check if release is needed + # Self-healing gate: even when a changeset is absent, resume publishing + # if the csproj is missing on NuGet or its GitHub release does + # not exist. See issue #11 and the JS template's check-release-needed.mjs + # for the same pattern. + id: check_release + env: + HAS_CHANGESETS: ${{ steps.check_changesets.outputs.has_changesets }} + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_REPOSITORY: ${{ github.repository }} + run: bun run scripts/check-release-needed.mjs + + - name: Merge multiple changesets + if: steps.check_changesets.outputs.has_changesets == 'true' && steps.check_changesets.outputs.changeset_count > 1 + run: | + echo "Multiple changesets detected, merging..." + bun run scripts/merge-changesets.mjs + + - name: Version and commit + if: steps.check_changesets.outputs.has_changesets == 'true' + id: version + run: bun run scripts/version-and-commit.mjs --mode changeset + + - name: Resolve release version + # Picks the version that downstream steps should publish. Prefers the + # one just committed; falls back to the csproj reported by + # check-release-needed for self-healing re-runs. + id: release_version + if: >- + steps.version.outputs.version_committed == 'true' || + steps.version.outputs.already_released == 'true' || + (steps.check_release.outputs.should_release == 'true' && + steps.check_release.outputs.skip_bump == 'true') + run: | + if [ -n "${{ steps.version.outputs.new_version }}" ]; then + VERSION="${{ steps.version.outputs.new_version }}" + else + VERSION="${{ steps.check_release.outputs.current_version }}" + fi + echo "version=$VERSION" >> "$GITHUB_OUTPUT" + echo "Releasing version: $VERSION" + + - name: Build release package + if: >- + steps.version.outputs.version_committed == 'true' || + steps.version.outputs.already_released == 'true' || + (steps.check_release.outputs.should_release == 'true' && + steps.check_release.outputs.skip_bump == 'true') + run: | + dotnet restore + dotnet build --configuration Release + dotnet pack --no-build --configuration Release --output ./artifacts + + - name: Resolve NuGet package id + id: package + if: >- + steps.version.outputs.version_committed == 'true' || + steps.version.outputs.already_released == 'true' || + (steps.check_release.outputs.should_release == 'true' && + steps.check_release.outputs.skip_bump == 'true') + run: | + PACKAGE_ID=$(dotnet msbuild src/MyPackage/MyPackage.csproj -getProperty:PackageId | tail -n 1 | tr -d '\r') + if [ -z "$PACKAGE_ID" ]; then + PACKAGE_ID=$(dotnet msbuild src/MyPackage/MyPackage.csproj -getProperty:AssemblyName | tail -n 1 | tr -d '\r') + fi + if [ -z "$PACKAGE_ID" ]; then + PACKAGE_ID="MyPackage" + fi + PACKAGE_ID_LOWER=$(echo "$PACKAGE_ID" | tr '[:upper:]' '[:lower:]') + echo "id=$PACKAGE_ID" >> "$GITHUB_OUTPUT" + echo "flat_container_id=$PACKAGE_ID_LOWER" >> "$GITHUB_OUTPUT" + + - name: Validate NuGet API key + # Upfront validation surfaces an expired/invalid NUGET_API_KEY before + # we attempt a push that would otherwise return HTTP 403 mid-flight. + if: >- + steps.version.outputs.version_committed == 'true' || + steps.version.outputs.already_released == 'true' || + (steps.check_release.outputs.should_release == 'true' && + steps.check_release.outputs.skip_bump == 'true') + env: + NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }} + run: | + if [ -z "$NUGET_API_KEY" ]; then + echo "::warning::NUGET_API_KEY is not configured — NuGet publish will be skipped." + exit 0 + fi + echo "NUGET_API_KEY length: ${#NUGET_API_KEY}" + + - name: Publish to NuGet + id: nuget_publish + if: >- + steps.version.outputs.version_committed == 'true' || + steps.version.outputs.already_released == 'true' || + (steps.check_release.outputs.should_release == 'true' && + steps.check_release.outputs.skip_bump == 'true') + env: + NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }} + run: | + if [ -n "$NUGET_API_KEY" ]; then + dotnet nuget push ./artifacts/*.nupkg --api-key "$NUGET_API_KEY" --source https://api.nuget.org/v3/index.json --skip-duplicate + echo "published=true" >> "$GITHUB_OUTPUT" + else + echo "NUGET_API_KEY not set, skipping NuGet publish" + echo "published=false" >> "$GITHUB_OUTPUT" + fi + + - name: Verify package on NuGet + if: >- + steps.nuget_publish.outputs.published == 'true' && ( + steps.version.outputs.version_committed == 'true' || + steps.version.outputs.already_released == 'true' || + (steps.check_release.outputs.should_release == 'true' && + steps.check_release.outputs.skip_bump == 'true')) + run: | + PACKAGE_ID="${{ steps.package.outputs.id }}" + PACKAGE_ID_LOWER="${{ steps.package.outputs.flat_container_id }}" + VERSION="${{ steps.release_version.outputs.version }}" + for DELAY in 0 5 10 20 30 60; do + if [ "$DELAY" != "0" ]; then + sleep "$DELAY" + fi + STATUS=$(curl -sS -o /dev/null -w '%{http_code}' "https://api.nuget.org/v3-flatcontainer/${PACKAGE_ID_LOWER}/${VERSION}/${PACKAGE_ID_LOWER}.nuspec" || true) + echo "NuGet status for ${PACKAGE_ID}@${VERSION}: ${STATUS}" + if [ "$STATUS" = "200" ]; then + echo "Verified ${PACKAGE_ID}@${VERSION} is available on NuGet" + exit 0 + fi + done + echo "::error title=NuGet verification failed::${PACKAGE_ID}@${VERSION} was not available from NuGet after publish." + exit 1 + + - name: Create GitHub Release + if: >- + steps.version.outputs.version_committed == 'true' || + steps.version.outputs.already_released == 'true' || + (steps.check_release.outputs.should_release == 'true' && + steps.check_release.outputs.skip_bump == 'true') + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + bun run scripts/create-github-release.mjs \ + --release-version "${{ steps.release_version.outputs.version }}" \ + --repository "${{ github.repository }}" \ + --tag-prefix "csharp_v" \ + --language "C#" \ + --package-id "${{ steps.package.outputs.id }}" \ + --assets-glob "./artifacts/*.nupkg" + + # === MANUAL INSTANT RELEASE === + # Triggered via workflow_dispatch with instant mode + instant-release: + name: Instant Release + needs: [lint, test, build] + if: github.event_name == 'workflow_dispatch' && github.event.inputs.release_mode == 'instant' && needs.lint.result == 'success' && needs.test.result == 'success' && needs.build.result == 'success' + runs-on: ubuntu-latest + permissions: + contents: write + packages: write + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + token: ${{ secrets.GITHUB_TOKEN }} + + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: '8.0.x' + + - name: Setup Bun + uses: oven-sh/setup-bun@v2 + with: + bun-version: latest + + - name: Version and commit + id: version + run: | + bun run scripts/version-and-commit.mjs \ + --mode instant \ + --bump-type "${{ github.event.inputs.bump_type }}" \ + --description "${{ github.event.inputs.description }}" + + - name: Build package + if: >- + steps.version.outputs.version_committed == 'true' || + steps.version.outputs.already_released == 'true' + run: | + dotnet restore + dotnet build --configuration Release + dotnet pack --no-build --configuration Release --output ./artifacts + + - name: Resolve NuGet package id + if: >- + steps.version.outputs.version_committed == 'true' || + steps.version.outputs.already_released == 'true' + id: package + run: | + PACKAGE_ID=$(dotnet msbuild src/MyPackage/MyPackage.csproj -getProperty:PackageId | tail -n 1 | tr -d '\r') + if [ -z "$PACKAGE_ID" ]; then + PACKAGE_ID=$(dotnet msbuild src/MyPackage/MyPackage.csproj -getProperty:AssemblyName | tail -n 1 | tr -d '\r') + fi + if [ -z "$PACKAGE_ID" ]; then + PACKAGE_ID="MyPackage" + fi + PACKAGE_ID_LOWER=$(echo "$PACKAGE_ID" | tr '[:upper:]' '[:lower:]') + echo "id=$PACKAGE_ID" >> "$GITHUB_OUTPUT" + echo "flat_container_id=$PACKAGE_ID_LOWER" >> "$GITHUB_OUTPUT" + + - name: Validate NuGet API key + if: >- + steps.version.outputs.version_committed == 'true' || + steps.version.outputs.already_released == 'true' + env: + NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }} + run: | + if [ -z "$NUGET_API_KEY" ]; then + echo "::warning::NUGET_API_KEY is not configured — NuGet publish will be skipped." + exit 0 + fi + echo "NUGET_API_KEY length: ${#NUGET_API_KEY}" + + - name: Publish to NuGet + id: nuget_publish + if: >- + steps.version.outputs.version_committed == 'true' || + steps.version.outputs.already_released == 'true' + env: + NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }} + run: | + if [ -n "$NUGET_API_KEY" ]; then + dotnet nuget push ./artifacts/*.nupkg --api-key "$NUGET_API_KEY" --source https://api.nuget.org/v3/index.json --skip-duplicate + echo "published=true" >> "$GITHUB_OUTPUT" + else + echo "NUGET_API_KEY not set, skipping NuGet publish" + echo "published=false" >> "$GITHUB_OUTPUT" + fi + + - name: Verify package on NuGet + if: >- + steps.nuget_publish.outputs.published == 'true' && ( + steps.version.outputs.version_committed == 'true' || + steps.version.outputs.already_released == 'true') + run: | + PACKAGE_ID="${{ steps.package.outputs.id }}" + PACKAGE_ID_LOWER="${{ steps.package.outputs.flat_container_id }}" + VERSION="${{ steps.version.outputs.new_version }}" + for DELAY in 0 5 10 20 30 60; do + if [ "$DELAY" != "0" ]; then + sleep "$DELAY" + fi + STATUS=$(curl -sS -o /dev/null -w '%{http_code}' "https://api.nuget.org/v3-flatcontainer/${PACKAGE_ID_LOWER}/${VERSION}/${PACKAGE_ID_LOWER}.nuspec" || true) + echo "NuGet status for ${PACKAGE_ID}@${VERSION}: ${STATUS}" + if [ "$STATUS" = "200" ]; then + echo "Verified ${PACKAGE_ID}@${VERSION} is available on NuGet" + exit 0 + fi + done + echo "::error title=NuGet verification failed::${PACKAGE_ID}@${VERSION} was not available from NuGet after publish." + exit 1 + + - name: Create GitHub Release + if: >- + steps.version.outputs.version_committed == 'true' || + steps.version.outputs.already_released == 'true' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + bun run scripts/create-github-release.mjs \ + --release-version "${{ steps.version.outputs.new_version }}" \ + --repository "${{ github.repository }}" \ + --tag-prefix "csharp_v" \ + --language "C#" \ + --package-id "${{ steps.package.outputs.id }}" \ + --assets-glob "./artifacts/*.nupkg" + + # === MANUAL CHANGESET PR === + # Creates a pull request with the changeset for review + changeset-pr: + name: Create Changeset PR + if: github.event_name == 'workflow_dispatch' && github.event.inputs.release_mode == 'changeset-pr' + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Bun + uses: oven-sh/setup-bun@v2 + with: + bun-version: latest + + - name: Create changeset file + run: | + CHANGESET_ID=$(date +%s) + CHANGESET_FILE=".changeset/manual-release-${CHANGESET_ID}.md" + + cat > "$CHANGESET_FILE" << 'EOF' + --- + 'MyPackage': ${{ github.event.inputs.bump_type }} + --- + + ${{ github.event.inputs.description || 'Manual release' }} + EOF + + echo "Created changeset: $CHANGESET_FILE" + + - name: Create Pull Request + uses: peter-evans/create-pull-request@v7 + with: + token: ${{ secrets.GITHUB_TOKEN }} + commit-message: 'chore: add changeset for manual ${{ github.event.inputs.bump_type }} release' + branch: changeset-manual-release-${{ github.run_id }} + delete-branch: true + title: 'chore: manual ${{ github.event.inputs.bump_type }} release' + body: | + ## Manual Release Request + + This PR was created by a manual workflow trigger to prepare a **${{ github.event.inputs.bump_type }}** release. + + ### Release Details + - **Type:** ${{ github.event.inputs.bump_type }} + - **Description:** ${{ github.event.inputs.description || 'Manual release' }} + - **Triggered by:** @${{ github.actor }} + + ### Next Steps + 1. Review the changeset in this PR + 2. Merge this PR to main + 3. The automated release workflow will version, publish, and create a GitHub release diff --git a/docs/case-studies/issue-86/templates/csharp-ai-driven-development-pipeline-template/tree.json b/docs/case-studies/issue-86/templates/csharp-ai-driven-development-pipeline-template/tree.json new file mode 100644 index 0000000..3963675 --- /dev/null +++ b/docs/case-studies/issue-86/templates/csharp-ai-driven-development-pipeline-template/tree.json @@ -0,0 +1 @@ +{"sha":"5918b5e8e307ea4db68b9a27cd7e5925b860f36e","url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/trees/5918b5e8e307ea4db68b9a27cd7e5925b860f36e","tree":[{"path":".changeset","mode":"040000","type":"tree","sha":"37317142a159b7a5977f6b2e3566494088233ed9","url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/trees/37317142a159b7a5977f6b2e3566494088233ed9"},{"path":".changeset/README.md","mode":"100644","type":"blob","sha":"eeb0abf2bbbd555e5b5dd0f20cf1f8ca61c51fcf","size":1684,"url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/blobs/eeb0abf2bbbd555e5b5dd0f20cf1f8ca61c51fcf"},{"path":".changeset/config.json","mode":"100644","type":"blob","sha":"1f3c3b4554affbfe359ec682c0438384276ef06b","size":249,"url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/blobs/1f3c3b4554affbfe359ec682c0438384276ef06b"},{"path":".editorconfig","mode":"100644","type":"blob","sha":"003e409ef2bc5c502b0977cc98ce80793341d5d0","size":9714,"url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/blobs/003e409ef2bc5c502b0977cc98ce80793341d5d0"},{"path":".github","mode":"040000","type":"tree","sha":"fba8adc158949c9c971f96bbace4870a57189c03","url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/trees/fba8adc158949c9c971f96bbace4870a57189c03"},{"path":".github/workflows","mode":"040000","type":"tree","sha":"6ef260726fa9a12cd97f906aaa001a82598894a8","url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/trees/6ef260726fa9a12cd97f906aaa001a82598894a8"},{"path":".github/workflows/release.yml","mode":"100644","type":"blob","sha":"5e87831855b283ae93fe07d53f6587997166e692","size":22003,"url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/blobs/5e87831855b283ae93fe07d53f6587997166e692"},{"path":".gitignore","mode":"100644","type":"blob","sha":"e6e61d0337870308198cf5917360485ad1264cae","size":1184,"url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/blobs/e6e61d0337870308198cf5917360485ad1264cae"},{"path":".gitkeep","mode":"100644","type":"blob","sha":"0b77c2b4375f374320ee31a7c007940f6daaad03","size":208,"url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/blobs/0b77c2b4375f374320ee31a7c007940f6daaad03"},{"path":".pre-commit-config.yaml","mode":"100644","type":"blob","sha":"6a627f4dc5d7dd7702b36348e19348112af13287","size":890,"url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/blobs/6a627f4dc5d7dd7702b36348e19348112af13287"},{"path":"CHANGELOG.md","mode":"100644","type":"blob","sha":"08354fa7f086a9a676d7109824a65bb0c5abfbfc","size":2321,"url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/blobs/08354fa7f086a9a676d7109824a65bb0c5abfbfc"},{"path":"CONTRIBUTING.md","mode":"100644","type":"blob","sha":"816c4bfea8b21f306c8c3e98037b2920ce04f924","size":8407,"url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/blobs/816c4bfea8b21f306c8c3e98037b2920ce04f924"},{"path":"Directory.Build.props","mode":"100644","type":"blob","sha":"54cdb4e9590e471ec90d854f37ff20c316df63ab","size":551,"url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/blobs/54cdb4e9590e471ec90d854f37ff20c316df63ab"},{"path":"LICENSE","mode":"100644","type":"blob","sha":"fdddb29aa445bf3d6a5d843d6dd77e10a9f99657","size":1211,"url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/blobs/fdddb29aa445bf3d6a5d843d6dd77e10a9f99657"},{"path":"MyPackage.sln","mode":"100644","type":"blob","sha":"5fc5c6ad807e4c72132ba25f436d450d8adf4885","size":1480,"url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/blobs/5fc5c6ad807e4c72132ba25f436d450d8adf4885"},{"path":"README.md","mode":"100644","type":"blob","sha":"f59d6b7bcecce2a9e6113dc92c97da36a3bbb6c9","size":10267,"url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/blobs/f59d6b7bcecce2a9e6113dc92c97da36a3bbb6c9"},{"path":"examples","mode":"040000","type":"tree","sha":"ff372b916db3b953ea03011f9e2f640b32065f97","url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/trees/ff372b916db3b953ea03011f9e2f640b32065f97"},{"path":"examples/BasicUsage.cs","mode":"100644","type":"blob","sha":"3f92ab4c44deadf133d36fe854bd154abb3fd17d","size":1328,"url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/blobs/3f92ab4c44deadf133d36fe854bd154abb3fd17d"},{"path":"examples/BasicUsage.csproj","mode":"100644","type":"blob","sha":"68665ca0e2eb40274c10bced10b05dbaa368474a","size":376,"url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/blobs/68665ca0e2eb40274c10bced10b05dbaa368474a"},{"path":"experiments","mode":"040000","type":"tree","sha":"e79a4fa2abac786ce074d9f40d4a6b760ebfea6f","url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/trees/e79a4fa2abac786ce074d9f40d4a6b760ebfea6f"},{"path":"experiments/reproduce-bug.sh","mode":"100755","type":"blob","sha":"30bb301dc5d34565407552785488c49225a5e7eb","size":1953,"url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/blobs/30bb301dc5d34565407552785488c49225a5e7eb"},{"path":"scripts","mode":"040000","type":"tree","sha":"132ac9d1d75f43559b1b5fa3128ed505ffbfb3a7","url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/trees/132ac9d1d75f43559b1b5fa3128ed505ffbfb3a7"},{"path":"scripts/bump-version.mjs","mode":"100644","type":"blob","sha":"8a983af2ee4bcdda4f6e8b3110e3783d04a550c7","size":2618,"url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/blobs/8a983af2ee4bcdda4f6e8b3110e3783d04a550c7"},{"path":"scripts/check-file-size.mjs","mode":"100644","type":"blob","sha":"b3a2f02e499ef03bad86a8a0879775592ef4e3cc","size":2361,"url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/blobs/b3a2f02e499ef03bad86a8a0879775592ef4e3cc"},{"path":"scripts/check-release-needed.mjs","mode":"100644","type":"blob","sha":"f34f06d86ce95f923dcb103c487a0f0812ee1f1c","size":11333,"url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/blobs/f34f06d86ce95f923dcb103c487a0f0812ee1f1c"},{"path":"scripts/check-release-needed.test.mjs","mode":"100644","type":"blob","sha":"9a2edadce71f16f09acc31820991e1a1880f2f84","size":11900,"url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/blobs/9a2edadce71f16f09acc31820991e1a1880f2f84"},{"path":"scripts/create-github-release.mjs","mode":"100644","type":"blob","sha":"75a90d3609fcc1684383fb6caa6643f3dee84c1f","size":13248,"url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/blobs/75a90d3609fcc1684383fb6caa6643f3dee84c1f"},{"path":"scripts/create-github-release.test.mjs","mode":"100644","type":"blob","sha":"ce553fb04ac585eaefd8ff24cc9ba29165d8fe1f","size":7228,"url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/blobs/ce553fb04ac585eaefd8ff24cc9ba29165d8fe1f"},{"path":"scripts/detect-code-changes.mjs","mode":"100644","type":"blob","sha":"fe3a8a7bf46647e316c41deac7606c2eb4e3f627","size":6932,"url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/blobs/fe3a8a7bf46647e316c41deac7606c2eb4e3f627"},{"path":"scripts/merge-changesets.mjs","mode":"100644","type":"blob","sha":"c6476c2a694dc71479fa469fe60e1c249810a913","size":6404,"url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/blobs/c6476c2a694dc71479fa469fe60e1c249810a913"},{"path":"scripts/validate-changeset.mjs","mode":"100644","type":"blob","sha":"1d3f484719a393525c5114dc49d9ac11ff3ce243","size":8229,"url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/blobs/1d3f484719a393525c5114dc49d9ac11ff3ce243"},{"path":"scripts/version-and-commit.mjs","mode":"100644","type":"blob","sha":"5e2885e06beddccbd54238b4b479e2bb032c89f5","size":11043,"url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/blobs/5e2885e06beddccbd54238b4b479e2bb032c89f5"},{"path":"scripts/version-and-commit.test.mjs","mode":"100644","type":"blob","sha":"cd681e5ea575b9d781e4ebba60ed9379208ee6c7","size":4897,"url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/blobs/cd681e5ea575b9d781e4ebba60ed9379208ee6c7"},{"path":"src","mode":"040000","type":"tree","sha":"1c9733a35162157c28d1cf5cf1a628d0bec83f22","url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/trees/1c9733a35162157c28d1cf5cf1a628d0bec83f22"},{"path":"src/MyPackage","mode":"040000","type":"tree","sha":"232e37e1f96673c0541020c61235922de0ddefbf","url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/trees/232e37e1f96673c0541020c61235922de0ddefbf"},{"path":"src/MyPackage/Calculator.cs","mode":"100644","type":"blob","sha":"1a8a00ba9f09221f40b766c06f2e8ac0084a58b4","size":1811,"url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/blobs/1a8a00ba9f09221f40b766c06f2e8ac0084a58b4"},{"path":"src/MyPackage/MyPackage.csproj","mode":"100644","type":"blob","sha":"f004bd61d38460e3cbf0110f00e88e82d0d5479b","size":1293,"url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/blobs/f004bd61d38460e3cbf0110f00e88e82d0d5479b"},{"path":"src/MyPackage/PackageInfo.cs","mode":"100644","type":"blob","sha":"1382fc2e788cdb10c4f7df2f867a359110e41385","size":455,"url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/blobs/1382fc2e788cdb10c4f7df2f867a359110e41385"},{"path":"tests","mode":"040000","type":"tree","sha":"05ce34aa858458d7a880812a7467b7c095fb7296","url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/trees/05ce34aa858458d7a880812a7467b7c095fb7296"},{"path":"tests/MyPackage.Tests","mode":"040000","type":"tree","sha":"e481628485ba6ef0f64ecc3161135a3193fbb3e5","url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/trees/e481628485ba6ef0f64ecc3161135a3193fbb3e5"},{"path":"tests/MyPackage.Tests/CalculatorTests.cs","mode":"100644","type":"blob","sha":"bd5eab0a4178c858eacebd27fca0f9172703a02c","size":3812,"url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/blobs/bd5eab0a4178c858eacebd27fca0f9172703a02c"},{"path":"tests/MyPackage.Tests/MyPackage.Tests.csproj","mode":"100644","type":"blob","sha":"f581f60a1b17a1c5cf0f8a91867c86130dab02eb","size":1863,"url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/blobs/f581f60a1b17a1c5cf0f8a91867c86130dab02eb"},{"path":"tests/MyPackage.Tests/PackageInfoTests.cs","mode":"100644","type":"blob","sha":"38a7f1c9a1bb58b86c68aa6e26ab8b079d531c6b","size":507,"url":"https://api.github.com/repos/link-foundation/csharp-ai-driven-development-pipeline-template/git/blobs/38a7f1c9a1bb58b86c68aa6e26ab8b079d531c6b"}],"truncated":false} \ No newline at end of file diff --git a/docs/case-studies/issue-86/templates/csharp-ai-driven-development-pipeline-template/version-and-commit.mjs b/docs/case-studies/issue-86/templates/csharp-ai-driven-development-pipeline-template/version-and-commit.mjs new file mode 100644 index 0000000..5e2885e --- /dev/null +++ b/docs/case-studies/issue-86/templates/csharp-ai-driven-development-pipeline-template/version-and-commit.mjs @@ -0,0 +1,412 @@ +#!/usr/bin/env node + +/** + * Bump version in csproj, update changelog, and commit changes + * Used by the CI/CD pipeline for releases + * + * Usage: + * Changeset mode: bun run scripts/version-and-commit.mjs --mode changeset + * Instant mode: bun run scripts/version-and-commit.mjs --mode instant --bump-type [--description ] + */ + +import { + readFileSync, + writeFileSync, + appendFileSync, + readdirSync, + existsSync, + unlinkSync, +} from 'fs'; +import { join } from 'path'; +import { execSync } from 'child_process'; + +// Package name must match the package name in the changeset files +const PACKAGE_NAME = 'MyPackage'; +const CSPROJ_PATH = 'src/MyPackage/MyPackage.csproj'; +const CHANGESET_DIR = '.changeset'; +const CHANGELOG_FILE = 'CHANGELOG.md'; + +// Version bump type priority (higher number = higher priority) +const BUMP_PRIORITY = { + patch: 1, + minor: 2, + major: 3, +}; + +// Simple argument parsing +const args = process.argv.slice(2); +const getArg = (name) => { + const index = args.indexOf(`--${name}`); + if (index === -1) return null; + return args[index + 1] || ''; +}; + +const mode = getArg('mode') || 'instant'; +const bumpTypeArg = getArg('bump-type'); +const description = getArg('description') || ''; + +/** + * Execute a shell command + * @param {string} command + * @param {boolean} silent + * @returns {string} + */ +function exec(command, silent = false) { + return execSync(command, { + encoding: 'utf-8', + stdio: silent ? 'pipe' : 'inherit', + }); +} + +/** + * Append to GitHub Actions output file + * @param {string} key + * @param {string} value + */ +function setOutput(key, value) { + const outputFile = process.env.GITHUB_OUTPUT; + if (outputFile) { + appendFileSync(outputFile, `${key}=${value}\n`); + } + console.log(`Output: ${key}=${value}`); +} + +/** + * Get current version from csproj + * @returns {{major: number, minor: number, patch: number}} + */ +function getCurrentVersion() { + const csproj = readFileSync(CSPROJ_PATH, 'utf-8'); + const match = csproj.match(/(\d+)\.(\d+)\.(\d+)<\/Version>/); + + if (!match) { + console.error('Error: Could not parse version from csproj'); + process.exit(1); + } + + return { + major: parseInt(match[1], 10), + minor: parseInt(match[2], 10), + patch: parseInt(match[3], 10), + }; +} + +/** + * Calculate new version based on bump type + * @param {{major: number, minor: number, patch: number}} current + * @param {string} bumpType + * @returns {string} + */ +function calculateNewVersion(current, bumpType) { + const { major, minor, patch } = current; + + switch (bumpType) { + case 'major': + return `${major + 1}.0.0`; + case 'minor': + return `${major}.${minor + 1}.0`; + case 'patch': + return `${major}.${minor}.${patch + 1}`; + default: + throw new Error(`Invalid bump type: ${bumpType}`); + } +} + +/** + * Update version in csproj + * @param {string} newVersion + */ +function updateCsproj(newVersion) { + let csproj = readFileSync(CSPROJ_PATH, 'utf-8'); + csproj = csproj.replace( + /[^<]+<\/Version>/, + `${newVersion}` + ); + writeFileSync(CSPROJ_PATH, csproj, 'utf-8'); + console.log(`Updated csproj to version ${newVersion}`); +} + +/** + * Check if a git tag exists for this version + * @param {string} version + * @returns {boolean} + */ +function checkTagExists(version) { + try { + exec(`git rev-parse --verify --quiet refs/tags/v${version}`, true); + return true; + } catch { + return false; + } +} + +/** + * Parse a changeset file and extract its metadata + * @param {string} filePath + * @returns {{type: string, description: string} | null} + */ +function parseChangeset(filePath) { + try { + const content = readFileSync(filePath, 'utf-8'); + + // Extract version type - support both quoted and unquoted package names + const versionTypeRegex = new RegExp( + `^['"]?${PACKAGE_NAME.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}['"]?:\\s+(major|minor|patch)`, + 'm' + ); + const versionTypeMatch = content.match(versionTypeRegex); + + if (!versionTypeMatch) { + console.warn(`Warning: Could not parse version type from ${filePath}`); + return null; + } + + // Extract description + const parts = content.split('---'); + const desc = parts.length >= 3 ? parts.slice(2).join('---').trim() : ''; + + return { + type: versionTypeMatch[1], + description: desc, + }; + } catch (error) { + console.warn(`Warning: Failed to parse ${filePath}: ${error.message}`); + return null; + } +} + +/** + * Get the highest priority bump type + * @param {string[]} types + * @returns {string} + */ +function getHighestBumpType(types) { + let highest = 'patch'; + for (const type of types) { + if (BUMP_PRIORITY[type] > BUMP_PRIORITY[highest]) { + highest = type; + } + } + return highest; +} + +/** + * Get changeset files from .changeset directory + * @returns {string[]} + */ +function getChangesetFiles() { + if (!existsSync(CHANGESET_DIR)) { + return []; + } + return readdirSync(CHANGESET_DIR).filter( + (file) => + file.endsWith('.md') && file !== 'README.md' && file !== 'config.json' + ); +} + +/** + * Process changesets and return bump type and descriptions + * @returns {{bumpType: string, descriptions: string[]} | null} + */ +function processChangesets() { + const files = getChangesetFiles(); + + if (files.length === 0) { + console.log('No changeset files found'); + return null; + } + + console.log(`Found ${files.length} changeset file(s)`); + + const parsedChangesets = []; + for (const file of files) { + const filePath = join(CHANGESET_DIR, file); + const parsed = parseChangeset(filePath); + if (parsed) { + parsedChangesets.push({ + file, + filePath, + ...parsed, + }); + } + } + + if (parsedChangesets.length === 0) { + console.log('No valid changesets could be parsed'); + return null; + } + + const bumpTypes = parsedChangesets.map((c) => c.type); + const highestBumpType = getHighestBumpType(bumpTypes); + const descriptions = parsedChangesets + .filter((c) => c.description) + .map((c) => c.description); + + console.log(`Bump types found: ${[...new Set(bumpTypes)].join(', ')}`); + console.log(`Using highest: ${highestBumpType}`); + + return { + bumpType: highestBumpType, + descriptions, + }; +} + +/** + * Update CHANGELOG.md with new version entry + * @param {string} version + * @param {string[]} descriptions + */ +function updateChangelog(version, descriptions) { + const dateStr = new Date().toISOString().split('T')[0]; + const content = descriptions.join('\n\n'); + const newEntry = `\n## [${version}] - ${dateStr}\n\n${content}\n`; + + if (existsSync(CHANGELOG_FILE)) { + let changelog = readFileSync(CHANGELOG_FILE, 'utf-8'); + const lines = changelog.split('\n'); + let insertIndex = -1; + + // Find the first version entry + for (let i = 0; i < lines.length; i++) { + if (lines[i].startsWith('## [')) { + insertIndex = i; + break; + } + } + + if (insertIndex >= 0) { + lines.splice(insertIndex, 0, newEntry); + changelog = lines.join('\n'); + } else { + // No existing version entries, append after header + changelog += newEntry; + } + + writeFileSync(CHANGELOG_FILE, changelog, 'utf-8'); + console.log(`Updated CHANGELOG.md with version ${version}`); + } else { + // Create new changelog file + const newChangelog = `# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +${newEntry}`; + writeFileSync(CHANGELOG_FILE, newChangelog, 'utf-8'); + console.log(`Created CHANGELOG.md with version ${version}`); + } +} + +/** + * Remove processed changeset files + */ +function removeChangesetFiles() { + const files = getChangesetFiles(); + for (const file of files) { + const filePath = join(CHANGESET_DIR, file); + unlinkSync(filePath); + console.log(`Removed changeset: ${file}`); + } +} + +try { + // Configure git + exec('git config user.name "github-actions[bot]"'); + exec('git config user.email "github-actions[bot]@users.noreply.github.com"'); + + let bumpType; + let descriptions = []; + + if (mode === 'changeset') { + // Changeset mode: get bump type from changesets + const result = processChangesets(); + if (!result) { + console.log('No changesets to process, exiting'); + setOutput('version_committed', 'false'); + setOutput('already_released', 'false'); + process.exit(0); + } + bumpType = result.bumpType; + descriptions = result.descriptions; + } else if (mode === 'instant') { + // Instant mode: use provided bump type + if (!bumpTypeArg || !['major', 'minor', 'patch'].includes(bumpTypeArg)) { + console.error( + 'Usage: bun run scripts/version-and-commit.mjs --mode instant --bump-type [--description ]' + ); + process.exit(1); + } + bumpType = bumpTypeArg; + if (description) { + descriptions = [description]; + } + } else { + console.error('Invalid mode. Use --mode changeset or --mode instant'); + process.exit(1); + } + + const current = getCurrentVersion(); + const newVersion = calculateNewVersion(current, bumpType); + + // Check if this version was already released + if (checkTagExists(newVersion)) { + console.log(`Tag v${newVersion} already exists`); + setOutput('already_released', 'true'); + setOutput('new_version', newVersion); + process.exit(0); + } + + // Update version in csproj + updateCsproj(newVersion); + + // Update changelog if we have descriptions + if (descriptions.length > 0) { + updateChangelog(newVersion, descriptions); + } + + // Remove changeset files (only in changeset mode) + if (mode === 'changeset') { + removeChangesetFiles(); + } + + // Stage all changed files + exec(`git add ${CSPROJ_PATH} ${CHANGELOG_FILE} ${CHANGESET_DIR}/`); + + // Check if there are changes to commit + try { + exec('git diff --cached --quiet', true); + // No changes to commit + console.log('No changes to commit'); + setOutput('version_committed', 'false'); + setOutput('new_version', newVersion); + process.exit(0); + } catch { + // There are changes to commit (git diff exits with 1 when there are differences) + } + + // Commit changes + const commitMsg = description + ? `chore: release v${newVersion}\n\n${description}` + : `chore: release v${newVersion}`; + exec(`git commit -m "${commitMsg.replace(/"/g, '\\"')}"`); + console.log(`Committed version ${newVersion}`); + + // Create tag + const tagMsg = description + ? `Release v${newVersion}\n\n${description}` + : `Release v${newVersion}`; + exec(`git tag -a v${newVersion} -m "${tagMsg.replace(/"/g, '\\"')}"`); + console.log(`Created tag v${newVersion}`); + + // Push changes and tag + exec('git push'); + exec('git push --tags'); + console.log('Pushed changes and tags'); + + setOutput('version_committed', 'true'); + setOutput('new_version', newVersion); +} catch (error) { + console.error('Error:', error.message); + process.exit(1); +} diff --git a/docs/case-studies/issue-86/templates/js-ai-driven-development-pipeline-template/check-release-needed.mjs b/docs/case-studies/issue-86/templates/js-ai-driven-development-pipeline-template/check-release-needed.mjs new file mode 100644 index 0000000..e2648f2 --- /dev/null +++ b/docs/case-studies/issue-86/templates/js-ai-driven-development-pipeline-template/check-release-needed.mjs @@ -0,0 +1,123 @@ +#!/usr/bin/env node + +/** + * Check if a release is needed based on changesets and npm registry state + * + * This script checks: + * 1. If there are changeset files to process + * 2. If the current version has already been published to npm + * + * IMPORTANT: This script checks npm (the source of truth for JS packages), + * NOT git tags. This is critical because: + * - Git tags can exist without the package being published + * - GitHub releases create tags but don't publish to npm + * - Only npm publication means users can actually install the package + * + * This provides a self-healing mechanism: if a previous release attempt + * failed or was skipped, the next push to main will detect the unpublished + * version and trigger a release without requiring a changeset. + * + * Analogous to check-release-needed.rs in the Rust template. + * + * Supports both single-language and multi-language repository structures: + * - Single-language: package.json in repository root + * - Multi-language: package.json in js/ subfolder + * + * Usage: node scripts/check-release-needed.mjs [--js-root ] + * + * Environment variables: + * - HAS_CHANGESETS: 'true' if changeset files exist (from check-changesets.mjs) + * + * Outputs (written to GITHUB_OUTPUT): + * - should_release: 'true' if a release should be created + * - skip_bump: 'true' if version bump should be skipped (version not yet published) + * + * Addresses issues documented in: + * - Issue #36: Release job silently skips when PRs merge without changesets + */ + +import { appendFileSync } from 'fs'; +import { execSync } from 'child_process'; + +import { getJsRoot, parseJsRootConfig } from './js-paths.mjs'; +import { readPackageInfo } from './package-info.mjs'; + +const jsRootConfig = parseJsRootConfig(); +const jsRoot = getJsRoot({ jsRoot: jsRootConfig, verbose: true }); + +/** + * Write output to GitHub Actions output file + * @param {string} name - Output name + * @param {string} value - Output value + */ +function setOutput(name, value) { + const outputFile = process.env.GITHUB_OUTPUT; + if (outputFile) { + appendFileSync(outputFile, `${name}=${value}\n`); + } + console.log(`Output: ${name}=${value}`); +} + +/** + * Get the package name and version from package.json + * @returns {{ name: string, version: string }} + */ +function getPackageInfo() { + return readPackageInfo({ jsRoot }); +} + +/** + * Check if a specific version is published on npm + * @param {string} packageName + * @param {string} version + * @returns {boolean} + */ +function checkVersionOnNpm(packageName, version) { + try { + const result = execSync(`npm view "${packageName}@${version}" version`, { + encoding: 'utf-8', + stdio: ['pipe', 'pipe', 'pipe'], + }); + return result.trim().includes(version); + } catch { + return false; + } +} + +function main() { + const hasChangesets = process.env.HAS_CHANGESETS === 'true'; + const { name: packageName, version: currentVersion } = getPackageInfo(); + + console.log(`Package: ${packageName}`); + console.log(`Current version: ${currentVersion}`); + console.log(`Has changesets: ${hasChangesets}`); + + if (hasChangesets) { + console.log('Found changesets, proceeding with release'); + setOutput('should_release', 'true'); + setOutput('skip_bump', 'false'); + return; + } + + console.log( + `Checking if ${packageName}@${currentVersion} is published on npm...` + ); + const isPublished = checkVersionOnNpm(packageName, currentVersion); + console.log(`Published on npm: ${isPublished}`); + + if (isPublished) { + console.log( + `No changesets and v${currentVersion} already published on npm — no release needed` + ); + setOutput('should_release', 'false'); + setOutput('skip_bump', 'false'); + } else { + console.log( + `No changesets but v${currentVersion} not yet published to npm — release needed (self-healing)` + ); + setOutput('should_release', 'true'); + setOutput('skip_bump', 'true'); + } +} + +main(); diff --git a/docs/case-studies/issue-86/templates/js-ai-driven-development-pipeline-template/file-tree.txt b/docs/case-studies/issue-86/templates/js-ai-driven-development-pipeline-template/file-tree.txt new file mode 100644 index 0000000..f643606 --- /dev/null +++ b/docs/case-studies/issue-86/templates/js-ai-driven-development-pipeline-template/file-tree.txt @@ -0,0 +1,345 @@ +.changeset +.changeset/README.md +.changeset/config.json +.github +.github/actions +.github/actions/publish-dockerhub +.github/actions/publish-dockerhub/action.yml +.github/workflows +.github/workflows/example-app.yml +.github/workflows/links.yml +.github/workflows/release.yml +.gitignore +.gitkeep +.husky +.husky/pre-commit +.jscpd.json +.lycheeignore +.prettierignore +.prettierrc +.secretlintrc.json +CHANGELOG.md +LICENSE +README.md +bin +bin/example-package-name.js +bunfig.toml +deno.json +docs +docs/BEST-PRACTICES.md +docs/CONTRIBUTING.md +docs/case-studies +docs/case-studies/issue-13 +docs/case-studies/issue-13/README.md +docs/case-studies/issue-13/hive-mind-issue-960.json +docs/case-studies/issue-13/hive-mind-pr-961-diff.txt +docs/case-studies/issue-13/hive-mind-pr-961.json +docs/case-studies/issue-21 +docs/case-studies/issue-21/README.md +docs/case-studies/issue-21/ci-logs +docs/case-studies/issue-21/ci-logs/run-20803315337.txt +docs/case-studies/issue-21/ci-logs/run-20885464993.txt +docs/case-studies/issue-21/issue-111-data.txt +docs/case-studies/issue-21/issue-113-data.txt +docs/case-studies/issue-21/pr-112-data.json +docs/case-studies/issue-21/pr-112-diff.patch +docs/case-studies/issue-21/pr-114-data.json +docs/case-studies/issue-21/pr-114-diff.patch +docs/case-studies/issue-23 +docs/case-studies/issue-23/README.md +docs/case-studies/issue-23/data +docs/case-studies/issue-23/data/hive-mind-check-version.mjs +docs/case-studies/issue-23/data/hive-mind-ci.yml +docs/case-studies/issue-23/data/hive-mind-eslint.config.mjs +docs/case-studies/issue-23/data/hive-mind-release.yml +docs/case-studies/issue-23/data/issue-1126-details.txt +docs/case-studies/issue-23/data/issue-1141-comments.json +docs/case-studies/issue-23/data/issue-1141-details.txt +docs/case-studies/issue-23/data/pr-1127-conversation-comments.json +docs/case-studies/issue-23/data/pr-1127-diff.txt +docs/case-studies/issue-23/data/pr-1127-review-comments.json +docs/case-studies/issue-23/data/pr-1142-conversation-comments.json +docs/case-studies/issue-23/data/pr-1142-diff.txt +docs/case-studies/issue-23/data/pr-1142-review-comments.json +docs/case-studies/issue-25 +docs/case-studies/issue-25/DETAILED-COMPARISON.md +docs/case-studies/issue-25/README.md +docs/case-studies/issue-25/data +docs/case-studies/issue-25/data/hive-mind-file-tree.txt +docs/case-studies/issue-25/data/issue-1274-case-study.md +docs/case-studies/issue-25/data/issue-1278-case-study.md +docs/case-studies/issue-25/data/template-file-tree.txt +docs/case-studies/issue-29 +docs/case-studies/issue-29/README.md +docs/case-studies/issue-3 +docs/case-studies/issue-3/README.md +docs/case-studies/issue-3/created-issues.md +docs/case-studies/issue-3/issue-data.json +docs/case-studies/issue-3/original-format-release-notes.mjs +docs/case-studies/issue-3/reference-pr-59-diff.txt +docs/case-studies/issue-3/reference-pr-59.json +docs/case-studies/issue-3/release-v0.1.0.json +docs/case-studies/issue-3/repositories-with-same-script.json +docs/case-studies/issue-3/research-notes.md +docs/case-studies/issue-31 +docs/case-studies/issue-31/README.md +docs/case-studies/issue-31/web-capture-pr49-commits.json +docs/case-studies/issue-33 +docs/case-studies/issue-33/README.md +docs/case-studies/issue-33/ci-logs +docs/case-studies/issue-33/ci-logs/release-24395209194.txt +docs/case-studies/issue-33/ci-logs/upstream-nodejs-62430.json +docs/case-studies/issue-33/ci-logs/upstream-npm-cli-9151.json +docs/case-studies/issue-33/ci-logs/upstream-runner-images-13883.json +docs/case-studies/issue-36 +docs/case-studies/issue-36/README.md +docs/case-studies/issue-36/ci-logs +docs/case-studies/issue-36/ci-logs/release-24399965550.txt +docs/case-studies/issue-38 +docs/case-studies/issue-38/CASE-STUDY.md +docs/case-studies/issue-40 +docs/case-studies/issue-40/CICD-COMPARISON.md +docs/case-studies/issue-40/README.md +docs/case-studies/issue-40/data +docs/case-studies/issue-40/data/ci-run-25212337438.json +docs/case-studies/issue-40/data/ci-runs-branch.json +docs/case-studies/issue-40/data/downstream-web-capture-issue-98.json +docs/case-studies/issue-40/data/downstream-web-capture-pr-99.diff +docs/case-studies/issue-40/data/downstream-web-capture-pr-99.json +docs/case-studies/issue-40/data/issue-40.json +docs/case-studies/issue-40/data/js-cicd-files.txt +docs/case-studies/issue-40/data/js-template-file-tree.txt +docs/case-studies/issue-40/data/pr-43.json +docs/case-studies/issue-40/data/related-js-merged-prs.json +docs/case-studies/issue-40/data/rust-cicd-files.txt +docs/case-studies/issue-40/data/rust-template-file-tree.txt +docs/case-studies/issue-40/data/rust-template-head.txt +docs/case-studies/issue-40/data/shields-broken-prefixed-badge.svg +docs/case-studies/issue-40/data/shields-broken-prefixed-prerelease-badge.svg +docs/case-studies/issue-40/data/shields-working-normalized-badge.svg +docs/case-studies/issue-40/data/shields-working-prerelease-badge.svg +docs/case-studies/issue-40/rust-template +docs/case-studies/issue-40/rust-template/create-github-release.rs +docs/case-studies/issue-40/rust-template/release.yml +docs/case-studies/issue-41 +docs/case-studies/issue-41/README.md +docs/case-studies/issue-41/data +docs/case-studies/issue-41/data/hive-mind-check-file-line-limits.sh +docs/case-studies/issue-41/data/hive-mind-file-tree.txt +docs/case-studies/issue-41/data/hive-mind-issue-1593-case-study.md +docs/case-studies/issue-41/data/hive-mind-issue-1593-comments.json +docs/case-studies/issue-41/data/hive-mind-issue-1593.json +docs/case-studies/issue-41/data/hive-mind-issue-1730-case-study.md +docs/case-studies/issue-41/data/hive-mind-issue-1730-comments.json +docs/case-studies/issue-41/data/hive-mind-issue-1730.json +docs/case-studies/issue-41/data/js-template-check-file-line-limits-before.sh +docs/case-studies/issue-41/data/js-template-eslint.config.js +docs/case-studies/issue-41/data/js-template-file-tree.txt +docs/case-studies/issue-41/data/js-template-issue-41-comments.json +docs/case-studies/issue-41/data/js-template-issue-41.json +docs/case-studies/issue-41/data/js-template-release.yml +docs/case-studies/issue-41/data/js-template-warn-threshold-search-before.json +docs/case-studies/issue-41/data/rust-template-check-file-size.rs +docs/case-studies/issue-41/data/rust-template-created-issue-url.txt +docs/case-studies/issue-41/data/rust-template-file-tree.txt +docs/case-studies/issue-41/data/rust-template-issue-40.json +docs/case-studies/issue-41/data/rust-template-issues.json +docs/case-studies/issue-41/data/rust-template-max-lines-search.json +docs/case-studies/issue-41/data/rust-template-release.yml +docs/case-studies/issue-42 +docs/case-studies/issue-42/README.md +docs/case-studies/issue-42/data +docs/case-studies/issue-42/data/ci-runs-branch.json +docs/case-studies/issue-42/data/issue-42-comments.json +docs/case-studies/issue-42/data/issue-42.json +docs/case-studies/issue-42/data/js-template-file-tree.txt +docs/case-studies/issue-42/data/js-template-pre-fix-head.txt +docs/case-studies/issue-42/data/link-foundation-my-package-search.txt +docs/case-studies/issue-42/data/link-foundation-package-name-search.txt +docs/case-studies/issue-42/data/pr-45-conversation-comments.json +docs/case-studies/issue-42/data/pr-45-review-comments.json +docs/case-studies/issue-42/data/pr-45-reviews.json +docs/case-studies/issue-42/data/pr-45.json +docs/case-studies/issue-42/data/related-merged-prs-check-release-needed.json +docs/case-studies/issue-42/data/related-merged-prs-publish-to-npm.json +docs/case-studies/issue-42/data/rust-template-ci-cd-findings.txt +docs/case-studies/issue-42/data/rust-template-file-tree.txt +docs/case-studies/issue-42/data/rust-template-head.txt +docs/case-studies/issue-56 +docs/case-studies/issue-56/README.md +docs/case-studies/issue-56/artifacts +docs/case-studies/issue-56/artifacts/universal-app-mobile.png +docs/case-studies/issue-56/artifacts/universal-app-web.png +docs/case-studies/issue-56/data +docs/case-studies/issue-56/data/actions-checkout-release.json +docs/case-studies/issue-56/data/actions-configure-pages-release.json +docs/case-studies/issue-56/data/actions-deploy-pages-release.json +docs/case-studies/issue-56/data/actions-setup-node-release.json +docs/case-studies/issue-56/data/actions-upload-artifact-release.json +docs/case-studies/issue-56/data/actions-upload-pages-artifact-release.json +docs/case-studies/issue-56/data/bun-test-final.log +docs/case-studies/issue-56/data/changeset-status-after-stage.log +docs/case-studies/issue-56/data/check-file-line-limits-final-2.log +docs/case-studies/issue-56/data/check-mjs-syntax-final-2.log +docs/case-studies/issue-56/data/deep-sdk-capacitor.config.ts +docs/case-studies/issue-56/data/deep-sdk-electron-package.json +docs/case-studies/issue-56/data/deep-sdk-file-tree.txt +docs/case-studies/issue-56/data/deep-sdk-gh-pages.yml +docs/case-studies/issue-56/data/deep-sdk-package.json +docs/case-studies/issue-56/data/deep-sdk-repo.json +docs/case-studies/issue-56/data/deno-test-final.log +docs/case-studies/issue-56/data/example-desktop-package-final-2.log +docs/case-studies/issue-56/data/example-mobile-sync-final-2.log +docs/case-studies/issue-56/data/example-web-build-final-2.log +docs/case-studies/issue-56/data/issue-56-comments.json +docs/case-studies/issue-56/data/issue-56.json +docs/case-studies/issue-56/data/link-foundation-code-search.json +docs/case-studies/issue-56/data/npm-capacitor-cli.json +docs/case-studies/issue-56/data/npm-capacitor-core.json +docs/case-studies/issue-56/data/npm-check-final-4.log +docs/case-studies/issue-56/data/npm-electron-forge-cli.json +docs/case-studies/issue-56/data/npm-install-root.log +docs/case-studies/issue-56/data/npm-install-universal-app-node20-compatible.log +docs/case-studies/issue-56/data/npm-test-final-3.log +docs/case-studies/issue-56/data/npm-vite.json +docs/case-studies/issue-56/data/pr-57.json +docs/case-studies/issue-56/data/recent-merged-prs.json +docs/case-studies/issue-56/data/universal-app-test-before.log +docs/case-studies/issue-56/data/universal-app-test-final-2.log +docs/case-studies/issue-56/data/validate-changeset-final.log +docs/case-studies/issue-56/data/vk-bot-desktop-build-renderer.mjs +docs/case-studies/issue-56/data/vk-bot-desktop-electron-main.cjs +docs/case-studies/issue-56/data/vk-bot-desktop-file-tree.txt +docs/case-studies/issue-56/data/vk-bot-desktop-js-workflow.yml +docs/case-studies/issue-56/data/vk-bot-desktop-package.json +docs/case-studies/issue-56/data/vk-bot-desktop-repo.json +docs/case-studies/issue-58 +docs/case-studies/issue-58/README.md +docs/case-studies/issue-58/data +docs/case-studies/issue-58/data/actions-configure-pages-release.json +docs/case-studies/issue-58/data/actions-deploy-pages-release.json +docs/case-studies/issue-58/data/actions-upload-artifact-release.json +docs/case-studies/issue-58/data/actions-upload-pages-artifact-release.json +docs/case-studies/issue-58/data/bun-test.log +docs/case-studies/issue-58/data/check-file-line-limits.log +docs/case-studies/issue-58/data/check-mjs-syntax.log +docs/case-studies/issue-58/data/checks-and-release-25733140225.json +docs/case-studies/issue-58/data/checks-and-release-25733140225.log +docs/case-studies/issue-58/data/checks-and-release-25743983223.log +docs/case-studies/issue-58/data/ci-run-25743983223.json +docs/case-studies/issue-58/data/csharp-template-file-tree.txt +docs/case-studies/issue-58/data/csharp-template-release.yml +docs/case-studies/issue-58/data/deno-test.log +docs/case-studies/issue-58/data/example-app-25733140224.json +docs/case-studies/issue-58/data/example-app-25733140224.log +docs/case-studies/issue-58/data/example-desktop-package.log +docs/case-studies/issue-58/data/example-mobile-sync.log +docs/case-studies/issue-58/data/example-web-build.log +docs/case-studies/issue-58/data/issue-58-comments.json +docs/case-studies/issue-58/data/issue-58.json +docs/case-studies/issue-58/data/js-template-file-tree.txt +docs/case-studies/issue-58/data/link-foundation-example-package-name-search.json +docs/case-studies/issue-58/data/main-ci-runs.json +docs/case-studies/issue-58/data/npm-check-final.log +docs/case-studies/issue-58/data/npm-example-package-name-view.json +docs/case-studies/issue-58/data/npm-global-install.log +docs/case-studies/issue-58/data/npm-install-after-metadata.log +docs/case-studies/issue-58/data/npm-install-universal-app.log +docs/case-studies/issue-58/data/npm-install.log +docs/case-studies/issue-58/data/npm-pack-dry-run-final.json +docs/case-studies/issue-58/data/npm-test-2.log +docs/case-studies/issue-58/data/npm-whoami.log +docs/case-studies/issue-58/data/pages-enable-result.json +docs/case-studies/issue-58/data/pages-status-after-enable.json +docs/case-studies/issue-58/data/pr-57.diff +docs/case-studies/issue-58/data/pr-57.json +docs/case-studies/issue-58/data/pr-59-conversation-comments.json +docs/case-studies/issue-58/data/pr-59-review-comments.json +docs/case-studies/issue-58/data/pr-59-reviews.json +docs/case-studies/issue-58/data/pr-59.json +docs/case-studies/issue-58/data/python-template-file-tree.txt +docs/case-studies/issue-58/data/python-template-release.yml +docs/case-studies/issue-58/data/regression-after-2.log +docs/case-studies/issue-58/data/regression-after-3.log +docs/case-studies/issue-58/data/regression-after.log +docs/case-studies/issue-58/data/regression-before.log +docs/case-studies/issue-58/data/rust-template-file-tree.txt +docs/case-studies/issue-58/data/rust-template-release.yml +docs/case-studies/issue-58/data/secretlint.log +docs/case-studies/issue-58/data/validate-changeset.log +docs/case-studies/issue-7 +docs/case-studies/issue-7/BEST-PRACTICES-COMPARISON.md +docs/case-studies/issue-7/FORMATTER-COMPARISON.md +docs/case-studies/issue-7/current-repository-analysis.json +docs/case-studies/issue-7/effect-template-analysis.json +eslint.config.js +examples +examples/basic-usage.js +examples/universal-app +examples/universal-app/README.md +examples/universal-app/capacitor.config.json +examples/universal-app/electron +examples/universal-app/electron/main.cjs +examples/universal-app/electron/preload.cjs +examples/universal-app/forge.config.cjs +examples/universal-app/index.html +examples/universal-app/package-lock.json +examples/universal-app/package.json +examples/universal-app/public +examples/universal-app/public/favicon.svg +examples/universal-app/src +examples/universal-app/src/App.js +examples/universal-app/src/main.js +examples/universal-app/src/styles.css +examples/universal-app/vite.config.js +experiments +experiments/test-changeset-scripts.mjs +experiments/test-check-release-needed.mjs +experiments/test-detect-changes.mjs +experiments/test-failure-detection.mjs +experiments/test-format-major-changes.mjs +experiments/test-format-minor-changes.mjs +experiments/test-format-no-hash.mjs +experiments/test-format-patch-changes.mjs +package-lock.json +package.json +scripts +scripts/changeset-version.mjs +scripts/check-changesets.mjs +scripts/check-docker-publish.mjs +scripts/check-file-line-limits.sh +scripts/check-mjs-syntax.sh +scripts/check-release-needed.mjs +scripts/check-version.mjs +scripts/check-web-archive.mjs +scripts/create-github-release.mjs +scripts/create-manual-changeset.mjs +scripts/detect-code-changes.mjs +scripts/format-github-release.mjs +scripts/format-release-notes-helpers.mjs +scripts/format-release-notes.mjs +scripts/instant-version-bump.mjs +scripts/js-paths.mjs +scripts/merge-changesets.mjs +scripts/package-info.mjs +scripts/publish-to-npm.mjs +scripts/setup-npm.mjs +scripts/simulate-fresh-merge.sh +scripts/validate-changeset.mjs +scripts/version-and-commit.mjs +scripts/wait-for-npm.mjs +src +src/index.d.ts +src/index.js +tests +tests/check-file-line-limits.test.js +tests/ci-timeouts.test.js +tests/create-github-release.test.js +tests/docker-publish.test.js +tests/index.test.js +tests/package-info.test.js +tests/package-metadata.test.js +tests/release-badge.test.js +tests/setup-npm.test.js +tests/tag-prefix.test.js +tests/universal-app.test.js diff --git a/docs/case-studies/issue-86/templates/js-ai-driven-development-pipeline-template/publish-to-npm.mjs b/docs/case-studies/issue-86/templates/js-ai-driven-development-pipeline-template/publish-to-npm.mjs new file mode 100644 index 0000000..264b78f --- /dev/null +++ b/docs/case-studies/issue-86/templates/js-ai-driven-development-pipeline-template/publish-to-npm.mjs @@ -0,0 +1,325 @@ +#!/usr/bin/env bun + +/** + * Publish to npm using OIDC trusted publishing + * Usage: node scripts/publish-to-npm.mjs [--should-pull] [--js-root ] + * should_pull: Optional flag to pull latest changes before publishing (for release job) + * + * Configuration: + * - CLI: --js-root to explicitly set JavaScript root + * - Environment: JS_ROOT= + * + * Uses link-foundation libraries: + * - use-m: Dynamic package loading without package.json dependencies + * - command-stream: Modern shell command execution with streaming support + * - lino-arguments: Unified configuration from CLI args, env vars, and .lenv files + * + * Addresses issues documented in: + * - Issue #21: Supporting both single and multi-language repository structures + * - Reference: link-assistant/agent PR #112 (--legacy-peer-deps fix) + * - Reference: link-assistant/agent PR #114 (configurable package root) + */ + +import { appendFileSync } from 'fs'; + +import { getJsRoot, needsCd, parseJsRootConfig } from './js-paths.mjs'; +import { formatNpmPackageVersion, readPackageInfo } from './package-info.mjs'; + +// Load use-m dynamically +const { use } = eval( + await (await fetch('https://unpkg.com/use-m/use.js')).text() +); + +// Import link-foundation libraries +const { $ } = await use('command-stream'); +const { makeConfig } = await use('lino-arguments'); + +// Parse CLI arguments using lino-arguments +const config = makeConfig({ + yargs: ({ yargs, getenv }) => + yargs + .option('should-pull', { + type: 'boolean', + default: getenv('SHOULD_PULL', false), + describe: 'Pull latest changes before publishing', + }) + .option('js-root', { + type: 'string', + default: getenv('JS_ROOT', ''), + describe: + 'JavaScript package root directory (auto-detected if not specified)', + }), +}); + +const { shouldPull, jsRoot: jsRootArg } = config; + +// Get JavaScript package root (auto-detect or use explicit config) +const jsRootConfig = jsRootArg || parseJsRootConfig(); +const jsRoot = getJsRoot({ jsRoot: jsRootConfig, verbose: true }); + +const MAX_RETRIES = 3; +const RETRY_DELAY = 10000; // 10 seconds + +// Store the original working directory to restore after cd commands +// IMPORTANT: command-stream's cd is a virtual command that calls process.chdir() +const originalCwd = process.cwd(); + +// Patterns that indicate publish failure in changeset output +// Reference: link-assistant/agent PR #116 - prevent false positives in CI/CD +const FAILURE_PATTERNS = [ + 'packages failed to publish', + 'error occurred while publishing', + 'npm error code E', + 'npm error 404', + 'npm error 401', + 'npm error 403', + 'Access token expired', + 'ENEEDAUTH', +]; + +/** + * Sleep for specified milliseconds + * @param {number} ms + */ +function sleep(ms) { + return new Promise((resolve) => globalThis.setTimeout(resolve, ms)); +} + +/** + * Check if the output contains any failure patterns + * Reference: link-assistant/agent PR #116 + * @param {string} output - Combined stdout and stderr + * @returns {string|null} - The matched failure pattern or null if no failure detected + */ +function detectPublishFailure(output) { + const lowerOutput = output.toLowerCase(); + for (const pattern of FAILURE_PATTERNS) { + if (lowerOutput.includes(pattern.toLowerCase())) { + return pattern; + } + } + return null; +} + +/** + * Verify that a package version is published on npm + * Reference: link-assistant/agent PR #116 + * @param {Function} shell + * @param {string} packageName + * @param {string} version + * @returns {Promise} + */ +async function verifyPublished(shell, packageName, version) { + const result = + await shell`npm view "${formatNpmPackageVersion(packageName, version)}" version`.run( + { + capture: true, + } + ); + return result.code === 0 && result.stdout.trim().includes(version); +} + +/** + * Append to GitHub Actions output file + * @param {string} key + * @param {string} value + */ +function setOutput(key, value) { + const outputFile = process.env.GITHUB_OUTPUT; + if (outputFile) { + appendFileSync(outputFile, `${key}=${value}\n`); + } +} + +/** + * Run changeset:publish command with output capture + * @param {Function} shell + * @param {string} jsRoot + * @param {string} originalCwd + * @returns {Promise<{result: object|null, error: Error|null}>} + */ +async function runChangesetPublish(shell, jsRoot, originalCwd) { + try { + // Run changeset:publish from the js directory where package.json with this script exists + // IMPORTANT: Use .run({ capture: true }) to capture output for failure detection + // IMPORTANT: cd is a virtual command that calls process.chdir(), so we restore after + if (needsCd({ jsRoot })) { + const result = await shell`cd ${jsRoot} && npm run changeset:publish`.run( + { + capture: true, + } + ); + process.chdir(originalCwd); + return { result, error: null }; + } + const result = await shell`npm run changeset:publish`.run({ + capture: true, + }); + return { result, error: null }; + } catch (error) { + // Restore cwd on error before retry + if (needsCd({ jsRoot })) { + process.chdir(originalCwd); + } + return { result: null, error }; + } +} + +/** + * Analyze publish result for failures using multi-layer detection + * Reference: link-assistant/agent PR #116 + * @param {object|null} publishResult - The result from runChangesetPublish + * @param {Error|null} commandError - Error thrown by the command + * @returns {Error|null} - Error if failure detected, null otherwise + */ +function analyzePublishResult(publishResult, commandError) { + if (commandError) { + return commandError; + } + + const combinedOutput = publishResult + ? `${publishResult.stdout || ''}\n${publishResult.stderr || ''}` + : ''; + + // Log the output for debugging + if (combinedOutput.trim()) { + console.log('Changeset output:', combinedOutput); + } + + // Check for failure patterns in output (most reliable for changeset) + const failurePattern = detectPublishFailure(combinedOutput); + if (failurePattern) { + console.error(`Detected publish failure: "${failurePattern}"`); + return new Error(`Publish failed: detected "${failurePattern}" in output`); + } + + // Check exit code (if available and non-zero) + if (publishResult && publishResult.code !== 0) { + console.error(`Changeset exited with code ${publishResult.code}`); + return new Error(`Publish failed with exit code ${publishResult.code}`); + } + + return null; +} + +/** + * Perform a single publish attempt with verification + * @param {string} currentVersion + * @param {string} packageName + * @param {Function} shell + * @param {string} jsRoot + * @param {string} originalCwd + * @returns {Promise<{success: boolean, error: Error|null}>} + */ +async function attemptPublish( + currentVersion, + packageName, + shell, + jsRoot, + originalCwd +) { + const { result, error } = await runChangesetPublish( + shell, + jsRoot, + originalCwd + ); + const analysisError = analyzePublishResult(result, error); + + if (analysisError) { + return { success: false, error: analysisError }; + } + + // Verify the package is actually on npm (ultimate verification) + console.log('Verifying package was published to npm...'); + await sleep(2000); // Wait for npm registry to propagate + const isPublished = await verifyPublished(shell, packageName, currentVersion); + + if (isPublished) { + return { success: true, error: null }; + } + + console.error('Verification failed: package not found on npm after publish'); + return { + success: false, + error: new Error('Package not found on npm after publish attempt'), + }; +} + +async function main() { + try { + if (shouldPull) { + // Pull the latest changes we just pushed + await $`git pull origin main`; + } + + // Get current version + const { name: packageName, version: currentVersion } = readPackageInfo({ + jsRoot, + }); + console.log(`Package to publish: ${packageName}`); + console.log(`Current version to publish: ${currentVersion}`); + + // Check if this version is already published on npm + console.log( + `Checking if version ${currentVersion} is already published...` + ); + const checkResult = + await $`npm view "${formatNpmPackageVersion(packageName, currentVersion)}" version`.run( + { + capture: true, + } + ); + + // command-stream returns { code: 0 } on success, { code: 1 } on failure (e.g., E404) + // Exit code 0 means version exists, non-zero means version not found + if (checkResult.code === 0) { + console.log(`Version ${currentVersion} is already published to npm`); + setOutput('published', 'true'); + setOutput('published_version', currentVersion); + setOutput('already_published', 'true'); + return; + } + + // Version not found on npm (E404), proceed with publish + console.log( + `Version ${currentVersion} not found on npm, proceeding with publish...` + ); + + // Publish to npm using OIDC trusted publishing with retry logic + // Multi-layer failure detection based on link-assistant/agent PR #116 + for (let i = 1; i <= MAX_RETRIES; i++) { + console.log(`Publish attempt ${i} of ${MAX_RETRIES}...`); + const { success, error } = await attemptPublish( + currentVersion, + packageName, + $, + jsRoot, + originalCwd + ); + + if (success) { + setOutput('published', 'true'); + setOutput('published_version', currentVersion); + console.log(`\u2705 Published ${packageName}@${currentVersion} to npm`); + return; + } + + if (i < MAX_RETRIES) { + console.log( + `Publish failed: ${error.message}, waiting ${RETRY_DELAY / 1000}s before retry...` + ); + await sleep(RETRY_DELAY); + } + } + + console.error(`\u274C Failed to publish after ${MAX_RETRIES} attempts`); + process.exit(1); + } catch (error) { + // Restore cwd on error + process.chdir(originalCwd); + console.error('Error:', error.message); + process.exit(1); + } +} + +main(); diff --git a/docs/case-studies/issue-86/templates/js-ai-driven-development-pipeline-template/release.yml b/docs/case-studies/issue-86/templates/js-ai-driven-development-pipeline-template/release.yml new file mode 100644 index 0000000..0facf84 --- /dev/null +++ b/docs/case-studies/issue-86/templates/js-ai-driven-development-pipeline-template/release.yml @@ -0,0 +1,617 @@ +name: Checks and release + +on: + push: + branches: + - main + pull_request: + types: [opened, synchronize, reopened] + # Manual release support - consolidated here to work with npm trusted publishing + # npm only allows ONE workflow file as trusted publisher, so all publishing + # must go through this workflow (release.yml) + workflow_dispatch: + inputs: + release_mode: + description: 'Manual release mode' + required: true + type: choice + default: 'instant' + options: + - instant + - changeset-pr + bump_type: + description: 'Manual release type' + required: true + type: choice + options: + - patch + - minor + - major + description: + description: 'Manual release description (optional)' + required: false + type: string + +# Concurrency: Only one workflow run per branch at a time +# - For main branch (releases): cancel older runs to prevent blocking newer releases +# When multiple commits are pushed quickly, we want the latest to release, not wait +# - For PR branches: queue runs to avoid cancelling checks on force-pushes +# See: docs/case-studies/issue-25/DETAILED-COMPARISON.md for context +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.ref == 'refs/heads/main' }} + +jobs: + # === DETECT CHANGES - determines which jobs should run === + detect-changes: + name: Detect Changes + runs-on: ubuntu-latest + # Typical run: ~6s. Cap at 5min so a hung detection step + # surfaces quickly instead of stalling the whole pipeline. + timeout-minutes: 5 + if: github.event_name != 'workflow_dispatch' + outputs: + mjs-changed: ${{ steps.changes.outputs.mjs-changed }} + js-changed: ${{ steps.changes.outputs.js-changed }} + package-changed: ${{ steps.changes.outputs.package-changed }} + docs-changed: ${{ steps.changes.outputs.docs-changed }} + workflow-changed: ${{ steps.changes.outputs.workflow-changed }} + any-code-changed: ${{ steps.changes.outputs.any-code-changed }} + steps: + - uses: actions/checkout@v6 + with: + fetch-depth: 0 + + - name: Detect changes + id: changes + run: node scripts/detect-code-changes.mjs + + # === FAST CHECKS - run before slow tests for fastest feedback === + # See: hive-mind CI/CD best practices principle #5 (fast-fail job ordering) + + # Syntax check all .mjs files with node --check (~7s) + test-compilation: + name: Test Compilation + runs-on: ubuntu-latest + # Typical run: <10s. Tight cap fails fast on syntax-check hangs. + timeout-minutes: 5 + needs: [detect-changes] + if: | + github.event_name == 'push' || + needs.detect-changes.outputs.mjs-changed == 'true' || + needs.detect-changes.outputs.js-changed == 'true' + steps: + - uses: actions/checkout@v6 + + - name: Check .mjs syntax + run: bash scripts/check-mjs-syntax.sh + + # Enforce 1500-line limit on .mjs files and release.yml + check-file-line-limits: + name: Check File Line Limits + runs-on: ubuntu-latest + # Typical run: <10s. This job only walks tracked files and counts lines. + timeout-minutes: 5 + needs: [detect-changes] + if: | + github.event_name == 'push' || + needs.detect-changes.outputs.mjs-changed == 'true' || + needs.detect-changes.outputs.js-changed == 'true' || + needs.detect-changes.outputs.workflow-changed == 'true' + steps: + - uses: actions/checkout@v6 + with: + fetch-depth: 0 + + - name: Simulate fresh merge with base branch (PR only) + if: github.event_name == 'pull_request' + env: + BASE_REF: ${{ github.base_ref }} + run: bash scripts/simulate-fresh-merge.sh + + - name: Check file line limits + run: bash scripts/check-file-line-limits.sh + + # === VERSION CHANGE CHECK === + # Prohibit manual version changes in package.json - versions should only be changed by CI/CD + version-check: + name: Check for Manual Version Changes + runs-on: ubuntu-latest + # Typical run: ~6s. Read-only package.json diff inspection. + timeout-minutes: 5 + if: github.event_name == 'pull_request' + steps: + - uses: actions/checkout@v6 + with: + fetch-depth: 0 + + - name: Check for version changes in package.json + env: + GITHUB_HEAD_REF: ${{ github.head_ref }} + GITHUB_BASE_REF: ${{ github.base_ref }} + run: node scripts/check-version.mjs + + # === CHANGESET CHECK - only runs on PRs with code changes === + # Docs-only PRs (./docs folder, markdown files) don't require changesets + changeset-check: + name: Check for Changesets + runs-on: ubuntu-latest + # Typical run: <30s including npm install. 10min covers cold runners. + timeout-minutes: 10 + needs: [detect-changes] + if: github.event_name == 'pull_request' && needs.detect-changes.outputs.any-code-changed == 'true' + steps: + - uses: actions/checkout@v6 + with: + fetch-depth: 0 + + - name: Setup Node.js + uses: actions/setup-node@v6 + with: + node-version: '24.x' + + - name: Install dependencies + run: npm install + + - name: Check for changesets + env: + # Pass PR context to the validation script + GITHUB_BASE_REF: ${{ github.base_ref }} + GITHUB_BASE_SHA: ${{ github.event.pull_request.base.sha }} + GITHUB_HEAD_SHA: ${{ github.event.pull_request.head.sha }} + run: | + # Skip changeset check for automated version PRs + if [[ "${{ github.head_ref }}" == "changeset-release/"* ]]; then + echo "Skipping changeset check for automated release PR" + exit 0 + fi + + # Run changeset validation script + # This validates that exactly ONE changeset was ADDED by this PR + # Pre-existing changesets from other merged PRs are ignored + node scripts/validate-changeset.mjs + + # === LINT AND FORMAT CHECK === + # Lint runs independently of changeset-check - it's a fast check that should always run + # See: https://github.com/link-assistant/hive-mind/pull/1024 for why this dependency was removed + # IMPORTANT: ESLint includes max-lines rule (1500 lines) to ensure files stay maintainable + # See docs/case-studies/issue-23 for why fresh merge simulation is critical + lint: + name: Lint and Format Check + runs-on: ubuntu-latest + # Typical run: <1min including install, ESLint, Prettier, jscpd, + # and secretlint. 10min protects against a hung lint plugin. + timeout-minutes: 10 + needs: [detect-changes] + if: | + github.event_name == 'push' || + needs.detect-changes.outputs.mjs-changed == 'true' || + needs.detect-changes.outputs.js-changed == 'true' || + needs.detect-changes.outputs.docs-changed == 'true' || + needs.detect-changes.outputs.package-changed == 'true' || + needs.detect-changes.outputs.workflow-changed == 'true' + steps: + - uses: actions/checkout@v6 + with: + # For PRs, fetch enough history to merge with base branch + fetch-depth: 0 + + - name: Simulate fresh merge with base branch (PR only) + if: github.event_name == 'pull_request' + env: + BASE_REF: ${{ github.base_ref }} + run: bash scripts/simulate-fresh-merge.sh + + - name: Setup Node.js + uses: actions/setup-node@v6 + with: + node-version: '24.x' + + - name: Install dependencies + run: npm install + + - name: Run ESLint + run: npm run lint + + - name: Check formatting + run: npm run format:check + + - name: Check code duplication + run: npm run check:duplication + + - name: Check for secrets + run: npx --yes -p secretlint -p @secretlint/secretlint-rule-preset-recommend secretlint "**/*" + + # Test matrix: 3 runtimes (Node.js, Bun, Deno) x 3 OS (Ubuntu, macOS, Windows) + # IMPORTANT: Tests must validate the ACTUAL merge result, not a stale merge preview. + # See docs/case-studies/issue-23 for why this is critical. + # Fast-fail: slow test matrix only runs after fast checks pass (hive-mind principle #5) + test: + name: Test (${{ matrix.runtime }} on ${{ matrix.os }}) + runs-on: ${{ matrix.os }} + # Typical run: <1min per runtime/OS on warm runners, with Windows + # sometimes slower on cold starts. 10min fails hung tests well + # before GitHub Actions' 6h default. + timeout-minutes: 10 + needs: + [ + detect-changes, + changeset-check, + test-compilation, + lint, + check-file-line-limits, + ] + # Use !cancelled() instead of always() so cancellation propagates correctly (hive-mind issue #1278) + # Run if: push event, OR changeset-check succeeded, OR changeset-check was skipped (docs-only PR) + # AND all fast checks passed (or were skipped for irrelevant changes) + if: | + !cancelled() && + (github.event_name == 'push' || needs.changeset-check.result == 'success' || needs.changeset-check.result == 'skipped') && + (needs.test-compilation.result == 'success' || needs.test-compilation.result == 'skipped') && + (needs.lint.result == 'success' || needs.lint.result == 'skipped') && + (needs.check-file-line-limits.result == 'success' || needs.check-file-line-limits.result == 'skipped') + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, macos-latest, windows-latest] + runtime: [node, bun, deno] + steps: + - uses: actions/checkout@v6 + with: + # For PRs, fetch enough history to merge with base branch + fetch-depth: 0 + + - name: Simulate fresh merge with base branch (PR only) + if: github.event_name == 'pull_request' + env: + BASE_REF: ${{ github.base_ref }} + shell: bash + run: bash scripts/simulate-fresh-merge.sh + + - name: Setup Node.js + if: matrix.runtime == 'node' + uses: actions/setup-node@v6 + with: + node-version: '24.x' + + - name: Install dependencies (Node.js) + if: matrix.runtime == 'node' + run: npm install + + - name: Run tests (Node.js) + if: matrix.runtime == 'node' + run: npm test + + - name: Setup Bun + if: matrix.runtime == 'bun' + uses: oven-sh/setup-bun@v2 + with: + bun-version: latest + + - name: Install dependencies (Bun) + if: matrix.runtime == 'bun' + run: bun install + + - name: Run tests (Bun) + if: matrix.runtime == 'bun' + # --timeout caps an individual test at 30s, matching Node's + # --test-timeout budget while leaving headroom for cold runners. + run: bun test --timeout 30000 + + - name: Setup Deno + if: matrix.runtime == 'deno' + uses: denoland/setup-deno@v2 + with: + deno-version: v2.x + + - name: Run tests (Deno) + if: matrix.runtime == 'deno' + run: deno test --allow-read + + # === DOCUMENTATION VALIDATION === + # Validate documentation files when docs change (hive-mind principle #12) + validate-docs: + name: Validate Documentation + runs-on: ubuntu-latest + # Typical run: <10s. Pure shell checks over documentation files. + timeout-minutes: 5 + needs: [detect-changes] + if: | + github.event_name == 'push' || + needs.detect-changes.outputs.docs-changed == 'true' + steps: + - uses: actions/checkout@v6 + + - name: Check documentation file sizes + run: | + LIMIT=2500 + FAILURES=() + + echo "Checking that documentation files are under ${LIMIT} lines..." + + while IFS= read -r -d '' file; do + line_count=$(wc -l < "$file") + if [ "$line_count" -gt "$LIMIT" ]; then + echo "ERROR: $file has $line_count lines (limit: ${LIMIT})" + echo "::error file=$file::Documentation file has $line_count lines (limit: ${LIMIT})" + FAILURES+=("$file") + fi + done < <(find docs -name "*.md" -type f -print0 2>/dev/null) + + if [ "${#FAILURES[@]}" -gt 0 ]; then + echo "The following docs exceed the ${LIMIT} line limit:" + printf ' %s\n' "${FAILURES[@]}" + exit 1 + else + echo "All documentation files are within the ${LIMIT} line limit." + fi + + - name: Check required documentation files exist + run: | + REQUIRED_FILES=( + "docs/BEST-PRACTICES.md" + "docs/CONTRIBUTING.md" + "README.md" + "CHANGELOG.md" + ) + + MISSING=() + for file in "${REQUIRED_FILES[@]}"; do + if [ ! -f "$file" ]; then + echo "ERROR: Required documentation file missing: $file" + MISSING+=("$file") + else + echo "Found: $file" + fi + done + + if [ "${#MISSING[@]}" -gt 0 ]; then + echo "" + echo "Missing required documentation files:" + printf ' %s\n' "${MISSING[@]}" + exit 1 + else + echo "All required documentation files present." + fi + + # Release - only runs on main after tests pass (for push events) + release: + name: Release + needs: [lint, test] + # Typical run is well under 10min. 30min gives npm and GitHub + # release APIs room for retries without allowing a 6h hang. + timeout-minutes: 30 + # Use !cancelled() instead of always() so cancellation propagates correctly (hive-mind issue #1278) + # This is needed because lint/test jobs have a transitive dependency on changeset-check + if: | + !cancelled() && + github.ref == 'refs/heads/main' && + github.event_name == 'push' && + needs.lint.result == 'success' && + needs.test.result == 'success' + runs-on: ubuntu-latest + # Permissions required for npm OIDC trusted publishing + permissions: + contents: write + pull-requests: write + id-token: write + outputs: + published: ${{ steps.publish.outputs.published }} + published_version: ${{ steps.publish.outputs.published_version }} + steps: + - uses: actions/checkout@v6 + with: + fetch-depth: 0 + + - name: Setup Node.js + uses: actions/setup-node@v6 + with: + node-version: '24.x' + registry-url: 'https://registry.npmjs.org' + + - name: Install dependencies + run: npm install + + - name: Update npm for OIDC trusted publishing + run: node scripts/setup-npm.mjs + + - name: Check for changesets + id: check_changesets + run: node scripts/check-changesets.mjs + + - name: Check if release is needed + id: check_release + env: + HAS_CHANGESETS: ${{ steps.check_changesets.outputs.has_changesets }} + run: node scripts/check-release-needed.mjs + + - name: Merge multiple changesets + if: steps.check_changesets.outputs.has_changesets == 'true' && steps.check_changesets.outputs.changeset_count > 1 + run: | + echo "Multiple changesets detected, merging..." + node scripts/merge-changesets.mjs + + - name: Version packages and commit to main + if: steps.check_changesets.outputs.has_changesets == 'true' + id: version + run: node scripts/version-and-commit.mjs --mode changeset + + - name: Publish to npm + # Run if version was committed, if a previous attempt already committed (for re-runs), + # or if check-release-needed detected an unpublished version (self-healing, issue #36) + if: >- + steps.version.outputs.version_committed == 'true' || + steps.version.outputs.already_released == 'true' || + (steps.check_release.outputs.should_release == 'true' && steps.check_release.outputs.skip_bump == 'true') + id: publish + run: node scripts/publish-to-npm.mjs --should-pull + + - name: Create GitHub Release + if: steps.publish.outputs.published == 'true' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: node scripts/create-github-release.mjs --release-version "${{ steps.publish.outputs.published_version }}" --repository "${{ github.repository }}" + + - name: Format GitHub release notes + if: steps.publish.outputs.published == 'true' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: node scripts/format-github-release.mjs --release-version "${{ steps.publish.outputs.published_version }}" --repository "${{ github.repository }}" --commit-sha "${{ github.sha }}" + + # Manual Instant Release - triggered via workflow_dispatch with instant mode + # This job is in release.yml because npm trusted publishing + # only allows one workflow file to be registered as a trusted publisher + instant-release: + name: Instant Release + if: github.event_name == 'workflow_dispatch' && github.event.inputs.release_mode == 'instant' + runs-on: ubuntu-latest + # Same publish envelope as the automated release path. + timeout-minutes: 30 + # Permissions required for npm OIDC trusted publishing + permissions: + contents: write + pull-requests: write + id-token: write + outputs: + published: ${{ steps.publish.outputs.published }} + published_version: ${{ steps.publish.outputs.published_version }} + steps: + - uses: actions/checkout@v6 + with: + fetch-depth: 0 + + - name: Setup Node.js + uses: actions/setup-node@v6 + with: + node-version: '24.x' + registry-url: 'https://registry.npmjs.org' + + - name: Install dependencies + run: npm install + + - name: Update npm for OIDC trusted publishing + run: node scripts/setup-npm.mjs + + - name: Version packages and commit to main + id: version + run: node scripts/version-and-commit.mjs --mode instant --bump-type "${{ github.event.inputs.bump_type }}" --description "${{ github.event.inputs.description }}" + + - name: Publish to npm + # Run if version was committed OR if a previous attempt already committed (for re-runs) + if: steps.version.outputs.version_committed == 'true' || steps.version.outputs.already_released == 'true' + id: publish + run: node scripts/publish-to-npm.mjs + + - name: Create GitHub Release + if: steps.publish.outputs.published == 'true' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: node scripts/create-github-release.mjs --release-version "${{ steps.publish.outputs.published_version }}" --repository "${{ github.repository }}" + + - name: Format GitHub release notes + if: steps.publish.outputs.published == 'true' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: node scripts/format-github-release.mjs --release-version "${{ steps.publish.outputs.published_version }}" --repository "${{ github.repository }}" --commit-sha "${{ github.sha }}" + + # Optional Docker Hub publishing for packages that also ship Docker images. + # Set vars.DOCKERHUB_IMAGE to enable this path, then configure + # vars.DOCKERHUB_USERNAME and secrets.DOCKERHUB_TOKEN. + docker-publish: + name: Optional Docker Hub Publish + needs: [release, instant-release] + timeout-minutes: 30 + if: | + !cancelled() && + ( + (needs.release.result == 'success' && needs.release.outputs.published == 'true') || + (needs.instant-release.result == 'success' && needs.instant-release.outputs.published == 'true') + ) + runs-on: ubuntu-latest + permissions: + contents: read + env: + DOCKER_CONTEXT: ${{ vars.DOCKER_CONTEXT }} + DOCKERFILE: ${{ vars.DOCKERFILE }} + DOCKERHUB_IMAGE: ${{ vars.DOCKERHUB_IMAGE }} + DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} + DOCKERHUB_USERNAME: ${{ vars.DOCKERHUB_USERNAME }} + RELEASE_VERSION: ${{ needs.release.outputs.published_version || needs.instant-release.outputs.published_version }} + steps: + - uses: actions/checkout@v6 + + - name: Check Docker publish configuration + id: docker_config + run: node scripts/check-docker-publish.mjs + + - name: Wait for npm package availability before Docker publish + if: steps.docker_config.outputs.enabled == 'true' + run: node scripts/wait-for-npm.mjs --release-version "${{ env.RELEASE_VERSION }}" + + - name: Publish Docker image to Docker Hub + if: steps.docker_config.outputs.enabled == 'true' + uses: ./.github/actions/publish-dockerhub + with: + context: ${{ steps.docker_config.outputs.context }} + file: ${{ steps.docker_config.outputs.dockerfile }} + image: ${{ steps.docker_config.outputs.image }} + token: ${{ env.DOCKERHUB_TOKEN }} + username: ${{ env.DOCKERHUB_USERNAME }} + version: ${{ env.RELEASE_VERSION }} + + # Manual Changeset PR - creates a pull request with the changeset for review + changeset-pr: + name: Create Changeset PR + if: github.event_name == 'workflow_dispatch' && github.event.inputs.release_mode == 'changeset-pr' + runs-on: ubuntu-latest + # PR creation only: install, create a changeset, format, and open a PR. + timeout-minutes: 10 + permissions: + contents: write + pull-requests: write + steps: + - uses: actions/checkout@v6 + with: + fetch-depth: 0 + + - name: Setup Node.js + uses: actions/setup-node@v6 + with: + node-version: '24.x' + + - name: Install dependencies + run: npm install + + - name: Create changeset file + run: node scripts/create-manual-changeset.mjs --bump-type "${{ github.event.inputs.bump_type }}" --description "${{ github.event.inputs.description }}" + + - name: Format changeset with Prettier + run: | + # Run Prettier on the changeset file to ensure it matches project style + npx prettier --write ".changeset/*.md" || true + + echo "Formatted changeset files" + + - name: Create Pull Request + uses: peter-evans/create-pull-request@v8 + with: + token: ${{ secrets.GITHUB_TOKEN }} + commit-message: 'chore: add changeset for manual ${{ github.event.inputs.bump_type }} release' + branch: changeset-manual-release-${{ github.run_id }} + delete-branch: true + title: 'chore: manual ${{ github.event.inputs.bump_type }} release' + body: | + ## Manual Release Request + + This PR was created by a manual workflow trigger to prepare a **${{ github.event.inputs.bump_type }}** release. + + ### Release Details + - **Type:** ${{ github.event.inputs.bump_type }} + - **Description:** ${{ github.event.inputs.description || 'Manual release' }} + - **Triggered by:** @${{ github.actor }} + + ### Next Steps + 1. Review the changeset in this PR + 2. Merge this PR to main + 3. The automated release workflow will create a version PR + 4. Merge the version PR to publish to npm and create a GitHub release diff --git a/docs/case-studies/issue-86/templates/js-ai-driven-development-pipeline-template/tree.json b/docs/case-studies/issue-86/templates/js-ai-driven-development-pipeline-template/tree.json new file mode 100644 index 0000000..e42aed4 --- /dev/null +++ b/docs/case-studies/issue-86/templates/js-ai-driven-development-pipeline-template/tree.json @@ -0,0 +1 @@ +{"sha":"31e9fb441b7d51677852a7b1ad4484c221daed9d","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/31e9fb441b7d51677852a7b1ad4484c221daed9d","tree":[{"path":".changeset","mode":"040000","type":"tree","sha":"0cdcc2280a516e91fdca8c34b33881b389d80612","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/0cdcc2280a516e91fdca8c34b33881b389d80612"},{"path":".changeset/README.md","mode":"100644","type":"blob","sha":"e5b6d8d6a67ad0dca8f20117fbfc72e076882d00","size":510,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/e5b6d8d6a67ad0dca8f20117fbfc72e076882d00"},{"path":".changeset/config.json","mode":"100644","type":"blob","sha":"2be13d43105bb89e816ee8d0949fd4a8c1830676","size":271,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/2be13d43105bb89e816ee8d0949fd4a8c1830676"},{"path":".github","mode":"040000","type":"tree","sha":"c5e2f49be884bcfc46202d79a8ef38bb2be02239","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/c5e2f49be884bcfc46202d79a8ef38bb2be02239"},{"path":".github/actions","mode":"040000","type":"tree","sha":"5879e09f31671188eca3e88b263dd2e06bc268d9","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/5879e09f31671188eca3e88b263dd2e06bc268d9"},{"path":".github/actions/publish-dockerhub","mode":"040000","type":"tree","sha":"3fc5e709b6e5a57d27b5f0925a509fd213c3b0ac","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/3fc5e709b6e5a57d27b5f0925a509fd213c3b0ac"},{"path":".github/actions/publish-dockerhub/action.yml","mode":"100644","type":"blob","sha":"e6afff6888140797760d2d46400718c041539c0f","size":1586,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/e6afff6888140797760d2d46400718c041539c0f"},{"path":".github/workflows","mode":"040000","type":"tree","sha":"9f40a97e5ad411392d3e633cbe8dd9cb7fbfd881","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/9f40a97e5ad411392d3e633cbe8dd9cb7fbfd881"},{"path":".github/workflows/example-app.yml","mode":"100644","type":"blob","sha":"6a81458c243c45295aebb5b0915b85a42d08f12f","size":5372,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/6a81458c243c45295aebb5b0915b85a42d08f12f"},{"path":".github/workflows/links.yml","mode":"100644","type":"blob","sha":"3e910dce849396a942ca83b0f8ce5b5e91ace0e0","size":3197,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/3e910dce849396a942ca83b0f8ce5b5e91ace0e0"},{"path":".github/workflows/release.yml","mode":"100644","type":"blob","sha":"0facf849bd97ec6796be0fbf1362fba3a3aaf79a","size":23017,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/0facf849bd97ec6796be0fbf1362fba3a3aaf79a"},{"path":".gitignore","mode":"100644","type":"blob","sha":"d6a4d9047490a69e097860182c47a9488aae57e5","size":2195,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/d6a4d9047490a69e097860182c47a9488aae57e5"},{"path":".gitkeep","mode":"100644","type":"blob","sha":"44531a16d8f245b43aa9eecb00bfd5ab1544b569","size":204,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/44531a16d8f245b43aa9eecb00bfd5ab1544b569"},{"path":".husky","mode":"040000","type":"tree","sha":"0ebd40652be4585810e310f9870e6c349b79cf42","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/0ebd40652be4585810e310f9870e6c349b79cf42"},{"path":".husky/pre-commit","mode":"100644","type":"blob","sha":"2312dc587f61186ccf0d627d678d851b9eef7b82","size":16,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/2312dc587f61186ccf0d627d678d851b9eef7b82"},{"path":".jscpd.json","mode":"100644","type":"blob","sha":"db02eb16e3eedd5152d8406305ac60adb5303d35","size":429,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/db02eb16e3eedd5152d8406305ac60adb5303d35"},{"path":".lycheeignore","mode":"100644","type":"blob","sha":"6285ad244b6c8469a0f988d71d3cb2545d35b552","size":721,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/6285ad244b6c8469a0f988d71d3cb2545d35b552"},{"path":".prettierignore","mode":"100644","type":"blob","sha":"ad7422b0a12d8ba5fa8b523f80fa363985ba5ed2","size":183,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/ad7422b0a12d8ba5fa8b523f80fa363985ba5ed2"},{"path":".prettierrc","mode":"100644","type":"blob","sha":"3171de5af7f79900ca857d7462c20b108430a958","size":173,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/3171de5af7f79900ca857d7462c20b108430a958"},{"path":".secretlintrc.json","mode":"100644","type":"blob","sha":"7a1a5df3c28e6739fd639bc2a2eac39f62f9a122","size":92,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/7a1a5df3c28e6739fd639bc2a2eac39f62f9a122"},{"path":"CHANGELOG.md","mode":"100644","type":"blob","sha":"cb80c8e8684128a6326f996b3f26dbd1f39e3b70","size":9284,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/cb80c8e8684128a6326f996b3f26dbd1f39e3b70"},{"path":"LICENSE","mode":"100644","type":"blob","sha":"fdddb29aa445bf3d6a5d843d6dd77e10a9f99657","size":1211,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/fdddb29aa445bf3d6a5d843d6dd77e10a9f99657"},{"path":"README.md","mode":"100644","type":"blob","sha":"727162cbec449922dfee173deb9bea0b0ad5bc46","size":13612,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/727162cbec449922dfee173deb9bea0b0ad5bc46"},{"path":"bin","mode":"040000","type":"tree","sha":"c536cd94ede3509ce1747982e05ea325825e4651","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/c536cd94ede3509ce1747982e05ea325825e4651"},{"path":"bin/example-package-name.js","mode":"100755","type":"blob","sha":"9edc8df84a060cebc5b9a33d805a058436e446c4","size":1940,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/9edc8df84a060cebc5b9a33d805a058436e446c4"},{"path":"bunfig.toml","mode":"100644","type":"blob","sha":"ee9088076ce8f1b1191e57fa0b352d9987f45be5","size":136,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/ee9088076ce8f1b1191e57fa0b352d9987f45be5"},{"path":"deno.json","mode":"100644","type":"blob","sha":"2617bdad48861afb3728d00ed2086248bd941397","size":121,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/2617bdad48861afb3728d00ed2086248bd941397"},{"path":"docs","mode":"040000","type":"tree","sha":"3db143afe47af3f63d497d8676582896bb4134c1","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/3db143afe47af3f63d497d8676582896bb4134c1"},{"path":"docs/BEST-PRACTICES.md","mode":"100644","type":"blob","sha":"0addc3662dd7224c1a354d3e4562910a5016a65d","size":9357,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/0addc3662dd7224c1a354d3e4562910a5016a65d"},{"path":"docs/CONTRIBUTING.md","mode":"100644","type":"blob","sha":"b517e15349348a6f2c725371105809376df2e09e","size":4691,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/b517e15349348a6f2c725371105809376df2e09e"},{"path":"docs/case-studies","mode":"040000","type":"tree","sha":"816f7860cd2f23c5352d51806bf8efebb10c5794","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/816f7860cd2f23c5352d51806bf8efebb10c5794"},{"path":"docs/case-studies/issue-13","mode":"040000","type":"tree","sha":"83d751de7f342febe5a478dc1aa8afeb09df0437","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/83d751de7f342febe5a478dc1aa8afeb09df0437"},{"path":"docs/case-studies/issue-13/README.md","mode":"100644","type":"blob","sha":"4240ba09297c62b04e4723f5205a515fe6c76a76","size":7506,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/4240ba09297c62b04e4723f5205a515fe6c76a76"},{"path":"docs/case-studies/issue-13/hive-mind-issue-960.json","mode":"100644","type":"blob","sha":"6ae0c75dc93183e84012c4d621f7ff45a1e85ab4","size":2202,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/6ae0c75dc93183e84012c4d621f7ff45a1e85ab4"},{"path":"docs/case-studies/issue-13/hive-mind-pr-961-diff.txt","mode":"100644","type":"blob","sha":"ecf74200e52c77859a53df980bfa28a95a695a2c","size":27983,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/ecf74200e52c77859a53df980bfa28a95a695a2c"},{"path":"docs/case-studies/issue-13/hive-mind-pr-961.json","mode":"100644","type":"blob","sha":"3415e7d7db73b9bf577ba00c558eb856b8bd512c","size":6745,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/3415e7d7db73b9bf577ba00c558eb856b8bd512c"},{"path":"docs/case-studies/issue-21","mode":"040000","type":"tree","sha":"8ceaad7f0862d8166a7be01d8038e01dec89f43f","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/8ceaad7f0862d8166a7be01d8038e01dec89f43f"},{"path":"docs/case-studies/issue-21/README.md","mode":"100644","type":"blob","sha":"1a26fcba8943ec81eff9e8819a43f266328313fb","size":14434,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/1a26fcba8943ec81eff9e8819a43f266328313fb"},{"path":"docs/case-studies/issue-21/ci-logs","mode":"040000","type":"tree","sha":"def1a9ae3b42140676c37663c1f81fe86431dc81","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/def1a9ae3b42140676c37663c1f81fe86431dc81"},{"path":"docs/case-studies/issue-21/ci-logs/run-20803315337.txt","mode":"100644","type":"blob","sha":"a62468e1e45ca89d6c21424e0d1e871078b7b5ec","size":133670,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/a62468e1e45ca89d6c21424e0d1e871078b7b5ec"},{"path":"docs/case-studies/issue-21/ci-logs/run-20885464993.txt","mode":"100644","type":"blob","sha":"20541feb33031aa60099af8d8213470b4384bc0e","size":155417,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/20541feb33031aa60099af8d8213470b4384bc0e"},{"path":"docs/case-studies/issue-21/issue-111-data.txt","mode":"100644","type":"blob","sha":"42a4b7b4687914dea32905cab0835ac43ba44a36","size":700,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/42a4b7b4687914dea32905cab0835ac43ba44a36"},{"path":"docs/case-studies/issue-21/issue-113-data.txt","mode":"100644","type":"blob","sha":"157d5bd29fcd9f80e4b97c98308f90fbf9c0b4a3","size":708,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/157d5bd29fcd9f80e4b97c98308f90fbf9c0b4a3"},{"path":"docs/case-studies/issue-21/pr-112-data.json","mode":"100644","type":"blob","sha":"2bde54d68433cb1db973e8fc7a3ff96b28cfeba4","size":4967,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/2bde54d68433cb1db973e8fc7a3ff96b28cfeba4"},{"path":"docs/case-studies/issue-21/pr-112-diff.patch","mode":"100644","type":"blob","sha":"9a61051d2643cf8d43205bf902576c136579b658","size":140742,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/9a61051d2643cf8d43205bf902576c136579b658"},{"path":"docs/case-studies/issue-21/pr-114-data.json","mode":"100644","type":"blob","sha":"bb5f52db99e307cce9c67de5f45f3f7c0eafeca8","size":7852,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/bb5f52db99e307cce9c67de5f45f3f7c0eafeca8"},{"path":"docs/case-studies/issue-21/pr-114-diff.patch","mode":"100644","type":"blob","sha":"33f28bdfa6ba98300f0a4ffb3335c6a36862b298","size":31790,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/33f28bdfa6ba98300f0a4ffb3335c6a36862b298"},{"path":"docs/case-studies/issue-23","mode":"040000","type":"tree","sha":"fdaf95be9969fb93231b55fdf9a7a8dcf7d25b1e","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/fdaf95be9969fb93231b55fdf9a7a8dcf7d25b1e"},{"path":"docs/case-studies/issue-23/README.md","mode":"100644","type":"blob","sha":"3a8e974437af04ba3cbb23fe804be4ebb3fd4ec5","size":9202,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/3a8e974437af04ba3cbb23fe804be4ebb3fd4ec5"},{"path":"docs/case-studies/issue-23/data","mode":"040000","type":"tree","sha":"1277e86873b3e1469bb8e76f54e8cf5977b4cbc2","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/1277e86873b3e1469bb8e76f54e8cf5977b4cbc2"},{"path":"docs/case-studies/issue-23/data/hive-mind-check-version.mjs","mode":"100644","type":"blob","sha":"d177e0f8996fb2ea13878762b32a3ddc118d7fc3","size":3689,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/d177e0f8996fb2ea13878762b32a3ddc118d7fc3"},{"path":"docs/case-studies/issue-23/data/hive-mind-ci.yml","mode":"100644","type":"blob","sha":"b464861d9f38abbd9893395100b807e99a0aa873","size":3,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/b464861d9f38abbd9893395100b807e99a0aa873"},{"path":"docs/case-studies/issue-23/data/hive-mind-eslint.config.mjs","mode":"100644","type":"blob","sha":"ac4d804b59be76659fb96c468c7bdd12a10a0d7e","size":2312,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/ac4d804b59be76659fb96c468c7bdd12a10a0d7e"},{"path":"docs/case-studies/issue-23/data/hive-mind-release.yml","mode":"100644","type":"blob","sha":"f7730771b91d644f9861e821921ccaf57dfb00ec","size":85858,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/f7730771b91d644f9861e821921ccaf57dfb00ec"},{"path":"docs/case-studies/issue-23/data/issue-1126-details.txt","mode":"100644","type":"blob","sha":"686a3eae848a63a25af64799fa490f4a46411b83","size":485,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/686a3eae848a63a25af64799fa490f4a46411b83"},{"path":"docs/case-studies/issue-23/data/issue-1141-comments.json","mode":"100644","type":"blob","sha":"0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc","size":2,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc"},{"path":"docs/case-studies/issue-23/data/issue-1141-details.txt","mode":"100644","type":"blob","sha":"f66b85d7dd36bd9b880b1326ffebee17bb45b969","size":1151,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/f66b85d7dd36bd9b880b1326ffebee17bb45b969"},{"path":"docs/case-studies/issue-23/data/pr-1127-conversation-comments.json","mode":"100644","type":"blob","sha":"bae16e06b841f0a19ddb6e96d689812f44c89bd3","size":17911,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/bae16e06b841f0a19ddb6e96d689812f44c89bd3"},{"path":"docs/case-studies/issue-23/data/pr-1127-diff.txt","mode":"100644","type":"blob","sha":"1c10df9d656e357ae0067c3225e245348b4c20b8","size":11091,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/1c10df9d656e357ae0067c3225e245348b4c20b8"},{"path":"docs/case-studies/issue-23/data/pr-1127-review-comments.json","mode":"100644","type":"blob","sha":"0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc","size":2,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc"},{"path":"docs/case-studies/issue-23/data/pr-1142-conversation-comments.json","mode":"100644","type":"blob","sha":"340a0373059f1c82ab6e29bfa1287a3f3696de53","size":8054,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/340a0373059f1c82ab6e29bfa1287a3f3696de53"},{"path":"docs/case-studies/issue-23/data/pr-1142-diff.txt","mode":"100644","type":"blob","sha":"6ec5321e04e194106aa9e5c57f722803f4907115","size":27946,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/6ec5321e04e194106aa9e5c57f722803f4907115"},{"path":"docs/case-studies/issue-23/data/pr-1142-review-comments.json","mode":"100644","type":"blob","sha":"0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc","size":2,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc"},{"path":"docs/case-studies/issue-25","mode":"040000","type":"tree","sha":"bc3d2d28e71905861b014eac07a85a9038f81629","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/bc3d2d28e71905861b014eac07a85a9038f81629"},{"path":"docs/case-studies/issue-25/DETAILED-COMPARISON.md","mode":"100644","type":"blob","sha":"51fcbe8ba6d381928e23542df83d7192d4be982b","size":17912,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/51fcbe8ba6d381928e23542df83d7192d4be982b"},{"path":"docs/case-studies/issue-25/README.md","mode":"100644","type":"blob","sha":"10e19af530e13ea946942010df0ba5bd273d188d","size":10084,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/10e19af530e13ea946942010df0ba5bd273d188d"},{"path":"docs/case-studies/issue-25/data","mode":"040000","type":"tree","sha":"8e3025b393e4e46b60648445069e92cffcd6ba25","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/8e3025b393e4e46b60648445069e92cffcd6ba25"},{"path":"docs/case-studies/issue-25/data/hive-mind-file-tree.txt","mode":"100644","type":"blob","sha":"d0fb16c96e0aa58e71f53b64c5012a9919dff6c4","size":84928,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/d0fb16c96e0aa58e71f53b64c5012a9919dff6c4"},{"path":"docs/case-studies/issue-25/data/issue-1274-case-study.md","mode":"100644","type":"blob","sha":"6102ea583918590ca11e9cd725c0288679757d79","size":9175,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/6102ea583918590ca11e9cd725c0288679757d79"},{"path":"docs/case-studies/issue-25/data/issue-1278-case-study.md","mode":"100644","type":"blob","sha":"f9bc708565466c654d41b4824686c1f3fde3f9f7","size":13738,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/f9bc708565466c654d41b4824686c1f3fde3f9f7"},{"path":"docs/case-studies/issue-25/data/template-file-tree.txt","mode":"100644","type":"blob","sha":"4af61d7e9eb7a96d4045badf2ab896bd30aec9b8","size":3372,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/4af61d7e9eb7a96d4045badf2ab896bd30aec9b8"},{"path":"docs/case-studies/issue-29","mode":"040000","type":"tree","sha":"626db2e81a46cef4af1eea05b1aca703ae85cb15","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/626db2e81a46cef4af1eea05b1aca703ae85cb15"},{"path":"docs/case-studies/issue-29/README.md","mode":"100644","type":"blob","sha":"df6f5b5a6e695f2d3a34496db4fbe18fb682e9e7","size":6303,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/df6f5b5a6e695f2d3a34496db4fbe18fb682e9e7"},{"path":"docs/case-studies/issue-3","mode":"040000","type":"tree","sha":"87355591b48402586bdc201c45295d4318562d0f","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/87355591b48402586bdc201c45295d4318562d0f"},{"path":"docs/case-studies/issue-3/README.md","mode":"100644","type":"blob","sha":"cb499c982431d42276b0d220d6e2c0be8aa9db6c","size":10928,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/cb499c982431d42276b0d220d6e2c0be8aa9db6c"},{"path":"docs/case-studies/issue-3/created-issues.md","mode":"100644","type":"blob","sha":"8d274a177a7d701f4eca924a0e0e7e9ab515e7f9","size":1274,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/8d274a177a7d701f4eca924a0e0e7e9ab515e7f9"},{"path":"docs/case-studies/issue-3/issue-data.json","mode":"100644","type":"blob","sha":"9a79ea323d9678ecdc9d4d710b8ba46b61a5e55f","size":4625,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/9a79ea323d9678ecdc9d4d710b8ba46b61a5e55f"},{"path":"docs/case-studies/issue-3/original-format-release-notes.mjs","mode":"100644","type":"blob","sha":"6592be615307575e63d80f682f2458bc2bc596cb","size":7649,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/6592be615307575e63d80f682f2458bc2bc596cb"},{"path":"docs/case-studies/issue-3/reference-pr-59-diff.txt","mode":"100644","type":"blob","sha":"78ad4aced552e07bfc57936e231e42e886431464","size":23744,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/78ad4aced552e07bfc57936e231e42e886431464"},{"path":"docs/case-studies/issue-3/reference-pr-59.json","mode":"100644","type":"blob","sha":"4e8c49d707edce4fa721e329197276f6c5284998","size":7914,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/4e8c49d707edce4fa721e329197276f6c5284998"},{"path":"docs/case-studies/issue-3/release-v0.1.0.json","mode":"100644","type":"blob","sha":"421a03f99c59fd3f90a0db29710baabec2efa046","size":1008,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/421a03f99c59fd3f90a0db29710baabec2efa046"},{"path":"docs/case-studies/issue-3/repositories-with-same-script.json","mode":"100644","type":"blob","sha":"a43feeb47fe3a106f0a3719a8eb247a87ec4f8b0","size":771,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/a43feeb47fe3a106f0a3719a8eb247a87ec4f8b0"},{"path":"docs/case-studies/issue-3/research-notes.md","mode":"100644","type":"blob","sha":"9b121414628c2cd9e2005cddc4f1835e948216e0","size":1394,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/9b121414628c2cd9e2005cddc4f1835e948216e0"},{"path":"docs/case-studies/issue-31","mode":"040000","type":"tree","sha":"cbe589a1b202c7cfebdb28d60a57494e7a40c486","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/cbe589a1b202c7cfebdb28d60a57494e7a40c486"},{"path":"docs/case-studies/issue-31/README.md","mode":"100644","type":"blob","sha":"d1af67f1749fdf2563580f722d1a0ba1af133c68","size":4832,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/d1af67f1749fdf2563580f722d1a0ba1af133c68"},{"path":"docs/case-studies/issue-31/web-capture-pr49-commits.json","mode":"100644","type":"blob","sha":"98837b09fb090fda8dafa41d5e21deac2922b060","size":2633,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/98837b09fb090fda8dafa41d5e21deac2922b060"},{"path":"docs/case-studies/issue-33","mode":"040000","type":"tree","sha":"8207f537cc6c8bbdf0d68403529da28b30ed0dd8","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/8207f537cc6c8bbdf0d68403529da28b30ed0dd8"},{"path":"docs/case-studies/issue-33/README.md","mode":"100644","type":"blob","sha":"9ea7d4313d8de96b21c0e5eee68f3e4730140866","size":7513,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/9ea7d4313d8de96b21c0e5eee68f3e4730140866"},{"path":"docs/case-studies/issue-33/ci-logs","mode":"040000","type":"tree","sha":"502e5b1c396577db4fcc0138f0af852450ad4da1","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/502e5b1c396577db4fcc0138f0af852450ad4da1"},{"path":"docs/case-studies/issue-33/ci-logs/release-24395209194.txt","mode":"100644","type":"blob","sha":"364d1424f87d4b83307b9929a7911fcb104839fb","size":786370,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/364d1424f87d4b83307b9929a7911fcb104839fb"},{"path":"docs/case-studies/issue-33/ci-logs/upstream-nodejs-62430.json","mode":"100644","type":"blob","sha":"1202138f19c247d9c53be06f7b539afbd7ffb89a","size":2053,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/1202138f19c247d9c53be06f7b539afbd7ffb89a"},{"path":"docs/case-studies/issue-33/ci-logs/upstream-npm-cli-9151.json","mode":"100644","type":"blob","sha":"b5a72cccbd560ba720394e4b476608dc53915110","size":6870,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/b5a72cccbd560ba720394e4b476608dc53915110"},{"path":"docs/case-studies/issue-33/ci-logs/upstream-runner-images-13883.json","mode":"100644","type":"blob","sha":"fb9133223f9fb47b3933bba70ce9dce1207e4e43","size":4055,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/fb9133223f9fb47b3933bba70ce9dce1207e4e43"},{"path":"docs/case-studies/issue-36","mode":"040000","type":"tree","sha":"ec5c4dba3840a3d33c3358156973144ba68e4fdb","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/ec5c4dba3840a3d33c3358156973144ba68e4fdb"},{"path":"docs/case-studies/issue-36/README.md","mode":"100644","type":"blob","sha":"eeef8d57301beb189c3c1d33c48236897c79584e","size":5048,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/eeef8d57301beb189c3c1d33c48236897c79584e"},{"path":"docs/case-studies/issue-36/ci-logs","mode":"040000","type":"tree","sha":"1084e31a96587e733667613e8315afcce302a62c","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/1084e31a96587e733667613e8315afcce302a62c"},{"path":"docs/case-studies/issue-36/ci-logs/release-24399965550.txt","mode":"100644","type":"blob","sha":"b27caae8745d5233aff3960abfde293370d59622","size":845925,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/b27caae8745d5233aff3960abfde293370d59622"},{"path":"docs/case-studies/issue-38","mode":"040000","type":"tree","sha":"5e8dc46788e00b88f588922d77831dee54e0fd5f","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/5e8dc46788e00b88f588922d77831dee54e0fd5f"},{"path":"docs/case-studies/issue-38/CASE-STUDY.md","mode":"100644","type":"blob","sha":"44c49b962bcbcfb317e3f7269144a4e9adbad90e","size":3067,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/44c49b962bcbcfb317e3f7269144a4e9adbad90e"},{"path":"docs/case-studies/issue-40","mode":"040000","type":"tree","sha":"bae91bf6cce9bba67787767596ce3650cbef242c","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/bae91bf6cce9bba67787767596ce3650cbef242c"},{"path":"docs/case-studies/issue-40/CICD-COMPARISON.md","mode":"100644","type":"blob","sha":"dcc0662bbfa535600b0508b4abe5f7906f6fab09","size":10773,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/dcc0662bbfa535600b0508b4abe5f7906f6fab09"},{"path":"docs/case-studies/issue-40/README.md","mode":"100644","type":"blob","sha":"141a57808f16d380b35f62fb2088a63828a09d72","size":13277,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/141a57808f16d380b35f62fb2088a63828a09d72"},{"path":"docs/case-studies/issue-40/data","mode":"040000","type":"tree","sha":"eb4358c3ff4a31e03e5a3f20a272f797074122df","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/eb4358c3ff4a31e03e5a3f20a272f797074122df"},{"path":"docs/case-studies/issue-40/data/ci-run-25212337438.json","mode":"100644","type":"blob","sha":"6ba06512776d76ac7fdd42bbfd386ea3d7d6bf11","size":411,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/6ba06512776d76ac7fdd42bbfd386ea3d7d6bf11"},{"path":"docs/case-studies/issue-40/data/ci-runs-branch.json","mode":"100644","type":"blob","sha":"53d01b68b5c31786f0db4606d8982dfac7450356","size":197,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/53d01b68b5c31786f0db4606d8982dfac7450356"},{"path":"docs/case-studies/issue-40/data/downstream-web-capture-issue-98.json","mode":"100644","type":"blob","sha":"9eec8aaaafad9306078d1402c38114a080926dbf","size":2335,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/9eec8aaaafad9306078d1402c38114a080926dbf"},{"path":"docs/case-studies/issue-40/data/downstream-web-capture-pr-99.diff","mode":"100644","type":"blob","sha":"33ac3c7c6100fbb9355ccd35a5b2a0b3676c675b","size":35718,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/33ac3c7c6100fbb9355ccd35a5b2a0b3676c675b"},{"path":"docs/case-studies/issue-40/data/downstream-web-capture-pr-99.json","mode":"100644","type":"blob","sha":"5466c04cd452251ba2fa9142c7f5f8b65dd2a432","size":6895,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/5466c04cd452251ba2fa9142c7f5f8b65dd2a432"},{"path":"docs/case-studies/issue-40/data/issue-40.json","mode":"100644","type":"blob","sha":"f56937f019b5bde2f2ee9cf1761559b343c0edc0","size":5646,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/f56937f019b5bde2f2ee9cf1761559b343c0edc0"},{"path":"docs/case-studies/issue-40/data/js-cicd-files.txt","mode":"100644","type":"blob","sha":"74669dac64e1e2e9fa005ef10cf1c1a6913a5a83","size":767,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/74669dac64e1e2e9fa005ef10cf1c1a6913a5a83"},{"path":"docs/case-studies/issue-40/data/js-template-file-tree.txt","mode":"100644","type":"blob","sha":"4da2f847e90677a8a38e2dbb8a58895ff0463f1c","size":4718,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/4da2f847e90677a8a38e2dbb8a58895ff0463f1c"},{"path":"docs/case-studies/issue-40/data/pr-43.json","mode":"100644","type":"blob","sha":"dfac2dcad34b62d2e4edb9b48c37ad60ce3b1f5d","size":7356,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/dfac2dcad34b62d2e4edb9b48c37ad60ce3b1f5d"},{"path":"docs/case-studies/issue-40/data/related-js-merged-prs.json","mode":"100644","type":"blob","sha":"19d1be1136b48816a56410966ee5e71bc29597ae","size":228,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/19d1be1136b48816a56410966ee5e71bc29597ae"},{"path":"docs/case-studies/issue-40/data/rust-cicd-files.txt","mode":"100644","type":"blob","sha":"4e8ca4cf7dd7e49856f983a0c8abf6e2bbf1430a","size":486,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/4e8ca4cf7dd7e49856f983a0c8abf6e2bbf1430a"},{"path":"docs/case-studies/issue-40/data/rust-template-file-tree.txt","mode":"100644","type":"blob","sha":"26f06a79bf244229cf8ef15f12300e9fc4af9300","size":3283,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/26f06a79bf244229cf8ef15f12300e9fc4af9300"},{"path":"docs/case-studies/issue-40/data/rust-template-head.txt","mode":"100644","type":"blob","sha":"13690f5598b5637035d11317b3c32d72c3ce57ac","size":46,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/13690f5598b5637035d11317b3c32d72c3ce57ac"},{"path":"docs/case-studies/issue-40/data/shields-broken-prefixed-badge.svg","mode":"100644","type":"blob","sha":"6c8701aa112c554eee24d9fdaf8f225032a4f541","size":1123,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/6c8701aa112c554eee24d9fdaf8f225032a4f541"},{"path":"docs/case-studies/issue-40/data/shields-broken-prefixed-prerelease-badge.svg","mode":"100644","type":"blob","sha":"6c8701aa112c554eee24d9fdaf8f225032a4f541","size":1123,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/6c8701aa112c554eee24d9fdaf8f225032a4f541"},{"path":"docs/case-studies/issue-40/data/shields-working-normalized-badge.svg","mode":"100644","type":"blob","sha":"0f2c111a6329420dc96ec24f4fe3cda0af62e8a6","size":1083,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/0f2c111a6329420dc96ec24f4fe3cda0af62e8a6"},{"path":"docs/case-studies/issue-40/data/shields-working-prerelease-badge.svg","mode":"100644","type":"blob","sha":"fea633df9d9d5af5248916497de2fc981479a24d","size":1114,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/fea633df9d9d5af5248916497de2fc981479a24d"},{"path":"docs/case-studies/issue-40/rust-template","mode":"040000","type":"tree","sha":"ea8240c09668e20193b8871bb3fd473d9f385f7f","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/ea8240c09668e20193b8871bb3fd473d9f385f7f"},{"path":"docs/case-studies/issue-40/rust-template/create-github-release.rs","mode":"100644","type":"blob","sha":"fb45ae8ad9baa3d49a1e0007f959e0ffb5b0144a","size":7005,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/fb45ae8ad9baa3d49a1e0007f959e0ffb5b0144a"},{"path":"docs/case-studies/issue-40/rust-template/release.yml","mode":"100644","type":"blob","sha":"e8b6fb77030f59ecbb748c3e98c2d1cdeba0e079","size":16372,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/e8b6fb77030f59ecbb748c3e98c2d1cdeba0e079"},{"path":"docs/case-studies/issue-41","mode":"040000","type":"tree","sha":"201e76d4d1a316eb7577d5cd8d4368487e5b7554","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/201e76d4d1a316eb7577d5cd8d4368487e5b7554"},{"path":"docs/case-studies/issue-41/README.md","mode":"100644","type":"blob","sha":"e7a11e92f4d85d7e038c8a70f18a11cd19b77ecd","size":11477,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/e7a11e92f4d85d7e038c8a70f18a11cd19b77ecd"},{"path":"docs/case-studies/issue-41/data","mode":"040000","type":"tree","sha":"6415121b0f8210e5c8057076436c90e00d043051","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/6415121b0f8210e5c8057076436c90e00d043051"},{"path":"docs/case-studies/issue-41/data/hive-mind-check-file-line-limits.sh","mode":"100644","type":"blob","sha":"65630d5c03e8fc939158a1ea0ae7a0bd6f2c39b7","size":3061,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/65630d5c03e8fc939158a1ea0ae7a0bd6f2c39b7"},{"path":"docs/case-studies/issue-41/data/hive-mind-file-tree.txt","mode":"100644","type":"blob","sha":"a34017ffb02a64aa83ac0bfb79f09bf516883d19","size":149581,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/a34017ffb02a64aa83ac0bfb79f09bf516883d19"},{"path":"docs/case-studies/issue-41/data/hive-mind-issue-1593-case-study.md","mode":"100644","type":"blob","sha":"e06ec2958ee042bf0880209664c18509dc946ad9","size":5126,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/e06ec2958ee042bf0880209664c18509dc946ad9"},{"path":"docs/case-studies/issue-41/data/hive-mind-issue-1593-comments.json","mode":"100644","type":"blob","sha":"0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc","size":2,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc"},{"path":"docs/case-studies/issue-41/data/hive-mind-issue-1593.json","mode":"100644","type":"blob","sha":"974f28e357c4a075c4d4cc1bb0d385507f16f332","size":5063,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/974f28e357c4a075c4d4cc1bb0d385507f16f332"},{"path":"docs/case-studies/issue-41/data/hive-mind-issue-1730-case-study.md","mode":"100644","type":"blob","sha":"bb5c8cee718a3f5589831531974d36b7dfac95a1","size":11040,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/bb5c8cee718a3f5589831531974d36b7dfac95a1"},{"path":"docs/case-studies/issue-41/data/hive-mind-issue-1730-comments.json","mode":"100644","type":"blob","sha":"0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc","size":2,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc"},{"path":"docs/case-studies/issue-41/data/hive-mind-issue-1730.json","mode":"100644","type":"blob","sha":"1f233f4ddcfcb852074e51885bdecfa349fcbcb9","size":5509,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/1f233f4ddcfcb852074e51885bdecfa349fcbcb9"},{"path":"docs/case-studies/issue-41/data/js-template-check-file-line-limits-before.sh","mode":"100755","type":"blob","sha":"ae66f276e915cebabf8fc40fb2f21034acb24540","size":1634,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/ae66f276e915cebabf8fc40fb2f21034acb24540"},{"path":"docs/case-studies/issue-41/data/js-template-eslint.config.js","mode":"100644","type":"blob","sha":"ee9438eaf039289497c80c99dd512e54601be5e8","size":2850,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/ee9438eaf039289497c80c99dd512e54601be5e8"},{"path":"docs/case-studies/issue-41/data/js-template-file-tree.txt","mode":"100644","type":"blob","sha":"0d097a3f8e1f718d11176cbe8fe31444516def9a","size":4857,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/0d097a3f8e1f718d11176cbe8fe31444516def9a"},{"path":"docs/case-studies/issue-41/data/js-template-issue-41-comments.json","mode":"100644","type":"blob","sha":"3dad1f8506041d5a34ef8fee2f9791f4b3f3ff75","size":3398,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/3dad1f8506041d5a34ef8fee2f9791f4b3f3ff75"},{"path":"docs/case-studies/issue-41/data/js-template-issue-41.json","mode":"100644","type":"blob","sha":"b53a5ae005d9b1ef351fde3fbf8ca2e6388265a7","size":5693,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/b53a5ae005d9b1ef351fde3fbf8ca2e6388265a7"},{"path":"docs/case-studies/issue-41/data/js-template-release.yml","mode":"100644","type":"blob","sha":"7090eb5402bbe81fdda60c8a16e991cf33b22842","size":19369,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/7090eb5402bbe81fdda60c8a16e991cf33b22842"},{"path":"docs/case-studies/issue-41/data/js-template-warn-threshold-search-before.json","mode":"100644","type":"blob","sha":"fe51488c7066f6687ef680d6bfaa4f7768ef205c","size":3,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/fe51488c7066f6687ef680d6bfaa4f7768ef205c"},{"path":"docs/case-studies/issue-41/data/rust-template-check-file-size.rs","mode":"100644","type":"blob","sha":"f5eb668f5bea2a043c810163f6e506951fd1a2ea","size":2764,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/f5eb668f5bea2a043c810163f6e506951fd1a2ea"},{"path":"docs/case-studies/issue-41/data/rust-template-created-issue-url.txt","mode":"100644","type":"blob","sha":"48194880154ae0f69a51822eee76d87e4f95bf3f","size":90,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/48194880154ae0f69a51822eee76d87e4f95bf3f"},{"path":"docs/case-studies/issue-41/data/rust-template-file-tree.txt","mode":"100644","type":"blob","sha":"b450b235bffc24455f31e6f0803fa339699bd019","size":3730,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/b450b235bffc24455f31e6f0803fa339699bd019"},{"path":"docs/case-studies/issue-41/data/rust-template-issue-40.json","mode":"100644","type":"blob","sha":"252b8b76588b657cf639df12fca6a479ff248bd5","size":2561,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/252b8b76588b657cf639df12fca6a479ff248bd5"},{"path":"docs/case-studies/issue-41/data/rust-template-issues.json","mode":"100644","type":"blob","sha":"6da0d1785e2aaef43da001247d894f7989e5a846","size":10031,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/6da0d1785e2aaef43da001247d894f7989e5a846"},{"path":"docs/case-studies/issue-41/data/rust-template-max-lines-search.json","mode":"100644","type":"blob","sha":"fe51488c7066f6687ef680d6bfaa4f7768ef205c","size":3,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/fe51488c7066f6687ef680d6bfaa4f7768ef205c"},{"path":"docs/case-studies/issue-41/data/rust-template-release.yml","mode":"100644","type":"blob","sha":"e8b6fb77030f59ecbb748c3e98c2d1cdeba0e079","size":16372,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/e8b6fb77030f59ecbb748c3e98c2d1cdeba0e079"},{"path":"docs/case-studies/issue-42","mode":"040000","type":"tree","sha":"07f013b73159dd41e9c6daa13ab45d12d3494d6f","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/07f013b73159dd41e9c6daa13ab45d12d3494d6f"},{"path":"docs/case-studies/issue-42/README.md","mode":"100644","type":"blob","sha":"63c1cdeabfb47052b10f3003115185e53962d76f","size":6516,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/63c1cdeabfb47052b10f3003115185e53962d76f"},{"path":"docs/case-studies/issue-42/data","mode":"040000","type":"tree","sha":"bee9839eee803ec4fd02759b639b35151daa0e1a","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/bee9839eee803ec4fd02759b639b35151daa0e1a"},{"path":"docs/case-studies/issue-42/data/ci-runs-branch.json","mode":"100644","type":"blob","sha":"c4762b0ceeaf9f94548d6f0b0091907b8c61774c","size":197,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/c4762b0ceeaf9f94548d6f0b0091907b8c61774c"},{"path":"docs/case-studies/issue-42/data/issue-42-comments.json","mode":"100644","type":"blob","sha":"68b41b48f493453376926ded7f77289a6f886b5a","size":3398,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/68b41b48f493453376926ded7f77289a6f886b5a"},{"path":"docs/case-studies/issue-42/data/issue-42.json","mode":"100644","type":"blob","sha":"2141397162ffcddbbb1523094cc39d15ea96d034","size":3513,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/2141397162ffcddbbb1523094cc39d15ea96d034"},{"path":"docs/case-studies/issue-42/data/js-template-file-tree.txt","mode":"100644","type":"blob","sha":"b1155ad314a059cf5d88b4a2dfbe47eda3d0a833","size":4793,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/b1155ad314a059cf5d88b4a2dfbe47eda3d0a833"},{"path":"docs/case-studies/issue-42/data/js-template-pre-fix-head.txt","mode":"100644","type":"blob","sha":"12d1272ba47453fba0e3753446e5995c16e8fc29","size":41,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/12d1272ba47453fba0e3753446e5995c16e8fc29"},{"path":"docs/case-studies/issue-42/data/link-foundation-my-package-search.txt","mode":"100644","type":"blob","sha":"b65cceb6b0cb36a42fd83c8d4df48bd785f921d9","size":4692,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/b65cceb6b0cb36a42fd83c8d4df48bd785f921d9"},{"path":"docs/case-studies/issue-42/data/link-foundation-package-name-search.txt","mode":"100644","type":"blob","sha":"d06ee4f3368eb20ef0e3e20d8eaf7c51b47525af","size":7460,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/d06ee4f3368eb20ef0e3e20d8eaf7c51b47525af"},{"path":"docs/case-studies/issue-42/data/pr-45-conversation-comments.json","mode":"100644","type":"blob","sha":"fe51488c7066f6687ef680d6bfaa4f7768ef205c","size":3,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/fe51488c7066f6687ef680d6bfaa4f7768ef205c"},{"path":"docs/case-studies/issue-42/data/pr-45-review-comments.json","mode":"100644","type":"blob","sha":"fe51488c7066f6687ef680d6bfaa4f7768ef205c","size":3,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/fe51488c7066f6687ef680d6bfaa4f7768ef205c"},{"path":"docs/case-studies/issue-42/data/pr-45-reviews.json","mode":"100644","type":"blob","sha":"fe51488c7066f6687ef680d6bfaa4f7768ef205c","size":3,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/fe51488c7066f6687ef680d6bfaa4f7768ef205c"},{"path":"docs/case-studies/issue-42/data/pr-45.json","mode":"100644","type":"blob","sha":"d572a0d618c6e1dc0b55785879f47a4976e45d83","size":8012,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/d572a0d618c6e1dc0b55785879f47a4976e45d83"},{"path":"docs/case-studies/issue-42/data/related-merged-prs-check-release-needed.json","mode":"100644","type":"blob","sha":"d40584a362b598dfeeb83e256184502f8645a430","size":638,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/d40584a362b598dfeeb83e256184502f8645a430"},{"path":"docs/case-studies/issue-42/data/related-merged-prs-publish-to-npm.json","mode":"100644","type":"blob","sha":"fa8fc68a81e4beb9b9f022f5a0177333804ba6a3","size":1252,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/fa8fc68a81e4beb9b9f022f5a0177333804ba6a3"},{"path":"docs/case-studies/issue-42/data/rust-template-ci-cd-findings.txt","mode":"100644","type":"blob","sha":"c9006adf7c8151f39b1144cdf812d78b0bba3706","size":3070,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/c9006adf7c8151f39b1144cdf812d78b0bba3706"},{"path":"docs/case-studies/issue-42/data/rust-template-file-tree.txt","mode":"100644","type":"blob","sha":"4665a655c09cbc003d2d548813ccef33b55baec4","size":3222,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/4665a655c09cbc003d2d548813ccef33b55baec4"},{"path":"docs/case-studies/issue-42/data/rust-template-head.txt","mode":"100644","type":"blob","sha":"e0ae5c96230d55e2a0ece9aac2524f5dbb547148","size":41,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/e0ae5c96230d55e2a0ece9aac2524f5dbb547148"},{"path":"docs/case-studies/issue-56","mode":"040000","type":"tree","sha":"e2adce984ccbdc958c15e022fe365f25fdc4871b","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/e2adce984ccbdc958c15e022fe365f25fdc4871b"},{"path":"docs/case-studies/issue-56/README.md","mode":"100644","type":"blob","sha":"5472a380d84ec531d7d65ad1636943fc98c47e9e","size":11579,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/5472a380d84ec531d7d65ad1636943fc98c47e9e"},{"path":"docs/case-studies/issue-56/artifacts","mode":"040000","type":"tree","sha":"73b80761015ea1657603498aabbfcf879211bd4e","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/73b80761015ea1657603498aabbfcf879211bd4e"},{"path":"docs/case-studies/issue-56/artifacts/universal-app-mobile.png","mode":"100644","type":"blob","sha":"6b499c74e52dea4106193d97ddc7d4d9bfae6422","size":80586,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/6b499c74e52dea4106193d97ddc7d4d9bfae6422"},{"path":"docs/case-studies/issue-56/artifacts/universal-app-web.png","mode":"100644","type":"blob","sha":"b556f7d42a15bd06f82aaef6dfd1870de4f0cd6e","size":179773,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/b556f7d42a15bd06f82aaef6dfd1870de4f0cd6e"},{"path":"docs/case-studies/issue-56/data","mode":"040000","type":"tree","sha":"f9bfbadc68f917d045c980b7d98f4db424aa5060","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/f9bfbadc68f917d045c980b7d98f4db424aa5060"},{"path":"docs/case-studies/issue-56/data/actions-checkout-release.json","mode":"100644","type":"blob","sha":"3c7f153d82affbb7e1ed3e8b75161d35ee4f12cf","size":122,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/3c7f153d82affbb7e1ed3e8b75161d35ee4f12cf"},{"path":"docs/case-studies/issue-56/data/actions-configure-pages-release.json","mode":"100644","type":"blob","sha":"dd2331409299beef659c995a96db3b82faa6f667","size":58,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/dd2331409299beef659c995a96db3b82faa6f667"},{"path":"docs/case-studies/issue-56/data/actions-deploy-pages-release.json","mode":"100644","type":"blob","sha":"8a030d8fc12159783ba91340b2bd3711cf2f95a1","size":58,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/8a030d8fc12159783ba91340b2bd3711cf2f95a1"},{"path":"docs/case-studies/issue-56/data/actions-setup-node-release.json","mode":"100644","type":"blob","sha":"7a12823d671c0b3a2ee8b749cfe678734d9e8724","size":124,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/7a12823d671c0b3a2ee8b749cfe678734d9e8724"},{"path":"docs/case-studies/issue-56/data/actions-upload-artifact-release.json","mode":"100644","type":"blob","sha":"3998d30979d81b2c61d57247e3899d754445d76e","size":129,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/3998d30979d81b2c61d57247e3899d754445d76e"},{"path":"docs/case-studies/issue-56/data/actions-upload-pages-artifact-release.json","mode":"100644","type":"blob","sha":"df8443358aa99a7c71471a3d6df3e93be68bdcf7","size":58,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/df8443358aa99a7c71471a3d6df3e93be68bdcf7"},{"path":"docs/case-studies/issue-56/data/bun-test-final.log","mode":"100644","type":"blob","sha":"7f61e2762301df34f507ee40defb04509e16bf01","size":5369,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/7f61e2762301df34f507ee40defb04509e16bf01"},{"path":"docs/case-studies/issue-56/data/changeset-status-after-stage.log","mode":"100644","type":"blob","sha":"6125608d9786f91aeac648dd9746688792050569","size":260,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/6125608d9786f91aeac648dd9746688792050569"},{"path":"docs/case-studies/issue-56/data/check-file-line-limits-final-2.log","mode":"100644","type":"blob","sha":"3b33ea202f2662158c856c13ced1bc062408a258","size":1830,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/3b33ea202f2662158c856c13ced1bc062408a258"},{"path":"docs/case-studies/issue-56/data/check-mjs-syntax-final-2.log","mode":"100644","type":"blob","sha":"d4296eff7a16eef849cf690cf10dfa9d60591493","size":962,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/d4296eff7a16eef849cf690cf10dfa9d60591493"},{"path":"docs/case-studies/issue-56/data/deep-sdk-capacitor.config.ts","mode":"100644","type":"blob","sha":"39a98561bff5629cc2206ab202bc00ab70d5d45d","size":321,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/39a98561bff5629cc2206ab202bc00ab70d5d45d"},{"path":"docs/case-studies/issue-56/data/deep-sdk-electron-package.json","mode":"100644","type":"blob","sha":"2e713ea0f6c7934d74db79a192d0834d4525e122","size":2911,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/2e713ea0f6c7934d74db79a192d0834d4525e122"},{"path":"docs/case-studies/issue-56/data/deep-sdk-file-tree.txt","mode":"100644","type":"blob","sha":"57d07f56a204b060e44faa44e5c6407a1a1827d1","size":7845,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/57d07f56a204b060e44faa44e5c6407a1a1827d1"},{"path":"docs/case-studies/issue-56/data/deep-sdk-gh-pages.yml","mode":"100644","type":"blob","sha":"1df1ce27dbe53d4c58fe548f46cc342d1dde2761","size":2930,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/1df1ce27dbe53d4c58fe548f46cc342d1dde2761"},{"path":"docs/case-studies/issue-56/data/deep-sdk-package.json","mode":"100644","type":"blob","sha":"7c02a08faec43bfcf25d9a09d0904fc00a339480","size":3778,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/7c02a08faec43bfcf25d9a09d0904fc00a339480"},{"path":"docs/case-studies/issue-56/data/deep-sdk-repo.json","mode":"100644","type":"blob","sha":"0c711a4bfaa1f00e5c35174c504ef456d31b77c7","size":344,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/0c711a4bfaa1f00e5c35174c504ef456d31b77c7"},{"path":"docs/case-studies/issue-56/data/deno-test-final.log","mode":"100644","type":"blob","sha":"86703126adb14c07cee07a801714cbd27a2e2668","size":12781,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/86703126adb14c07cee07a801714cbd27a2e2668"},{"path":"docs/case-studies/issue-56/data/example-desktop-package-final-2.log","mode":"100644","type":"blob","sha":"7cedf02d2e323c1ff1f3c18e80ffb303703352cd","size":1292,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/7cedf02d2e323c1ff1f3c18e80ffb303703352cd"},{"path":"docs/case-studies/issue-56/data/example-mobile-sync-final-2.log","mode":"100644","type":"blob","sha":"fb1662b60a56ec7d3c22126fb1ed7ed229c8305b","size":625,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/fb1662b60a56ec7d3c22126fb1ed7ed229c8305b"},{"path":"docs/case-studies/issue-56/data/example-web-build-final-2.log","mode":"100644","type":"blob","sha":"14b2fda2a2d23c83da71fb40fecc7d38cc6fa39e","size":466,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/14b2fda2a2d23c83da71fb40fecc7d38cc6fa39e"},{"path":"docs/case-studies/issue-56/data/issue-56-comments.json","mode":"100644","type":"blob","sha":"0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc","size":2,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc"},{"path":"docs/case-studies/issue-56/data/issue-56.json","mode":"100644","type":"blob","sha":"3e08c4e2cadba2c5f41cd3f5e911a23097756d77","size":5024,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/3e08c4e2cadba2c5f41cd3f5e911a23097756d77"},{"path":"docs/case-studies/issue-56/data/link-foundation-code-search.json","mode":"100644","type":"blob","sha":"fe51488c7066f6687ef680d6bfaa4f7768ef205c","size":3,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/fe51488c7066f6687ef680d6bfaa4f7768ef205c"},{"path":"docs/case-studies/issue-56/data/npm-capacitor-cli.json","mode":"100644","type":"blob","sha":"d1a583dce4d4e36a420cc7882c53e652756704fd","size":268,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/d1a583dce4d4e36a420cc7882c53e652756704fd"},{"path":"docs/case-studies/issue-56/data/npm-capacitor-core.json","mode":"100644","type":"blob","sha":"d1a583dce4d4e36a420cc7882c53e652756704fd","size":268,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/d1a583dce4d4e36a420cc7882c53e652756704fd"},{"path":"docs/case-studies/issue-56/data/npm-check-final-4.log","mode":"100644","type":"blob","sha":"00404e50341b76d7c6642cb1efa4def388b0085f","size":524,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/00404e50341b76d7c6642cb1efa4def388b0085f"},{"path":"docs/case-studies/issue-56/data/npm-electron-forge-cli.json","mode":"100644","type":"blob","sha":"ec4183d044e0ea534bbf7b747420e23ccf15ed53","size":279,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/ec4183d044e0ea534bbf7b747420e23ccf15ed53"},{"path":"docs/case-studies/issue-56/data/npm-install-root.log","mode":"100644","type":"blob","sha":"4e70da35565c29705d1d025e6b750905a531542a","size":269,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/4e70da35565c29705d1d025e6b750905a531542a"},{"path":"docs/case-studies/issue-56/data/npm-install-universal-app-node20-compatible.log","mode":"100644","type":"blob","sha":"ecfa7964478025b50fd97214a9aebd8990418c3d","size":3407,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/ecfa7964478025b50fd97214a9aebd8990418c3d"},{"path":"docs/case-studies/issue-56/data/npm-test-final-3.log","mode":"100644","type":"blob","sha":"888e10e42bbde4fefebe9af992d1f76a132ada66","size":11932,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/888e10e42bbde4fefebe9af992d1f76a132ada66"},{"path":"docs/case-studies/issue-56/data/npm-vite.json","mode":"100644","type":"blob","sha":"8d95d054a7bfe783100d45eaa6b7cf5503e1176d","size":266,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/8d95d054a7bfe783100d45eaa6b7cf5503e1176d"},{"path":"docs/case-studies/issue-56/data/pr-57.json","mode":"100644","type":"blob","sha":"248d3a3d43c49aa5adb8023b615ae6be3153a27e","size":8201,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/248d3a3d43c49aa5adb8023b615ae6be3153a27e"},{"path":"docs/case-studies/issue-56/data/recent-merged-prs.json","mode":"100644","type":"blob","sha":"81c8e8cdfdc05540b902d561b79a293ae5753c6f","size":2170,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/81c8e8cdfdc05540b902d561b79a293ae5753c6f"},{"path":"docs/case-studies/issue-56/data/universal-app-test-before.log","mode":"100644","type":"blob","sha":"144c79b0931e5930c5136952caaeb49382107566","size":5907,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/144c79b0931e5930c5136952caaeb49382107566"},{"path":"docs/case-studies/issue-56/data/universal-app-test-final-2.log","mode":"100644","type":"blob","sha":"b29057aecee4cb8fa33bc7b7b0d369588e8f9248","size":1218,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/b29057aecee4cb8fa33bc7b7b0d369588e8f9248"},{"path":"docs/case-studies/issue-56/data/validate-changeset-final.log","mode":"100644","type":"blob","sha":"837a84ac2c1b92ec6f770f1805f0c8351ebd2ea7","size":508,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/837a84ac2c1b92ec6f770f1805f0c8351ebd2ea7"},{"path":"docs/case-studies/issue-56/data/vk-bot-desktop-build-renderer.mjs","mode":"100644","type":"blob","sha":"8c1c30bc9ecc91f4fe8a17806a571966bdbe183a","size":1511,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/8c1c30bc9ecc91f4fe8a17806a571966bdbe183a"},{"path":"docs/case-studies/issue-56/data/vk-bot-desktop-electron-main.cjs","mode":"100644","type":"blob","sha":"3b1bd5d146be2bcc75bb7ab7b2010aa53c2ee996","size":6128,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/3b1bd5d146be2bcc75bb7ab7b2010aa53c2ee996"},{"path":"docs/case-studies/issue-56/data/vk-bot-desktop-file-tree.txt","mode":"100644","type":"blob","sha":"92352becc1a7fd772f14fb5caaf7656d9a316834","size":32571,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/92352becc1a7fd772f14fb5caaf7656d9a316834"},{"path":"docs/case-studies/issue-56/data/vk-bot-desktop-js-workflow.yml","mode":"100644","type":"blob","sha":"090cb1790fbf183dbdb6f1e770a04a7043152637","size":51231,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/090cb1790fbf183dbdb6f1e770a04a7043152637"},{"path":"docs/case-studies/issue-56/data/vk-bot-desktop-package.json","mode":"100644","type":"blob","sha":"4e13d7f1a4e8f8ad24aa7652b61216636f99acd6","size":4667,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/4e13d7f1a4e8f8ad24aa7652b61216636f99acd6"},{"path":"docs/case-studies/issue-56/data/vk-bot-desktop-repo.json","mode":"100644","type":"blob","sha":"1c9bbc56fcb352985a43794d53a3657fabed6372","size":388,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/1c9bbc56fcb352985a43794d53a3657fabed6372"},{"path":"docs/case-studies/issue-58","mode":"040000","type":"tree","sha":"aff45a09ecf4d2343da1e3bc2f8a566e7db098b6","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/aff45a09ecf4d2343da1e3bc2f8a566e7db098b6"},{"path":"docs/case-studies/issue-58/README.md","mode":"100644","type":"blob","sha":"68c8f334e8d79c8e264c232953ec0ae66d999177","size":16087,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/68c8f334e8d79c8e264c232953ec0ae66d999177"},{"path":"docs/case-studies/issue-58/data","mode":"040000","type":"tree","sha":"22c03f259ea6ef5f838bb6f8dddf7156b0cefdf9","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/22c03f259ea6ef5f838bb6f8dddf7156b0cefdf9"},{"path":"docs/case-studies/issue-58/data/actions-configure-pages-release.json","mode":"100644","type":"blob","sha":"d7edac730c22fb4fb34c0f51dde00bcf987cb994","size":129,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/d7edac730c22fb4fb34c0f51dde00bcf987cb994"},{"path":"docs/case-studies/issue-58/data/actions-deploy-pages-release.json","mode":"100644","type":"blob","sha":"f234bbe5d4b37bc7139ae5eb0c063cdecd45375e","size":126,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/f234bbe5d4b37bc7139ae5eb0c063cdecd45375e"},{"path":"docs/case-studies/issue-58/data/actions-upload-artifact-release.json","mode":"100644","type":"blob","sha":"3998d30979d81b2c61d57247e3899d754445d76e","size":129,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/3998d30979d81b2c61d57247e3899d754445d76e"},{"path":"docs/case-studies/issue-58/data/actions-upload-pages-artifact-release.json","mode":"100644","type":"blob","sha":"7813651e3bdbf058671a23674e57dc5fd77fd055","size":135,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/7813651e3bdbf058671a23674e57dc5fd77fd055"},{"path":"docs/case-studies/issue-58/data/bun-test.log","mode":"100644","type":"blob","sha":"41dbb38a2b60b96ec4649d66397c16a02a461e55","size":5894,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/41dbb38a2b60b96ec4649d66397c16a02a461e55"},{"path":"docs/case-studies/issue-58/data/check-file-line-limits.log","mode":"100644","type":"blob","sha":"3b33ea202f2662158c856c13ced1bc062408a258","size":1830,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/3b33ea202f2662158c856c13ced1bc062408a258"},{"path":"docs/case-studies/issue-58/data/check-mjs-syntax.log","mode":"100644","type":"blob","sha":"d4296eff7a16eef849cf690cf10dfa9d60591493","size":962,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/d4296eff7a16eef849cf690cf10dfa9d60591493"},{"path":"docs/case-studies/issue-58/data/checks-and-release-25733140225.json","mode":"100644","type":"blob","sha":"e6ee8169579ffd7ffcabc2caa9f819b413277308","size":34615,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/e6ee8169579ffd7ffcabc2caa9f819b413277308"},{"path":"docs/case-studies/issue-58/data/checks-and-release-25733140225.log","mode":"100644","type":"blob","sha":"89176333af05dacd9e61d91c255fe14aab1da381","size":922703,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/89176333af05dacd9e61d91c255fe14aab1da381"},{"path":"docs/case-studies/issue-58/data/checks-and-release-25743983223.log","mode":"100644","type":"blob","sha":"6977b0ce9647db319a394062cc045969aaa054c8","size":862109,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/6977b0ce9647db319a394062cc045969aaa054c8"},{"path":"docs/case-studies/issue-58/data/ci-run-25743983223.json","mode":"100644","type":"blob","sha":"18fde5b129f00f12581516438d897ed479357bc7","size":28333,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/18fde5b129f00f12581516438d897ed479357bc7"},{"path":"docs/case-studies/issue-58/data/csharp-template-file-tree.txt","mode":"100644","type":"blob","sha":"d9d5a99a20d94c02448c1d204511122b8b5f23fd","size":942,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/d9d5a99a20d94c02448c1d204511122b8b5f23fd"},{"path":"docs/case-studies/issue-58/data/csharp-template-release.yml","mode":"100644","type":"blob","sha":"499b729cdb5811aa72d350eeddcf0f02663316f9","size":17724,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/499b729cdb5811aa72d350eeddcf0f02663316f9"},{"path":"docs/case-studies/issue-58/data/deno-test.log","mode":"100644","type":"blob","sha":"4e95e9205a4b87598c421effa1f39ad1f7c9942e","size":4002,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/4e95e9205a4b87598c421effa1f39ad1f7c9942e"},{"path":"docs/case-studies/issue-58/data/example-app-25733140224.json","mode":"100644","type":"blob","sha":"efbb9b42e3758516f9feb55d6227f52a457110aa","size":8976,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/efbb9b42e3758516f9feb55d6227f52a457110aa"},{"path":"docs/case-studies/issue-58/data/example-app-25733140224.log","mode":"100644","type":"blob","sha":"c04157f00887b181dfdef47f1e7fb272e802f736","size":167869,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/c04157f00887b181dfdef47f1e7fb272e802f736"},{"path":"docs/case-studies/issue-58/data/example-desktop-package.log","mode":"100644","type":"blob","sha":"a31473070434ac735c0db8c514a37bb2eba431ed","size":1320,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/a31473070434ac735c0db8c514a37bb2eba431ed"},{"path":"docs/case-studies/issue-58/data/example-mobile-sync.log","mode":"100644","type":"blob","sha":"9c4d5ca53c3e5920c2d91322916f133f8497b814","size":653,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/9c4d5ca53c3e5920c2d91322916f133f8497b814"},{"path":"docs/case-studies/issue-58/data/example-web-build.log","mode":"100644","type":"blob","sha":"751f367821563754645c88a66afdf5841400313c","size":494,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/751f367821563754645c88a66afdf5841400313c"},{"path":"docs/case-studies/issue-58/data/issue-58-comments.json","mode":"100644","type":"blob","sha":"0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc","size":2,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc"},{"path":"docs/case-studies/issue-58/data/issue-58.json","mode":"100644","type":"blob","sha":"43d2fd3f08f90b8058dd33fd185194baa4ef3fa6","size":2845,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/43d2fd3f08f90b8058dd33fd185194baa4ef3fa6"},{"path":"docs/case-studies/issue-58/data/js-template-file-tree.txt","mode":"100644","type":"blob","sha":"fc43d46a2c4459053b6a91ace927607dde4267bd","size":12582,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/fc43d46a2c4459053b6a91ace927607dde4267bd"},{"path":"docs/case-studies/issue-58/data/link-foundation-example-package-name-search.json","mode":"100644","type":"blob","sha":"fe51488c7066f6687ef680d6bfaa4f7768ef205c","size":3,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/fe51488c7066f6687ef680d6bfaa4f7768ef205c"},{"path":"docs/case-studies/issue-58/data/main-ci-runs.json","mode":"100644","type":"blob","sha":"ec48d538bd319d15807f0522e74f61ccc0fd62ff","size":8650,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/ec48d538bd319d15807f0522e74f61ccc0fd62ff"},{"path":"docs/case-studies/issue-58/data/npm-check-final.log","mode":"100644","type":"blob","sha":"cddd97e17a94b14621cfc02f3bf2d9caab8af99b","size":674,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/cddd97e17a94b14621cfc02f3bf2d9caab8af99b"},{"path":"docs/case-studies/issue-58/data/npm-example-package-name-view.json","mode":"100644","type":"blob","sha":"f10c59fe6679986d1b6d1d438ff2c3cf7e189f9e","size":896,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/f10c59fe6679986d1b6d1d438ff2c3cf7e189f9e"},{"path":"docs/case-studies/issue-58/data/npm-global-install.log","mode":"100644","type":"blob","sha":"260887b9e90b658a65b3f368460645e51156d0bf","size":29,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/260887b9e90b658a65b3f368460645e51156d0bf"},{"path":"docs/case-studies/issue-58/data/npm-install-after-metadata.log","mode":"100644","type":"blob","sha":"f0a4742a3e0436e9a943866a112389ab0f41f122","size":297,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/f0a4742a3e0436e9a943866a112389ab0f41f122"},{"path":"docs/case-studies/issue-58/data/npm-install-universal-app.log","mode":"100644","type":"blob","sha":"d255a7cb3eabaacc84795947fc658b04f3163734","size":3407,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/d255a7cb3eabaacc84795947fc658b04f3163734"},{"path":"docs/case-studies/issue-58/data/npm-install.log","mode":"100644","type":"blob","sha":"d32f92729c9c23ce52a83dcaf9c94b1f252cd414","size":279,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/d32f92729c9c23ce52a83dcaf9c94b1f252cd414"},{"path":"docs/case-studies/issue-58/data/npm-pack-dry-run-final.json","mode":"100644","type":"blob","sha":"523433b559cc79ee47c422537a613cb2a4a0984a","size":1140,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/523433b559cc79ee47c422537a613cb2a4a0984a"},{"path":"docs/case-studies/issue-58/data/npm-test-2.log","mode":"100644","type":"blob","sha":"63551cf4220a04ff91aed19395332db34c5b6d5a","size":12944,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/63551cf4220a04ff91aed19395332db34c5b6d5a"},{"path":"docs/case-studies/issue-58/data/npm-whoami.log","mode":"100644","type":"blob","sha":"ea0af632f5ca3ceb7cdda8d20698d9760946292b","size":275,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/ea0af632f5ca3ceb7cdda8d20698d9760946292b"},{"path":"docs/case-studies/issue-58/data/pages-enable-result.json","mode":"100644","type":"blob","sha":"bd113afcdcd98aa31e53819fc774f40dd6f3702f","size":404,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/bd113afcdcd98aa31e53819fc774f40dd6f3702f"},{"path":"docs/case-studies/issue-58/data/pages-status-after-enable.json","mode":"100644","type":"blob","sha":"bd113afcdcd98aa31e53819fc774f40dd6f3702f","size":404,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/bd113afcdcd98aa31e53819fc774f40dd6f3702f"},{"path":"docs/case-studies/issue-58/data/pr-57.diff","mode":"100644","type":"blob","sha":"8f15847b04dfe66e4434c8ba424b70c3c756567b","size":588460,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/8f15847b04dfe66e4434c8ba424b70c3c756567b"},{"path":"docs/case-studies/issue-58/data/pr-57.json","mode":"100644","type":"blob","sha":"ac38dc02634d0c8c60f563ffd01208239773bea5","size":10610,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/ac38dc02634d0c8c60f563ffd01208239773bea5"},{"path":"docs/case-studies/issue-58/data/pr-59-conversation-comments.json","mode":"100644","type":"blob","sha":"0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc","size":2,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc"},{"path":"docs/case-studies/issue-58/data/pr-59-review-comments.json","mode":"100644","type":"blob","sha":"0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc","size":2,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc"},{"path":"docs/case-studies/issue-58/data/pr-59-reviews.json","mode":"100644","type":"blob","sha":"0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc","size":2,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc"},{"path":"docs/case-studies/issue-58/data/pr-59.json","mode":"100644","type":"blob","sha":"959bb6287d292120ab307096f741385de4fa2376","size":1376,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/959bb6287d292120ab307096f741385de4fa2376"},{"path":"docs/case-studies/issue-58/data/python-template-file-tree.txt","mode":"100644","type":"blob","sha":"e0b8bb5a2d8e4060cef27c06f456570356094e07","size":817,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/e0b8bb5a2d8e4060cef27c06f456570356094e07"},{"path":"docs/case-studies/issue-58/data/python-template-release.yml","mode":"100644","type":"blob","sha":"c8999ba00878ebbe3c90efeedbe1787708e6937b","size":11674,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/c8999ba00878ebbe3c90efeedbe1787708e6937b"},{"path":"docs/case-studies/issue-58/data/regression-after-2.log","mode":"100644","type":"blob","sha":"151748754dbfc0a63ebb2f7a8b50541f83b734fb","size":2021,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/151748754dbfc0a63ebb2f7a8b50541f83b734fb"},{"path":"docs/case-studies/issue-58/data/regression-after-3.log","mode":"100644","type":"blob","sha":"753b1ddac2d1d3892e8de12f5786f34f6182c408","size":2202,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/753b1ddac2d1d3892e8de12f5786f34f6182c408"},{"path":"docs/case-studies/issue-58/data/regression-after.log","mode":"100644","type":"blob","sha":"c839b5158267e8a21817155392cece119a33321b","size":2021,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/c839b5158267e8a21817155392cece119a33321b"},{"path":"docs/case-studies/issue-58/data/regression-before.log","mode":"100644","type":"blob","sha":"1095318176f1a5c9a32c4449fd18ca9950da6603","size":11519,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/1095318176f1a5c9a32c4449fd18ca9950da6603"},{"path":"docs/case-studies/issue-58/data/rust-template-file-tree.txt","mode":"100644","type":"blob","sha":"a2207248efbca0d35b0cb76d61c3231f8a8ef4d5","size":5909,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/a2207248efbca0d35b0cb76d61c3231f8a8ef4d5"},{"path":"docs/case-studies/issue-58/data/rust-template-release.yml","mode":"100644","type":"blob","sha":"c3afcd9223549f041c824682f5f1e465454408e4","size":23022,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/c3afcd9223549f041c824682f5f1e465454408e4"},{"path":"docs/case-studies/issue-58/data/secretlint.log","mode":"100644","type":"blob","sha":"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391","size":0,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/e69de29bb2d1d6434b8b29ae775ad8c2e48c5391"},{"path":"docs/case-studies/issue-58/data/validate-changeset.log","mode":"100644","type":"blob","sha":"e839af906d428243448fcc2b3861c63600426f58","size":549,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/e839af906d428243448fcc2b3861c63600426f58"},{"path":"docs/case-studies/issue-7","mode":"040000","type":"tree","sha":"357ac6bf964c20292c9af615816a3443c8e3e740","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/357ac6bf964c20292c9af615816a3443c8e3e740"},{"path":"docs/case-studies/issue-7/BEST-PRACTICES-COMPARISON.md","mode":"100644","type":"blob","sha":"16d3820926b0c7ed9dfa24e60a76874924766771","size":9478,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/16d3820926b0c7ed9dfa24e60a76874924766771"},{"path":"docs/case-studies/issue-7/FORMATTER-COMPARISON.md","mode":"100644","type":"blob","sha":"89daa474e1760ccf43c3a7165b28fdee9beb65ff","size":17660,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/89daa474e1760ccf43c3a7165b28fdee9beb65ff"},{"path":"docs/case-studies/issue-7/current-repository-analysis.json","mode":"100644","type":"blob","sha":"149f113a42b073f46ca5adfeb921b58496ce9235","size":1988,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/149f113a42b073f46ca5adfeb921b58496ce9235"},{"path":"docs/case-studies/issue-7/effect-template-analysis.json","mode":"100644","type":"blob","sha":"5be40318ed4346f5c649d6522a56a510f748df52","size":4644,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/5be40318ed4346f5c649d6522a56a510f748df52"},{"path":"eslint.config.js","mode":"100644","type":"blob","sha":"a4979d2138f9537a5e3c5465d87a47cce2ebf53d","size":3160,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/a4979d2138f9537a5e3c5465d87a47cce2ebf53d"},{"path":"examples","mode":"040000","type":"tree","sha":"1113ed7f988fb93ed5bef6f4ed23c4c44c8f5ede","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/1113ed7f988fb93ed5bef6f4ed23c4c44c8f5ede"},{"path":"examples/basic-usage.js","mode":"100644","type":"blob","sha":"714025b9b45a4fdfd2524ce6b162249b05d2a54c","size":747,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/714025b9b45a4fdfd2524ce6b162249b05d2a54c"},{"path":"examples/universal-app","mode":"040000","type":"tree","sha":"dffe41cc874978c31e991e9515ed5ae250de5202","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/dffe41cc874978c31e991e9515ed5ae250de5202"},{"path":"examples/universal-app/README.md","mode":"100644","type":"blob","sha":"00aab7fb5139c45ddf5400ab0639179e03b16b11","size":2054,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/00aab7fb5139c45ddf5400ab0639179e03b16b11"},{"path":"examples/universal-app/capacitor.config.json","mode":"100644","type":"blob","sha":"9d8ec491b62efedc0e47be610b3d57e71d6c1d96","size":156,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/9d8ec491b62efedc0e47be610b3d57e71d6c1d96"},{"path":"examples/universal-app/electron","mode":"040000","type":"tree","sha":"5fba57afdd998374f4a746a1109576558bdcfb8b","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/5fba57afdd998374f4a746a1109576558bdcfb8b"},{"path":"examples/universal-app/electron/main.cjs","mode":"100644","type":"blob","sha":"141cb19585cee1b6594c10cab49c66a3d5a5c226","size":1129,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/141cb19585cee1b6594c10cab49c66a3d5a5c226"},{"path":"examples/universal-app/electron/preload.cjs","mode":"100644","type":"blob","sha":"285d7f319e718e893796e4d385e5314ad079f303","size":151,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/285d7f319e718e893796e4d385e5314ad079f303"},{"path":"examples/universal-app/forge.config.cjs","mode":"100644","type":"blob","sha":"70dae7505911ec3800cdd9d37ddbf1acf90337d8","size":760,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/70dae7505911ec3800cdd9d37ddbf1acf90337d8"},{"path":"examples/universal-app/index.html","mode":"100644","type":"blob","sha":"2c0ba45de0e5c0a07e129aa7882394a68799e8dd","size":495,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/2c0ba45de0e5c0a07e129aa7882394a68799e8dd"},{"path":"examples/universal-app/package-lock.json","mode":"100644","type":"blob","sha":"04c1bf1a82db5bd6ed3d2478ad11273d6050aa9b","size":335543,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/04c1bf1a82db5bd6ed3d2478ad11273d6050aa9b"},{"path":"examples/universal-app/package.json","mode":"100644","type":"blob","sha":"230cc0db052c6f2cdd9bfbdf8a44d6246799137a","size":1590,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/230cc0db052c6f2cdd9bfbdf8a44d6246799137a"},{"path":"examples/universal-app/public","mode":"040000","type":"tree","sha":"b716a729a9807d9c5a999d91b9f4fa04355fb996","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/b716a729a9807d9c5a999d91b9f4fa04355fb996"},{"path":"examples/universal-app/public/favicon.svg","mode":"100644","type":"blob","sha":"68d6a43a251ee84b8bea4db2db4f9d56141a17e8","size":210,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/68d6a43a251ee84b8bea4db2db4f9d56141a17e8"},{"path":"examples/universal-app/src","mode":"040000","type":"tree","sha":"38e3bf15689af56effd42b44505afcb51d6e8bb1","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/38e3bf15689af56effd42b44505afcb51d6e8bb1"},{"path":"examples/universal-app/src/App.js","mode":"100644","type":"blob","sha":"8152275269a507524f1149347e2505ce96d894b1","size":3676,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/8152275269a507524f1149347e2505ce96d894b1"},{"path":"examples/universal-app/src/main.js","mode":"100644","type":"blob","sha":"0d76e39ad43a22879738c5b14e2fcd072109bfcc","size":240,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/0d76e39ad43a22879738c5b14e2fcd072109bfcc"},{"path":"examples/universal-app/src/styles.css","mode":"100644","type":"blob","sha":"7b08a2da6d7442ff063d49c1c2c52c22ec8e9124","size":3051,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/7b08a2da6d7442ff063d49c1c2c52c22ec8e9124"},{"path":"examples/universal-app/vite.config.js","mode":"100644","type":"blob","sha":"6782d92633f1a7b0093f1bf78fd8373546370d87","size":498,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/6782d92633f1a7b0093f1bf78fd8373546370d87"},{"path":"experiments","mode":"040000","type":"tree","sha":"129556b110c6ffe10b64208f9516aa67ebd07a32","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/129556b110c6ffe10b64208f9516aa67ebd07a32"},{"path":"experiments/test-changeset-scripts.mjs","mode":"100644","type":"blob","sha":"dcf30285827a8266eaa352312893b49daeb853b6","size":8385,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/dcf30285827a8266eaa352312893b49daeb853b6"},{"path":"experiments/test-check-release-needed.mjs","mode":"100644","type":"blob","sha":"43298882d8170a590eafee8621f670ad2510888a","size":2751,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/43298882d8170a590eafee8621f670ad2510888a"},{"path":"experiments/test-detect-changes.mjs","mode":"100644","type":"blob","sha":"e8fb3782f855d8dd754367cc57d8fc19ffbc7056","size":4045,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/e8fb3782f855d8dd754367cc57d8fc19ffbc7056"},{"path":"experiments/test-failure-detection.mjs","mode":"100644","type":"blob","sha":"3a48b6bfa83b18372254740741301d6dfebc7710","size":4472,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/3a48b6bfa83b18372254740741301d6dfebc7710"},{"path":"experiments/test-format-major-changes.mjs","mode":"100644","type":"blob","sha":"37087f15e2cad0a93181f9de1303f8d87fe64160","size":1557,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/37087f15e2cad0a93181f9de1303f8d87fe64160"},{"path":"experiments/test-format-minor-changes.mjs","mode":"100644","type":"blob","sha":"f8a4e854307b6718a94b9b441dc2d2dd3a61bbb8","size":1766,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/f8a4e854307b6718a94b9b441dc2d2dd3a61bbb8"},{"path":"experiments/test-format-no-hash.mjs","mode":"100644","type":"blob","sha":"103334ee87a099127b5d0445cc401ae953361ef2","size":1284,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/103334ee87a099127b5d0445cc401ae953361ef2"},{"path":"experiments/test-format-patch-changes.mjs","mode":"100644","type":"blob","sha":"1e65103d4ac3d1086c80dcce3170a06736511cfb","size":1460,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/1e65103d4ac3d1086c80dcce3170a06736511cfb"},{"path":"package-lock.json","mode":"100644","type":"blob","sha":"828deb77b8caf9d6afd6b3f5c66582738a700e01","size":144647,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/828deb77b8caf9d6afd6b3f5c66582738a700e01"},{"path":"package.json","mode":"100644","type":"blob","sha":"885a138663b5ba649533314d9df6eeebec8895ba","size":2462,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/885a138663b5ba649533314d9df6eeebec8895ba"},{"path":"scripts","mode":"040000","type":"tree","sha":"98b3a3b5fe2c371b467eb1ddf0892d600ca4f415","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/98b3a3b5fe2c371b467eb1ddf0892d600ca4f415"},{"path":"scripts/changeset-version.mjs","mode":"100644","type":"blob","sha":"368f2971324966734e791ec2eb1447b72ca1ffd3","size":2667,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/368f2971324966734e791ec2eb1447b72ca1ffd3"},{"path":"scripts/check-changesets.mjs","mode":"100644","type":"blob","sha":"3f7b7ac67fe0e7f003e664f3a15474d744a30972","size":1729,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/3f7b7ac67fe0e7f003e664f3a15474d744a30972"},{"path":"scripts/check-docker-publish.mjs","mode":"100644","type":"blob","sha":"e2793f140c2302c7ee811238dfa59b52a3655911","size":3528,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/e2793f140c2302c7ee811238dfa59b52a3655911"},{"path":"scripts/check-file-line-limits.sh","mode":"100755","type":"blob","sha":"70807d8de8b97abd26b125c139d0028c4f345630","size":2745,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/70807d8de8b97abd26b125c139d0028c4f345630"},{"path":"scripts/check-mjs-syntax.sh","mode":"100755","type":"blob","sha":"8982bb1b08906a978451e762f440b0267e80f492","size":634,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/8982bb1b08906a978451e762f440b0267e80f492"},{"path":"scripts/check-release-needed.mjs","mode":"100644","type":"blob","sha":"e2648f27ea2f1b87772f59f57de71b93adc336eb","size":3903,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/e2648f27ea2f1b87772f59f57de71b93adc336eb"},{"path":"scripts/check-version.mjs","mode":"100644","type":"blob","sha":"84d100bffc3d2c5385fa5417fd35901340e29ea9","size":3737,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/84d100bffc3d2c5385fa5417fd35901340e29ea9"},{"path":"scripts/check-web-archive.mjs","mode":"100644","type":"blob","sha":"2b8244d7d76d56d9acdf88b4ea766e35c554b1fe","size":8314,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/2b8244d7d76d56d9acdf88b4ea766e35c554b1fe"},{"path":"scripts/create-github-release.mjs","mode":"100644","type":"blob","sha":"3ad36d37845fdf63c24922004828426bb00e55a0","size":6136,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/3ad36d37845fdf63c24922004828426bb00e55a0"},{"path":"scripts/create-manual-changeset.mjs","mode":"100644","type":"blob","sha":"ca5678f1f112ffebec87b9be2937714a24bf1c69","size":3303,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/ca5678f1f112ffebec87b9be2937714a24bf1c69"},{"path":"scripts/detect-code-changes.mjs","mode":"100644","type":"blob","sha":"eff9c121f2e1e9366a3c72fa83428585bc08262a","size":4899,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/eff9c121f2e1e9366a3c72fa83428585bc08262a"},{"path":"scripts/format-github-release.mjs","mode":"100644","type":"blob","sha":"a7dbadb1630b314214cc7303c59f930e73cdf56f","size":3234,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/a7dbadb1630b314214cc7303c59f930e73cdf56f"},{"path":"scripts/format-release-notes-helpers.mjs","mode":"100644","type":"blob","sha":"f182524fc82d65649e8d9f34b96755bfe3d89692","size":974,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/f182524fc82d65649e8d9f34b96755bfe3d89692"},{"path":"scripts/format-release-notes.mjs","mode":"100644","type":"blob","sha":"94bd93adea40dc31aeb9532cdf5bf48c899c603a","size":8516,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/94bd93adea40dc31aeb9532cdf5bf48c899c603a"},{"path":"scripts/instant-version-bump.mjs","mode":"100644","type":"blob","sha":"da259fa8e32062408f564c3e35ae5e53ed20226a","size":5925,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/da259fa8e32062408f564c3e35ae5e53ed20226a"},{"path":"scripts/js-paths.mjs","mode":"100644","type":"blob","sha":"2f2534516b91aee79a6de039d15dfb21d5445dc4","size":5696,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/2f2534516b91aee79a6de039d15dfb21d5445dc4"},{"path":"scripts/merge-changesets.mjs","mode":"100644","type":"blob","sha":"4a64b19a20ab8369b2070809a3f7764e045f8365","size":6734,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/4a64b19a20ab8369b2070809a3f7764e045f8365"},{"path":"scripts/package-info.mjs","mode":"100644","type":"blob","sha":"cd096705e28a95c0737c361af2a312cc47f57797","size":2556,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/cd096705e28a95c0737c361af2a312cc47f57797"},{"path":"scripts/publish-to-npm.mjs","mode":"100644","type":"blob","sha":"264b78f94e88ca567c6fde8d15bb541e3652d3b0","size":9995,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/264b78f94e88ca567c6fde8d15bb541e3652d3b0"},{"path":"scripts/setup-npm.mjs","mode":"100644","type":"blob","sha":"2a8cb884279d89b5858244b939b03363c5806fb9","size":7774,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/2a8cb884279d89b5858244b939b03363c5806fb9"},{"path":"scripts/simulate-fresh-merge.sh","mode":"100755","type":"blob","sha":"6af7c6a77cd96b8b757a848ec5ced4834dd0d959","size":2007,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/6af7c6a77cd96b8b757a848ec5ced4834dd0d959"},{"path":"scripts/validate-changeset.mjs","mode":"100644","type":"blob","sha":"7d942f5a40114febb80db22ae00332721c4e16bf","size":8805,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/7d942f5a40114febb80db22ae00332721c4e16bf"},{"path":"scripts/version-and-commit.mjs","mode":"100644","type":"blob","sha":"0f63bc2ca83be245a6069fb505743de74b72b29f","size":9584,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/0f63bc2ca83be245a6069fb505743de74b72b29f"},{"path":"scripts/wait-for-npm.mjs","mode":"100644","type":"blob","sha":"0155e6850e06c5aa7c234e276e9e52da3bbe975e","size":4932,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/0155e6850e06c5aa7c234e276e9e52da3bbe975e"},{"path":"src","mode":"040000","type":"tree","sha":"2821810705ff1808b6fc000ba8e52fec62e640c0","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/2821810705ff1808b6fc000ba8e52fec62e640c0"},{"path":"src/index.d.ts","mode":"100644","type":"blob","sha":"658cd82a79657e0ec6727a883d8953d87f3fbe6f","size":651,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/658cd82a79657e0ec6727a883d8953d87f3fbe6f"},{"path":"src/index.js","mode":"100644","type":"blob","sha":"22705fde8c7f091053953d6015a8fc4503f5aecf","size":694,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/22705fde8c7f091053953d6015a8fc4503f5aecf"},{"path":"tests","mode":"040000","type":"tree","sha":"4dc9a7ad7ed7055e364ab417e42b7657913007e2","url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/trees/4dc9a7ad7ed7055e364ab417e42b7657913007e2"},{"path":"tests/check-file-line-limits.test.js","mode":"100644","type":"blob","sha":"c939c46f1fac26fdc8633a81166a244a82f40f69","size":4176,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/c939c46f1fac26fdc8633a81166a244a82f40f69"},{"path":"tests/ci-timeouts.test.js","mode":"100644","type":"blob","sha":"03021d3630dbf3f5ac8315a592e5c49ddbf7262b","size":3150,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/03021d3630dbf3f5ac8315a592e5c49ddbf7262b"},{"path":"tests/create-github-release.test.js","mode":"100644","type":"blob","sha":"570b2edb89f5917bd6db2ad2bf3c2bf67e47ba3c","size":10044,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/570b2edb89f5917bd6db2ad2bf3c2bf67e47ba3c"},{"path":"tests/docker-publish.test.js","mode":"100644","type":"blob","sha":"b97592ecbd94855e540bae880ebb8a0b17b96cb8","size":5552,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/b97592ecbd94855e540bae880ebb8a0b17b96cb8"},{"path":"tests/index.test.js","mode":"100644","type":"blob","sha":"15fbcb6e7506b227036495a1b0cb4cf44d142bb4","size":783,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/15fbcb6e7506b227036495a1b0cb4cf44d142bb4"},{"path":"tests/package-info.test.js","mode":"100644","type":"blob","sha":"f4b79428da2c2282d6682ca91b3fcf2414bb950a","size":1918,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/f4b79428da2c2282d6682ca91b3fcf2414bb950a"},{"path":"tests/package-metadata.test.js","mode":"100644","type":"blob","sha":"3757514159fbd93880d307fcbd5860c355a0a614","size":2623,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/3757514159fbd93880d307fcbd5860c355a0a614"},{"path":"tests/release-badge.test.js","mode":"100644","type":"blob","sha":"e97b25dddfbfb1657586eda781bfe3a8fcc56c4e","size":1768,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/e97b25dddfbfb1657586eda781bfe3a8fcc56c4e"},{"path":"tests/setup-npm.test.js","mode":"100644","type":"blob","sha":"fb821ffe2a3bba79a414cc745ad72ee1e1d8c224","size":1790,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/fb821ffe2a3bba79a414cc745ad72ee1e1d8c224"},{"path":"tests/tag-prefix.test.js","mode":"100644","type":"blob","sha":"4eed81efdf8acdf1dd137e0764ce49a2238ee354","size":994,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/4eed81efdf8acdf1dd137e0764ce49a2238ee354"},{"path":"tests/universal-app.test.js","mode":"100644","type":"blob","sha":"33ca39c7af273fdf32921391e10b9bc94838d86b","size":4456,"url":"https://api.github.com/repos/link-foundation/js-ai-driven-development-pipeline-template/git/blobs/33ca39c7af273fdf32921391e10b9bc94838d86b"}],"truncated":false} \ No newline at end of file diff --git a/docs/case-studies/issue-86/templates/js-ai-driven-development-pipeline-template/wait-for-npm.mjs b/docs/case-studies/issue-86/templates/js-ai-driven-development-pipeline-template/wait-for-npm.mjs new file mode 100644 index 0000000..0155e68 --- /dev/null +++ b/docs/case-studies/issue-86/templates/js-ai-driven-development-pipeline-template/wait-for-npm.mjs @@ -0,0 +1,191 @@ +#!/usr/bin/env node + +/** + * Wait for a package version to become available on npm. + * + * The Docker publish job runs after npm publishing, but npm registry visibility + * can lag briefly. Waiting here keeps Docker tags tied to an installable npm + * version. + */ + +import { execFileSync } from 'node:child_process'; +import { appendFileSync } from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +import { formatNpmPackageVersion, readPackageInfo } from './package-info.mjs'; + +const DEFAULT_MAX_ATTEMPTS = 30; +const DEFAULT_SLEEP_SECONDS = 10; +const USAGE = + 'Usage: node scripts/wait-for-npm.mjs --release-version [--package-name ] [--max-attempts ] [--sleep-seconds ] [--js-root ]'; + +function parsePositiveInteger(value, optionName) { + const parsed = Number(value); + if (!Number.isInteger(parsed) || parsed < 1) { + throw new Error(`${optionName} must be a positive integer`); + } + return parsed; +} + +function readCliOptions(argv) { + const options = {}; + + for (let index = 0; index < argv.length; index++) { + const arg = argv[index]; + if (!arg.startsWith('--')) { + continue; + } + + const inlineValueIndex = arg.indexOf('='); + if (inlineValueIndex !== -1) { + options[arg.slice(2, inlineValueIndex)] = arg.slice(inlineValueIndex + 1); + continue; + } + + const value = argv[index + 1]; + if (value === undefined || value.startsWith('--')) { + throw new Error(`Missing value for ${arg}`); + } + + options[arg.slice(2)] = value; + index++; + } + + return options; +} + +export function parseArgs(argv, env = process.env) { + const cliOptions = readCliOptions(argv); + + const config = { + jsRoot: cliOptions['js-root'] ?? env.JS_ROOT ?? '', + maxAttempts: parsePositiveInteger( + cliOptions['max-attempts'] || + env.MAX_ATTEMPTS || + String(DEFAULT_MAX_ATTEMPTS), + '--max-attempts' + ), + packageName: cliOptions['package-name'] ?? env.PACKAGE_NAME ?? '', + releaseVersion: cliOptions['release-version'] ?? env.VERSION ?? '', + sleepSeconds: parsePositiveInteger( + cliOptions['sleep-seconds'] || + env.SLEEP_SECONDS || + String(DEFAULT_SLEEP_SECONDS), + '--sleep-seconds' + ), + }; + + return config; +} + +export function checkNpmVersion(packageName, version) { + try { + const publishedVersion = execFileSync( + 'npm', + ['view', formatNpmPackageVersion(packageName, version), 'version'], + { encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] } + ).trim(); + + return publishedVersion === version; + } catch { + return false; + } +} + +function sleep(seconds) { + return new Promise((resolve) => + globalThis.setTimeout(resolve, seconds * 1000) + ); +} + +function setOutput(name, value) { + const outputFile = process.env.GITHUB_OUTPUT; + if (outputFile) { + appendFileSync(outputFile, `${name}=${value}\n`); + } + console.log(`Output: ${name}=${value}`); +} + +export async function waitForNpmVersion({ + checkAvailability = checkNpmVersion, + maxAttempts = DEFAULT_MAX_ATTEMPTS, + packageName, + sleepFn = sleep, + sleepSeconds = DEFAULT_SLEEP_SECONDS, + stdout = console.log, + version, +}) { + for (let attempt = 1; attempt <= maxAttempts; attempt++) { + stdout( + `Checking npm for ${formatNpmPackageVersion(packageName, version)} (attempt ${attempt}/${maxAttempts})` + ); + + if (checkAvailability(packageName, version)) { + return true; + } + + if (attempt < maxAttempts) { + await sleepFn(sleepSeconds); + } + } + + return false; +} + +function isCliEntryPoint() { + return ( + typeof process !== 'undefined' && + process.argv?.[1] && + fileURLToPath(import.meta.url) === path.resolve(process.argv[1]) + ); +} + +export async function main({ + argv = process.argv.slice(2), + env = process.env, + stderr = console.error, + stdout = console.log, +} = {}) { + try { + const config = parseArgs(argv, env); + if (!config.releaseVersion) { + stderr('Error: Missing required --release-version'); + stderr(USAGE); + return 1; + } + + const packageInfo = config.packageName + ? { name: config.packageName } + : readPackageInfo({ jsRoot: config.jsRoot || undefined }); + + const available = await waitForNpmVersion({ + maxAttempts: config.maxAttempts, + packageName: packageInfo.name, + sleepSeconds: config.sleepSeconds, + stdout, + version: config.releaseVersion, + }); + + setOutput('npm_available', available ? 'true' : 'false'); + + if (!available) { + stderr( + `${formatNpmPackageVersion(packageInfo.name, config.releaseVersion)} did not become available on npm` + ); + return 1; + } + + stdout( + `${formatNpmPackageVersion(packageInfo.name, config.releaseVersion)} is available on npm` + ); + return 0; + } catch (error) { + stderr(`Error: ${error.message}`); + return 1; + } +} + +if (isCliEntryPoint()) { + process.exitCode = await main(); +} diff --git a/docs/case-studies/issue-86/templates/python-ai-driven-development-pipeline-template/create_github_release.py b/docs/case-studies/issue-86/templates/python-ai-driven-development-pipeline-template/create_github_release.py new file mode 100644 index 0000000..1208eb8 --- /dev/null +++ b/docs/case-studies/issue-86/templates/python-ai-driven-development-pipeline-template/create_github_release.py @@ -0,0 +1,201 @@ +#!/usr/bin/env python3 +""" +Create a GitHub release from CHANGELOG.md content. + +Usage: + python scripts/create_github_release.py --version VERSION --repository REPO \ + [--tag-prefix PREFIX] [--language LANGUAGE] + +Example: + python scripts/create_github_release.py --version 1.2.3 --repository owner/repo \ + --tag-prefix python_v --language Python + +Environment variables: + GH_TOKEN or GITHUB_TOKEN: GitHub token for authentication +""" + +import argparse +import os +import re +import subprocess +import sys +from pathlib import Path + + +def run_command(cmd: list[str], check: bool = True) -> subprocess.CompletedProcess: + """Run a command and handle errors.""" + print(f"Running: {' '.join(cmd)}") + result = subprocess.run(cmd, capture_output=True, text=True, check=False) + + if result.stdout: + print(result.stdout) + if result.stderr and result.returncode != 0: + print(result.stderr, file=sys.stderr) + + if check and result.returncode != 0: + print( + f"Error: Command failed with exit code {result.returncode}", + file=sys.stderr, + ) + sys.exit(result.returncode) + + return result + + +def extract_changelog_entry(changelog_path: Path, version: str) -> str: + """Extract the changelog entry for a specific version.""" + if not changelog_path.exists(): + print(f"Warning: {changelog_path} not found", file=sys.stderr) + return f"Release {version}" + + content = changelog_path.read_text() + + # Look for version section (e.g., "## 1.2.3" or "## 1.2.3 - 2024-01-15") + version_pattern = rf"^## {re.escape(version)}(\s|$)" + match = re.search(version_pattern, content, re.MULTILINE) + + if not match: + print( + f"Warning: Version {version} not found in {changelog_path}", + file=sys.stderr, + ) + return f"Release {version}" + + # Extract content until next version section or end of file + start = match.end() + next_version = re.search(r"^## \d+\.\d+\.\d+", content[start:], re.MULTILINE) + + if next_version: + entry = content[start : start + next_version.start()].strip() + else: + entry = content[start:].strip() + + return entry if entry else f"Release {version}" + + +def append_pypi_badge_if_missing(release_notes: str, version: str) -> str: + """Append a PyPI version badge unless a shields.io badge is already present.""" + if "img.shields.io" in release_notes.lower(): + return release_notes + + badge = f"![PyPI](https://img.shields.io/badge/pypi-{version}-blue.svg)" + return f"{release_notes.rstrip()}\n\n{badge}" + + +def create_release( + version: str, + repository: str, + release_notes: str, + prerelease: bool = False, + tag_prefix: str = "v", + language: str = "Python", +) -> None: + """Create a GitHub release using gh CLI.""" + tag = f"{tag_prefix}{version}" + title = f"[{language}] {version}" + + print(f"\nCreating GitHub release for {tag}...") + print(f"Repository: {repository}") + print(f"Title: {title}") + print(f"Prerelease: {prerelease}") + print(f"\nRelease notes:\n{release_notes}\n") + + cmd = [ + "gh", + "release", + "create", + tag, + "--repo", + repository, + "--title", + title, + "--notes", + release_notes, + ] + + if prerelease: + cmd.append("--prerelease") + + run_command(cmd) + print(f"\n✅ GitHub release {tag} created successfully!") + + +def main() -> int: + """Main entry point.""" + parser = argparse.ArgumentParser( + description="Create GitHub release from CHANGELOG.md", + ) + parser.add_argument( + "--version", + "-v", + required=True, + help="Version to release (e.g., 1.2.3)", + ) + parser.add_argument( + "--repository", + "-r", + required=True, + help="GitHub repository (owner/repo)", + ) + parser.add_argument( + "--prerelease", + action="store_true", + help="Mark as prerelease", + ) + parser.add_argument( + "--tag-prefix", + default="v", + help='Tag prefix for the release (default "v")', + ) + parser.add_argument( + "--language", + default="Python", + help='Language label for the release title (default "Python")', + ) + + args = parser.parse_args() + + # Check for GitHub token + if not os.environ.get("GH_TOKEN") and not os.environ.get("GITHUB_TOKEN"): + print( + "Error: GH_TOKEN or GITHUB_TOKEN environment variable required", + file=sys.stderr, + ) + return 1 + + # Check if gh CLI is available + result = run_command(["gh", "--version"], check=False) + if result.returncode != 0: + print( + "Error: gh CLI not found. Install from https://cli.github.com/", + file=sys.stderr, + ) + return 1 + + # Determine project root + script_dir = Path(__file__).parent + project_root = script_dir.parent + changelog_path = project_root / "CHANGELOG.md" + + try: + release_notes = extract_changelog_entry(changelog_path, args.version) + release_notes = append_pypi_badge_if_missing(release_notes, args.version) + + create_release( + args.version, + args.repository, + release_notes, + args.prerelease, + args.tag_prefix, + args.language, + ) + + return 0 + + except Exception as e: + print(f"Error: {e}", file=sys.stderr) + return 1 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/docs/case-studies/issue-86/templates/python-ai-driven-development-pipeline-template/file-tree.txt b/docs/case-studies/issue-86/templates/python-ai-driven-development-pipeline-template/file-tree.txt new file mode 100644 index 0000000..e0b8bb5 --- /dev/null +++ b/docs/case-studies/issue-86/templates/python-ai-driven-development-pipeline-template/file-tree.txt @@ -0,0 +1,36 @@ +.github +.github/workflows +.github/workflows/release.yml +.gitignore +.pre-commit-config.yaml +.ruff.toml +CHANGELOG.md +CONTRIBUTING.md +LICENSE +README.md +changelog.d +changelog.d/20251218_133759_drakonard_issue_1_3b50e2f12be6.md +changelog.d/20260509_204000_issue_6_release_metadata.md +changelog.d/README.md +changelog.d/fragment_template.md.j2 +examples +examples/basic_usage.py +pyproject.toml +scripts +scripts/bump_version.py +scripts/check_file_size.py +scripts/create_github_release.py +scripts/create_manual_changeset.py +scripts/detect_code_changes.py +scripts/format_release_notes.py +scripts/publish_to_pypi.py +scripts/validate_changeset.py +scripts/version_and_commit.py +src +src/my_package +src/my_package/__init__.py +src/my_package/py.typed +tests +tests/__init__.py +tests/test_create_github_release.py +tests/test_my_package.py diff --git a/docs/case-studies/issue-86/templates/python-ai-driven-development-pipeline-template/publish_to_pypi.py b/docs/case-studies/issue-86/templates/python-ai-driven-development-pipeline-template/publish_to_pypi.py new file mode 100644 index 0000000..641bede --- /dev/null +++ b/docs/case-studies/issue-86/templates/python-ai-driven-development-pipeline-template/publish_to_pypi.py @@ -0,0 +1,157 @@ +#!/usr/bin/env python3 +""" +Build and publish package to PyPI using trusted publishing (OIDC). + +This script: +1. Cleans previous build artifacts +2. Builds the package using hatchling +3. Validates the built distribution +4. Publishes to PyPI using OIDC (no token needed in CI) + +Usage: + python scripts/publish_to_pypi.py [--dry-run] + +Note: In GitHub Actions, this uses OIDC trusted publishing. + For local testing, use --dry-run or set TWINE_USERNAME/TWINE_PASSWORD. +""" + +import argparse +import shutil +import subprocess +import sys +from pathlib import Path + + +def run_command(cmd: list[str], check: bool = True) -> subprocess.CompletedProcess: + """Run a command and handle errors.""" + print(f"Running: {' '.join(cmd)}") + result = subprocess.run(cmd, capture_output=True, text=True, check=False) + + if result.stdout: + print(result.stdout) + if result.stderr: + print(result.stderr, file=sys.stderr) + + if check and result.returncode != 0: + print( + f"Error: Command failed with exit code {result.returncode}", file=sys.stderr + ) + sys.exit(result.returncode) + + return result + + +def clean_build_artifacts(project_root: Path) -> None: + """Remove previous build artifacts.""" + print("Cleaning build artifacts...") + dirs_to_remove = ["dist", "build", "*.egg-info"] + + for pattern in dirs_to_remove: + if "*" in pattern: + for path in project_root.glob(pattern): + if path.is_dir(): + shutil.rmtree(path) + print(f" Removed: {path}") + else: + path = project_root / pattern + if path.exists(): + shutil.rmtree(path) + print(f" Removed: {path}") + + +def build_package(project_root: Path) -> None: + """Build the package using python -m build.""" + print("\nBuilding package...") + run_command([sys.executable, "-m", "build", str(project_root)]) + + +def check_package(dist_dir: Path) -> None: + """Validate the built package using twine.""" + print("\nValidating package...") + dist_files = list(dist_dir.glob("*")) + + if not dist_files: + print("Error: No distribution files found in dist/", file=sys.stderr) + sys.exit(1) + + print(f"Found {len(dist_files)} distribution file(s):") + for file in dist_files: + print(f" - {file.name}") + + run_command([sys.executable, "-m", "twine", "check"] + [str(f) for f in dist_files]) + + +def publish_package(dist_dir: Path, dry_run: bool = False) -> None: + """Publish package to PyPI.""" + dist_files = list(dist_dir.glob("*")) + + if not dist_files: + print("Error: No distribution files found in dist/", file=sys.stderr) + sys.exit(1) + + if dry_run: + print("\n[DRY RUN] Would publish the following files:") + for file in dist_files: + print(f" - {file.name}") + print("\nSkipping actual upload (dry run mode)") + return + + print("\nPublishing to PyPI...") + + # Use twine upload with OIDC if in CI, otherwise use credentials + cmd = [sys.executable, "-m", "twine", "upload"] + cmd.extend([str(f) for f in dist_files]) + + run_command(cmd) + print("\n✅ Package published successfully!") + + +def main() -> int: + """Main entry point.""" + parser = argparse.ArgumentParser( + description="Build and publish package to PyPI", + ) + parser.add_argument( + "--dry-run", + action="store_true", + help="Build and validate but don't publish", + ) + + args = parser.parse_args() + + # Determine project root + script_dir = Path(__file__).parent + project_root = script_dir.parent + dist_dir = project_root / "dist" + + try: + # Ensure required tools are available + for tool in ["build", "twine"]: + result = run_command( + [sys.executable, "-m", tool, "--version"], + check=False, + ) + if result.returncode != 0: + print( + f"Error: {tool} is not installed. Install with: pip install {tool}", + file=sys.stderr, + ) + return 1 + + # Clean, build, check + clean_build_artifacts(project_root) + build_package(project_root) + check_package(dist_dir) + + # Publish (unless dry run) + publish_package(dist_dir, dry_run=args.dry_run) + + return 0 + + except Exception as e: + print(f"Error: {e}", file=sys.stderr) + return 1 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/docs/case-studies/issue-86/templates/python-ai-driven-development-pipeline-template/release.yml b/docs/case-studies/issue-86/templates/python-ai-driven-development-pipeline-template/release.yml new file mode 100644 index 0000000..c8999ba --- /dev/null +++ b/docs/case-studies/issue-86/templates/python-ai-driven-development-pipeline-template/release.yml @@ -0,0 +1,354 @@ +name: CI/CD Pipeline + +on: + push: + branches: + - main + pull_request: + types: [opened, synchronize, reopened] + workflow_dispatch: + inputs: + bump_type: + description: 'Version bump type' + required: true + type: choice + options: + - patch + - minor + - major + description: + description: 'Release description (optional)' + required: false + type: string + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + # === DETECT CHANGES - determines which jobs should run === + detect-changes: + name: Detect Changes + runs-on: ubuntu-latest + if: github.event_name != 'workflow_dispatch' + outputs: + py-changed: ${{ steps.changes.outputs.py-changed }} + tests-changed: ${{ steps.changes.outputs.tests-changed }} + package-changed: ${{ steps.changes.outputs.package-changed }} + docs-changed: ${{ steps.changes.outputs.docs-changed }} + workflow-changed: ${{ steps.changes.outputs.workflow-changed }} + any-code-changed: ${{ steps.changes.outputs.any-code-changed }} + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: '3.13' + + - name: Detect changes + id: changes + env: + GITHUB_EVENT_NAME: ${{ github.event_name }} + GITHUB_BASE_SHA: ${{ github.event.pull_request.base.sha }} + GITHUB_HEAD_SHA: ${{ github.event.pull_request.head.sha }} + run: python scripts/detect_code_changes.py + + # REQUIRED CI CHECKS - All must pass before release + # These jobs ensure code quality and tests pass before any release + + # === LINT AND FORMAT CHECK === + # Lint runs independently of changelog check - it's a fast check that should always run + # See: https://github.com/link-assistant/hive-mind/pull/1024 for why this dependency was removed + lint: + name: Lint and Format Check + runs-on: ubuntu-latest + needs: [detect-changes] + if: | + github.event_name == 'push' || + github.event_name == 'workflow_dispatch' || + needs.detect-changes.outputs.py-changed == 'true' || + needs.detect-changes.outputs.tests-changed == 'true' || + needs.detect-changes.outputs.docs-changed == 'true' || + needs.detect-changes.outputs.package-changed == 'true' || + needs.detect-changes.outputs.workflow-changed == 'true' + steps: + - uses: actions/checkout@v4 + + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: '3.13' + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -e ".[dev]" + + - name: Run Ruff linting + run: ruff check . + + - name: Check Ruff formatting + run: ruff format --check . + + - name: Run mypy + run: mypy src + + - name: Check file size limit + run: python scripts/check_file_size.py + + # === TEST === + # Test on latest Python version only + test: + name: Test (Python 3.13) + runs-on: ubuntu-latest + needs: [detect-changes] + if: | + github.event_name == 'push' || + github.event_name == 'workflow_dispatch' || + needs.detect-changes.outputs.py-changed == 'true' || + needs.detect-changes.outputs.tests-changed == 'true' || + needs.detect-changes.outputs.package-changed == 'true' || + needs.detect-changes.outputs.workflow-changed == 'true' + steps: + - uses: actions/checkout@v4 + + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: '3.13' + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -e ".[dev]" + + - name: Run tests + run: pytest tests/ -v --cov=src --cov-report=xml --cov-report=term + + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v4 + with: + file: ./coverage.xml + fail_ci_if_error: false + + # === BUILD PACKAGE === + # Build package - runs if lint and test pass, or were skipped (docs-only PR) + build: + name: Build Package + runs-on: ubuntu-latest + needs: [detect-changes, lint, test] + # Run if: push/dispatch event, OR lint/test succeeded, OR lint/test were skipped (docs-only PR) + if: | + always() && ( + github.event_name == 'push' || + github.event_name == 'workflow_dispatch' || + ( + (needs.lint.result == 'success' || needs.lint.result == 'skipped') && + (needs.test.result == 'success' || needs.test.result == 'skipped') + ) + ) + steps: + - uses: actions/checkout@v4 + + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: '3.13' + + - name: Install build dependencies + run: | + python -m pip install --upgrade pip + pip install build twine + + - name: Build package + run: python -m build + + - name: Check package + run: twine check dist/* + + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: dist + path: dist/ + + # === CHANGELOG CHECK - only runs on PRs with code changes === + # Docs-only PRs (./docs folder, markdown files) don't require changelog fragments + changelog: + name: Changelog Fragment Check + runs-on: ubuntu-latest + needs: [detect-changes] + if: github.event_name == 'pull_request' && needs.detect-changes.outputs.any-code-changed == 'true' + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.13" + + - name: Install scriv + run: pip install "scriv[toml]" + + - name: Check for changelog fragments + run: | + # Get list of fragment files (excluding README and template) + FRAGMENTS=$(find changelog.d -name "*.md" ! -name "README.md" ! -name "*.j2" 2>/dev/null | wc -l) + + # Get changed files in PR + CHANGED_FILES=$(git diff --name-only origin/${{ github.base_ref }}...HEAD) + + # Check if any source files changed (excluding docs and config) + SOURCE_CHANGED=$(echo "$CHANGED_FILES" | grep -E "^(src/|tests/|scripts/)" | wc -l) + + if [ "$SOURCE_CHANGED" -gt 0 ] && [ "$FRAGMENTS" -eq 0 ]; then + echo "::warning::No changelog fragment found. Please run 'scriv create' and document your changes." + echo "" + echo "To create a changelog fragment:" + echo " pip install 'scriv[toml]'" + echo " scriv create" + echo "" + echo "This is similar to adding a changeset in JavaScript projects." + echo "See changelog.d/README.md for more information." + # Note: This is a warning, not a failure, to allow flexibility + # Change 'exit 0' to 'exit 1' to make it required + exit 0 + fi + + echo "✓ Changelog check passed" + + # RELEASE JOBS - Only run after all CI checks pass + + # Automatic release on push to main (if version changed) + auto-release: + name: Auto Release + needs: [lint, test, build] + if: github.event_name == 'push' && github.ref == 'refs/heads/main' + runs-on: ubuntu-latest + permissions: + contents: write + id-token: write + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: '3.13' + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install build twine + + - name: Check if version changed + id: version_check + run: | + # Get current version from pyproject.toml + CURRENT_VERSION=$(grep -Po '(?<=^version = ")[^"]*' pyproject.toml) + echo "current_version=$CURRENT_VERSION" >> $GITHUB_OUTPUT + + # Check if tag exists + if git rev-parse "v$CURRENT_VERSION" >/dev/null 2>&1; then + echo "Tag v$CURRENT_VERSION already exists, skipping release" + echo "should_release=false" >> $GITHUB_OUTPUT + else + echo "New version detected: $CURRENT_VERSION" + echo "should_release=true" >> $GITHUB_OUTPUT + fi + + - name: Download artifacts + if: steps.version_check.outputs.should_release == 'true' + uses: actions/download-artifact@v4 + with: + name: dist + path: dist/ + + - name: Publish to PyPI + if: steps.version_check.outputs.should_release == 'true' + uses: pypa/gh-action-pypi-publish@release/v1 + + - name: Create GitHub Release + if: steps.version_check.outputs.should_release == 'true' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + python scripts/create_github_release.py \ + --version "${{ steps.version_check.outputs.current_version }}" \ + --repository "${{ github.repository }}" + + # Manual release via workflow_dispatch - only after CI passes + manual-release: + name: Manual Release + needs: [lint, test, build] + if: github.event_name == 'workflow_dispatch' + runs-on: ubuntu-latest + permissions: + contents: write + id-token: write + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + token: ${{ secrets.GITHUB_TOKEN }} + + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: '3.13' + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install build twine "scriv[toml]" + + - name: Configure git + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + + - name: Collect changelog fragments + run: | + # Check if there are any fragments to collect + FRAGMENTS=$(find changelog.d -name "*.md" ! -name "README.md" ! -name "*.j2" 2>/dev/null | wc -l) + if [ "$FRAGMENTS" -gt 0 ]; then + echo "Found $FRAGMENTS changelog fragment(s), collecting..." + scriv collect --version "${{ github.event.inputs.bump_type }}" + else + echo "No changelog fragments found, skipping collection" + fi + + - name: Version and commit + id: version + run: | + python scripts/version_and_commit.py \ + --bump-type "${{ github.event.inputs.bump_type }}" \ + --description "${{ github.event.inputs.description }}" + + - name: Build package + if: steps.version.outputs.version_committed == 'true' || steps.version.outputs.already_released == 'true' + run: python -m build + + - name: Check package + if: steps.version.outputs.version_committed == 'true' || steps.version.outputs.already_released == 'true' + run: twine check dist/* + + - name: Publish to PyPI + if: steps.version.outputs.version_committed == 'true' || steps.version.outputs.already_released == 'true' + uses: pypa/gh-action-pypi-publish@release/v1 + + - name: Create GitHub Release + if: steps.version.outputs.version_committed == 'true' || steps.version.outputs.already_released == 'true' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + python scripts/create_github_release.py \ + --version "${{ steps.version.outputs.new_version }}" \ + --repository "${{ github.repository }}" diff --git a/docs/case-studies/issue-86/templates/python-ai-driven-development-pipeline-template/tree.json b/docs/case-studies/issue-86/templates/python-ai-driven-development-pipeline-template/tree.json new file mode 100644 index 0000000..e7e0081 --- /dev/null +++ b/docs/case-studies/issue-86/templates/python-ai-driven-development-pipeline-template/tree.json @@ -0,0 +1 @@ +{"sha":"58c6bfa67d7bb997603340efc406c9f9bdb5d7d8","url":"https://api.github.com/repos/link-foundation/python-ai-driven-development-pipeline-template/git/trees/58c6bfa67d7bb997603340efc406c9f9bdb5d7d8","tree":[{"path":".github","mode":"040000","type":"tree","sha":"c5c9ee8472bb0d77a840110a0cea0e55915f9aaf","url":"https://api.github.com/repos/link-foundation/python-ai-driven-development-pipeline-template/git/trees/c5c9ee8472bb0d77a840110a0cea0e55915f9aaf"},{"path":".github/workflows","mode":"040000","type":"tree","sha":"430f08133ffa76c7854433cf5e6db1d3e1db3590","url":"https://api.github.com/repos/link-foundation/python-ai-driven-development-pipeline-template/git/trees/430f08133ffa76c7854433cf5e6db1d3e1db3590"},{"path":".github/workflows/release.yml","mode":"100644","type":"blob","sha":"c8999ba00878ebbe3c90efeedbe1787708e6937b","size":11674,"url":"https://api.github.com/repos/link-foundation/python-ai-driven-development-pipeline-template/git/blobs/c8999ba00878ebbe3c90efeedbe1787708e6937b"},{"path":".gitignore","mode":"100644","type":"blob","sha":"b7faf403d915ca307532bb0eb9cceaf0214e8e5b","size":4688,"url":"https://api.github.com/repos/link-foundation/python-ai-driven-development-pipeline-template/git/blobs/b7faf403d915ca307532bb0eb9cceaf0214e8e5b"},{"path":".pre-commit-config.yaml","mode":"100644","type":"blob","sha":"36a6207fb170af51b069c89f699a81692abe3973","size":675,"url":"https://api.github.com/repos/link-foundation/python-ai-driven-development-pipeline-template/git/blobs/36a6207fb170af51b069c89f699a81692abe3973"},{"path":".ruff.toml","mode":"100644","type":"blob","sha":"e6a459e6e0c11cebc75f5a72120b6c749a724430","size":133,"url":"https://api.github.com/repos/link-foundation/python-ai-driven-development-pipeline-template/git/blobs/e6a459e6e0c11cebc75f5a72120b6c749a724430"},{"path":"CHANGELOG.md","mode":"100644","type":"blob","sha":"f3f84c7978587a57ef17fa797c186255105e121f","size":689,"url":"https://api.github.com/repos/link-foundation/python-ai-driven-development-pipeline-template/git/blobs/f3f84c7978587a57ef17fa797c186255105e121f"},{"path":"CONTRIBUTING.md","mode":"100644","type":"blob","sha":"6d9596c7c3e4e56c76e2c1602dca792a877e84a9","size":6706,"url":"https://api.github.com/repos/link-foundation/python-ai-driven-development-pipeline-template/git/blobs/6d9596c7c3e4e56c76e2c1602dca792a877e84a9"},{"path":"LICENSE","mode":"100644","type":"blob","sha":"fdddb29aa445bf3d6a5d843d6dd77e10a9f99657","size":1211,"url":"https://api.github.com/repos/link-foundation/python-ai-driven-development-pipeline-template/git/blobs/fdddb29aa445bf3d6a5d843d6dd77e10a9f99657"},{"path":"README.md","mode":"100644","type":"blob","sha":"646875d021da22ad310fdc64f1e16e7f17a960fc","size":10413,"url":"https://api.github.com/repos/link-foundation/python-ai-driven-development-pipeline-template/git/blobs/646875d021da22ad310fdc64f1e16e7f17a960fc"},{"path":"changelog.d","mode":"040000","type":"tree","sha":"6e33153d15048c10c96e583b8fa1c9f4b634e4e7","url":"https://api.github.com/repos/link-foundation/python-ai-driven-development-pipeline-template/git/trees/6e33153d15048c10c96e583b8fa1c9f4b634e4e7"},{"path":"changelog.d/20251218_133759_drakonard_issue_1_3b50e2f12be6.md","mode":"100644","type":"blob","sha":"2f15a7060700e394d28c6764b8b7d4c6219714db","size":317,"url":"https://api.github.com/repos/link-foundation/python-ai-driven-development-pipeline-template/git/blobs/2f15a7060700e394d28c6764b8b7d4c6219714db"},{"path":"changelog.d/20260509_204000_issue_6_release_metadata.md","mode":"100644","type":"blob","sha":"22529c0c2dc84b06ca072c8d50d0477d9fd34d5f","size":207,"url":"https://api.github.com/repos/link-foundation/python-ai-driven-development-pipeline-template/git/blobs/22529c0c2dc84b06ca072c8d50d0477d9fd34d5f"},{"path":"changelog.d/README.md","mode":"100644","type":"blob","sha":"fc68734b2709e4c3443a1d79278c335e728f5d42","size":1469,"url":"https://api.github.com/repos/link-foundation/python-ai-driven-development-pipeline-template/git/blobs/fc68734b2709e4c3443a1d79278c335e728f5d42"},{"path":"changelog.d/fragment_template.md.j2","mode":"100644","type":"blob","sha":"62d6e5b08fe772fc46bca5049282f5a37ef75061","size":515,"url":"https://api.github.com/repos/link-foundation/python-ai-driven-development-pipeline-template/git/blobs/62d6e5b08fe772fc46bca5049282f5a37ef75061"},{"path":"examples","mode":"040000","type":"tree","sha":"5d484f0907b280c32303463f2d1e20894c5b1856","url":"https://api.github.com/repos/link-foundation/python-ai-driven-development-pipeline-template/git/trees/5d484f0907b280c32303463f2d1e20894c5b1856"},{"path":"examples/basic_usage.py","mode":"100644","type":"blob","sha":"68f712256b403ef1e60486f7a9230651545db9a5","size":863,"url":"https://api.github.com/repos/link-foundation/python-ai-driven-development-pipeline-template/git/blobs/68f712256b403ef1e60486f7a9230651545db9a5"},{"path":"pyproject.toml","mode":"100644","type":"blob","sha":"ae38cf09375b55859134cdbde9023b7ac3e6da28","size":4233,"url":"https://api.github.com/repos/link-foundation/python-ai-driven-development-pipeline-template/git/blobs/ae38cf09375b55859134cdbde9023b7ac3e6da28"},{"path":"scripts","mode":"040000","type":"tree","sha":"77d661dff70ab2db421b043ed8e12583360f6944","url":"https://api.github.com/repos/link-foundation/python-ai-driven-development-pipeline-template/git/trees/77d661dff70ab2db421b043ed8e12583360f6944"},{"path":"scripts/bump_version.py","mode":"100755","type":"blob","sha":"6850af3bc70e7f42d9dd5936d9faf38f6b9572c2","size":5337,"url":"https://api.github.com/repos/link-foundation/python-ai-driven-development-pipeline-template/git/blobs/6850af3bc70e7f42d9dd5936d9faf38f6b9572c2"},{"path":"scripts/check_file_size.py","mode":"100755","type":"blob","sha":"e90ac79be1e5a7b5bc283497dfbc0ba1e4ee7ac2","size":2640,"url":"https://api.github.com/repos/link-foundation/python-ai-driven-development-pipeline-template/git/blobs/e90ac79be1e5a7b5bc283497dfbc0ba1e4ee7ac2"},{"path":"scripts/create_github_release.py","mode":"100755","type":"blob","sha":"1208eb8866addb690aaec4ef2422422e4c7ead2f","size":5534,"url":"https://api.github.com/repos/link-foundation/python-ai-driven-development-pipeline-template/git/blobs/1208eb8866addb690aaec4ef2422422e4c7ead2f"},{"path":"scripts/create_manual_changeset.py","mode":"100644","type":"blob","sha":"083a88dcd51e51e1908807aaea363a54cebc2b56","size":7319,"url":"https://api.github.com/repos/link-foundation/python-ai-driven-development-pipeline-template/git/blobs/083a88dcd51e51e1908807aaea363a54cebc2b56"},{"path":"scripts/detect_code_changes.py","mode":"100755","type":"blob","sha":"fd3cd9e0db590722fdda378dac69717e9ef6dd7c","size":6559,"url":"https://api.github.com/repos/link-foundation/python-ai-driven-development-pipeline-template/git/blobs/fd3cd9e0db590722fdda378dac69717e9ef6dd7c"},{"path":"scripts/format_release_notes.py","mode":"100644","type":"blob","sha":"e96508779ed891ed281e062afcbc76edc65c8725","size":7190,"url":"https://api.github.com/repos/link-foundation/python-ai-driven-development-pipeline-template/git/blobs/e96508779ed891ed281e062afcbc76edc65c8725"},{"path":"scripts/publish_to_pypi.py","mode":"100755","type":"blob","sha":"641bede7e0c218b523c184c79804a314ce8beecd","size":4530,"url":"https://api.github.com/repos/link-foundation/python-ai-driven-development-pipeline-template/git/blobs/641bede7e0c218b523c184c79804a314ce8beecd"},{"path":"scripts/validate_changeset.py","mode":"100644","type":"blob","sha":"c968488f66ffbe122d15bbd33968432f11173bc3","size":4623,"url":"https://api.github.com/repos/link-foundation/python-ai-driven-development-pipeline-template/git/blobs/c968488f66ffbe122d15bbd33968432f11173bc3"},{"path":"scripts/version_and_commit.py","mode":"100755","type":"blob","sha":"5080e8277d34003d5fa71c56b73ff9a3bff6f316","size":6977,"url":"https://api.github.com/repos/link-foundation/python-ai-driven-development-pipeline-template/git/blobs/5080e8277d34003d5fa71c56b73ff9a3bff6f316"},{"path":"src","mode":"040000","type":"tree","sha":"a7d4189fa124b769692ec35c86b9c42f1540974b","url":"https://api.github.com/repos/link-foundation/python-ai-driven-development-pipeline-template/git/trees/a7d4189fa124b769692ec35c86b9c42f1540974b"},{"path":"src/my_package","mode":"040000","type":"tree","sha":"5702510666dadfaaff17f7746334e9ab6d2d59a0","url":"https://api.github.com/repos/link-foundation/python-ai-driven-development-pipeline-template/git/trees/5702510666dadfaaff17f7746334e9ab6d2d59a0"},{"path":"src/my_package/__init__.py","mode":"100644","type":"blob","sha":"bf4618d4720e3ca1a1e0384e082f87b6c91d936c","size":780,"url":"https://api.github.com/repos/link-foundation/python-ai-driven-development-pipeline-template/git/blobs/bf4618d4720e3ca1a1e0384e082f87b6c91d936c"},{"path":"src/my_package/py.typed","mode":"100644","type":"blob","sha":"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391","size":0,"url":"https://api.github.com/repos/link-foundation/python-ai-driven-development-pipeline-template/git/blobs/e69de29bb2d1d6434b8b29ae775ad8c2e48c5391"},{"path":"tests","mode":"040000","type":"tree","sha":"e1f757a5858a381e4a7ec8fa74cb681b73608bf7","url":"https://api.github.com/repos/link-foundation/python-ai-driven-development-pipeline-template/git/trees/e1f757a5858a381e4a7ec8fa74cb681b73608bf7"},{"path":"tests/__init__.py","mode":"100644","type":"blob","sha":"42baaec78e880de77a32d8c2ee87068d41597e46","size":33,"url":"https://api.github.com/repos/link-foundation/python-ai-driven-development-pipeline-template/git/blobs/42baaec78e880de77a32d8c2ee87068d41597e46"},{"path":"tests/test_create_github_release.py","mode":"100644","type":"blob","sha":"dea36484c40bd480df490981e4c581856edec18f","size":2052,"url":"https://api.github.com/repos/link-foundation/python-ai-driven-development-pipeline-template/git/blobs/dea36484c40bd480df490981e4c581856edec18f"},{"path":"tests/test_my_package.py","mode":"100644","type":"blob","sha":"93922ece2904df96c30b0b5f56fcc39d6dab1ac6","size":1610,"url":"https://api.github.com/repos/link-foundation/python-ai-driven-development-pipeline-template/git/blobs/93922ece2904df96c30b0b5f56fcc39d6dab1ac6"}],"truncated":false} \ No newline at end of file diff --git a/docs/case-studies/issue-86/templates/python-ai-driven-development-pipeline-template/version_and_commit.py b/docs/case-studies/issue-86/templates/python-ai-driven-development-pipeline-template/version_and_commit.py new file mode 100644 index 0000000..5080e82 --- /dev/null +++ b/docs/case-studies/issue-86/templates/python-ai-driven-development-pipeline-template/version_and_commit.py @@ -0,0 +1,237 @@ +#!/usr/bin/env python3 +""" +Version packages and commit to main branch. + +This script handles version bumping and committing for CI/CD workflows. +It supports idempotent re-runs and detects when work was already completed. + +Usage: + python scripts/version_and_commit.py --bump-type [--description "..."] + +Example: + python scripts/version_and_commit.py --bump-type patch + python scripts/version_and_commit.py --bump-type minor --description "New feature" + +Environment variables: + GITHUB_OUTPUT: Path to GitHub Actions output file +""" + +import argparse +import os +import re +import subprocess +import sys +from pathlib import Path + + +def run_command( + cmd: list[str], check: bool = True, capture: bool = False +) -> subprocess.CompletedProcess: + """Run a command and handle errors.""" + cmd_str = " ".join(cmd) + print(f"Running: {cmd_str}") + + result = subprocess.run( + cmd, + capture_output=capture, + text=True, + check=False, + ) + + if not capture: + if result.stdout: + print(result.stdout) + if result.stderr: + print(result.stderr, file=sys.stderr) + + if check and result.returncode != 0: + if capture: + print(result.stdout) + print(result.stderr, file=sys.stderr) + print( + f"Error: Command failed with exit code {result.returncode}", + file=sys.stderr, + ) + sys.exit(result.returncode) + + return result + + +def set_github_output(key: str, value: str) -> None: + """Set GitHub Actions output variable.""" + output_file = os.environ.get("GITHUB_OUTPUT") + if output_file: + with open(output_file, "a") as f: + f.write(f"{key}={value}\n") + print(f"Set output: {key}={value}") + + +def get_current_version(pyproject_path: Path) -> str: + """Get version from pyproject.toml.""" + content = pyproject_path.read_text() + match = re.search(r'^version\s*=\s*["\']([^"\']+)["\']', content, re.MULTILINE) + if not match: + raise ValueError("Could not find version in pyproject.toml") + return match.group(1) + + +def configure_git() -> None: + """Configure git for automated commits.""" + print("Configuring git...") + run_command( + ["git", "config", "user.name", "github-actions[bot]"], + ) + run_command( + ["git", "config", "user.email", "github-actions[bot]@users.noreply.github.com"], + ) + + +def check_remote_changes(pyproject_path: Path) -> tuple[bool, str]: + """ + Check if remote main has advanced (handles re-runs). + Returns (already_released, remote_version). + """ + print("\nChecking for remote changes...") + run_command(["git", "fetch", "origin", "main"]) + + # Get commit SHAs + local_head = run_command( + ["git", "rev-parse", "HEAD"], + capture=True, + ).stdout.strip() + + remote_head = run_command( + ["git", "rev-parse", "origin/main"], + capture=True, + ).stdout.strip() + + if local_head != remote_head: + print(f"Remote main has advanced (local: {local_head}, remote: {remote_head})") + print("This may indicate a previous attempt partially succeeded.") + + # Get remote version + remote_content = run_command( + ["git", "show", "origin/main:pyproject.toml"], + capture=True, + ).stdout + + remote_match = re.search( + r'^version\s*=\s*["\']([^"\']+)["\']', + remote_content, + re.MULTILINE, + ) + if remote_match: + remote_version = remote_match.group(1) + print(f"Remote version: {remote_version}") + + # Check if versions differ (indicating work was done) + local_version = get_current_version(pyproject_path) + if local_version != remote_version: + print("Local and remote versions differ, rebasing...") + run_command(["git", "rebase", "origin/main"]) + return False, remote_version + else: + print("Versions match, assuming previous run completed successfully") + return True, remote_version + + return False, "" + + +def main() -> int: + """Main entry point.""" + parser = argparse.ArgumentParser( + description="Version bump and commit for CI/CD", + ) + parser.add_argument( + "--bump-type", + choices=["major", "minor", "patch"], + required=True, + help="Type of version bump", + ) + parser.add_argument( + "--description", + default="", + help="Description for changelog", + ) + + args = parser.parse_args() + + # Determine project root + script_dir = Path(__file__).parent + project_root = script_dir.parent + pyproject_path = project_root / "pyproject.toml" + + if not pyproject_path.exists(): + print(f"Error: {pyproject_path} not found", file=sys.stderr) + return 1 + + try: + # Configure git + configure_git() + + # Check for remote changes + already_released, remote_version = check_remote_changes(pyproject_path) + + if already_released: + print("Version bump already completed in previous run") + set_github_output("version_committed", "false") + set_github_output("already_released", "true") + set_github_output("new_version", remote_version) + return 0 + + # Get current version + old_version = get_current_version(pyproject_path) + print(f"\nCurrent version: {old_version}") + + # Run version bump + print(f"\nBumping version ({args.bump_type})...") + bump_cmd = [ + sys.executable, + "scripts/bump_version.py", + args.bump_type, + ] + if args.description: + bump_cmd.extend(["--description", args.description]) + + run_command(bump_cmd) + + # Get new version + new_version = get_current_version(pyproject_path) + print(f"New version: {new_version}") + set_github_output("new_version", new_version) + + # Check for changes + status = run_command( + ["git", "status", "--porcelain"], + capture=True, + ).stdout.strip() + + if status: + print("\nChanges detected, committing...") + + # Stage all changes + run_command(["git", "add", "-A"]) + + # Commit with version as message + run_command(["git", "commit", "-m", new_version]) + + # Push to main + run_command(["git", "push", "origin", "main"]) + + print( + f"\n✅ Version bump committed and pushed: {old_version} → {new_version}" + ) + set_github_output("version_committed", "true") + else: + print("\nNo changes to commit") + set_github_output("version_committed", "false") + + return 0 + + except Exception as e: + print(f"Error: {e}", file=sys.stderr) + return 1 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/docs/case-studies/issue-86/templates/rust-ai-driven-development-pipeline-template/check-release-needed.rs b/docs/case-studies/issue-86/templates/rust-ai-driven-development-pipeline-template/check-release-needed.rs new file mode 100644 index 0000000..b97c5e4 --- /dev/null +++ b/docs/case-studies/issue-86/templates/rust-ai-driven-development-pipeline-template/check-release-needed.rs @@ -0,0 +1,395 @@ +#!/usr/bin/env rust-script +//! Check if a release is needed based on changelog fragments and version state +//! +//! This script checks: +//! 1. If there are changelog fragments to process +//! 2. If the current version has already been published to crates.io +//! 3. If the matching GitHub release and configured Docker Hub image tag exist +//! +//! IMPORTANT: This script checks external release artifacts, NOT git tags. +//! This is critical because: +//! - Git tags can exist without the package being published +//! - GitHub releases create tags but do not publish to crates.io or Docker Hub +//! - A crates.io publish can succeed while later Docker/GitHub release steps fail +//! +//! Supports both single-language and multi-language repository structures: +//! - Single-language: Cargo.toml in repository root +//! - Multi-language: Cargo.toml in rust/ subfolder +//! +//! Usage: rust-script scripts/check-release-needed.rs [--rust-root ] +//! +//! Environment variables: +//! - HAS_FRAGMENTS: 'true' if changelog fragments exist (from get-bump-type.rs) +//! - DOCKERHUB_IMAGE: Optional Docker Hub image name to verify (namespace/repository) +//! - GITHUB_REPOSITORY: GitHub repository to verify (owner/repository) +//! +//! Outputs (written to GITHUB_OUTPUT): +//! - should_release: 'true' if a release should be created +//! - skip_bump: 'true' if version bump should be skipped while missing artifacts are recreated +//! - crate_published: 'true' if the current version already exists on crates.io +//! - dockerhub_required: 'true' if Docker Hub publishing is configured and a Dockerfile exists +//! - dockerhub_published: 'true' if the configured Docker Hub tag exists +//! - github_release_published: 'true' if the matching GitHub release exists +//! - max_published_version: the highest non-yanked version on crates.io (for downstream use) +//! +//! ```cargo +//! [dependencies] +//! regex = "1" +//! ureq = "2" +//! serde = { version = "1", features = ["derive"] } +//! serde_json = "1" +//! ``` + +use serde::Deserialize; +use std::env; +use std::fs; +use std::path::Path; +use std::process::exit; + +#[path = "rust-paths.rs"] +mod rust_paths; + +fn get_arg(name: &str) -> Option { + let args: Vec = env::args().collect(); + let flag = format!("--{}", name); + + if let Some(idx) = args.iter().position(|a| a == &flag) { + return args.get(idx + 1).cloned(); + } + + let env_name = name.to_uppercase().replace('-', "_"); + env::var(&env_name).ok().filter(|s| !s.is_empty()) +} + +fn set_output(key: &str, value: &str) { + if let Ok(output_file) = env::var("GITHUB_OUTPUT") { + if let Err(e) = fs::OpenOptions::new() + .create(true) + .append(true) + .open(&output_file) + .and_then(|mut f| { + use std::io::Write; + writeln!(f, "{}={}", key, value) + }) + { + eprintln!("Warning: Could not write to GITHUB_OUTPUT: {}", e); + } + } + println!("Output: {}={}", key, value); +} + +#[derive(Deserialize)] +struct CratesIoVersion { + version: Option, +} + +#[derive(Deserialize)] +struct CratesIoVersionInfo { + #[allow(dead_code)] + num: String, +} + +#[derive(Deserialize)] +struct CratesIoCrate { + versions: Option>, +} + +#[derive(Deserialize)] +struct CratesIoVersionEntry { + num: String, + yanked: bool, +} + +fn check_version_on_crates_io(crate_name: &str, version: &str) -> bool { + let url = format!("https://crates.io/api/v1/crates/{}/{}", crate_name, version); + + match ureq::get(&url) + .set("User-Agent", "rust-script-check-release") + .call() + { + Ok(response) => { + if response.status() == 200 { + if let Ok(body) = response.into_string() { + if let Ok(data) = serde_json::from_str::(&body) { + return data.version.is_some(); + } + } + } + false + } + Err(ureq::Error::Status(404, _)) => false, + Err(e) => { + eprintln!("Warning: Could not check crates.io: {}", e); + false + } + } +} + +fn split_docker_image(image: &str) -> Option<(&str, &str)> { + let mut parts = image.split('/'); + let namespace = parts.next()?; + let repository = parts.next()?; + + if parts.next().is_some() || namespace.is_empty() || repository.is_empty() { + None + } else { + Some((namespace, repository)) + } +} + +fn check_docker_hub_tag(image: &str, version: &str) -> bool { + let Some((namespace, repository)) = split_docker_image(image) else { + eprintln!( + "Warning: Could not parse Docker Hub image '{}'; expected namespace/repository", + image + ); + return false; + }; + + let url = format!( + "https://hub.docker.com/v2/repositories/{}/{}/tags/{}", + namespace, repository, version + ); + + match ureq::get(&url) + .set("User-Agent", "rust-script-check-release") + .call() + { + Ok(response) => response.status() == 200, + Err(ureq::Error::Status(404, _)) => false, + Err(e) => { + eprintln!("Warning: Could not check Docker Hub tag: {}", e); + false + } + } +} + +fn check_github_release(repository: &str, tag_prefix: &str, version: &str) -> bool { + let url = format!( + "https://api.github.com/repos/{}/releases/tags/{}{}", + repository, tag_prefix, version + ); + + let mut request = ureq::get(&url) + .set("User-Agent", "rust-script-check-release") + .set("Accept", "application/vnd.github+json"); + + if let Ok(token) = env::var("GITHUB_TOKEN") { + if !token.is_empty() { + let auth_header = format!("Bearer {}", token); + request = request.set("Authorization", &auth_header); + } + } + + match request.call() { + Ok(response) => response.status() == 200, + Err(ureq::Error::Status(404, _)) => false, + Err(e) => { + eprintln!("Warning: Could not check GitHub release: {}", e); + false + } + } +} + +fn docker_hub_image_to_check() -> Option { + get_arg("dockerhub-image") + .or_else(|| get_arg("docker-hub-image")) + .or_else(|| get_arg("dockerhub_image")) + .filter(|image| Path::new("Dockerfile").exists() && !image.trim().is_empty()) +} + +fn release_is_complete( + crate_published: bool, + dockerhub_required: bool, + dockerhub_published: bool, + github_release_published: bool, +) -> bool { + crate_published && (!dockerhub_required || dockerhub_published) && github_release_published +} + +fn parse_semver(version: &str) -> Option<(u32, u32, u32)> { + let parts: Vec<&str> = version.split('-').next()?.split('.').collect(); + if parts.len() != 3 { + return None; + } + Some(( + parts[0].parse().ok()?, + parts[1].parse().ok()?, + parts[2].parse().ok()?, + )) +} + +fn get_max_published_version(crate_name: &str) -> Option { + let url = format!("https://crates.io/api/v1/crates/{}", crate_name); + + match ureq::get(&url) + .set("User-Agent", "rust-script-check-release") + .call() + { + Ok(response) => { + if response.status() == 200 { + if let Ok(body) = response.into_string() { + if let Ok(data) = serde_json::from_str::(&body) { + if let Some(versions) = data.versions { + let mut max_version: Option<(u32, u32, u32, String)> = None; + for v in &versions { + if v.yanked { + continue; + } + if let Some(parsed) = parse_semver(&v.num) { + match &max_version { + None => { + max_version = + Some((parsed.0, parsed.1, parsed.2, v.num.clone())); + } + Some(current) => { + if parsed > (current.0, current.1, current.2) { + max_version = Some(( + parsed.0, + parsed.1, + parsed.2, + v.num.clone(), + )); + } + } + } + } + } + return max_version.map(|v| v.3); + } + } + } + } + None + } + Err(ureq::Error::Status(404, _)) => None, + Err(e) => { + eprintln!("Warning: Could not query crates.io for versions: {}", e); + None + } + } +} + +fn main() { + let rust_root = match rust_paths::get_rust_root(None, true) { + Ok(root) => root, + Err(e) => { + eprintln!("Error: {}", e); + exit(1); + } + }; + let cargo_toml = rust_paths::get_cargo_toml_path(&rust_root); + let package_manifest = match rust_paths::get_package_manifest_path(&cargo_toml) { + Ok(path) => path, + Err(e) => { + eprintln!("Error: {}", e); + exit(1); + } + }; + + let has_fragments = env::var("HAS_FRAGMENTS") + .map(|v| v == "true") + .unwrap_or(false); + + let package_info = match rust_paths::read_package_info(&package_manifest) { + Ok(info) => info, + Err(e) => { + eprintln!("Error: {}", e); + exit(1); + } + }; + let crate_name = package_info.name; + let current_version = package_info.version; + + let max_published = get_max_published_version(&crate_name); + if let Some(ref max_ver) = max_published { + println!("Max published version on crates.io: {}", max_ver); + set_output("max_published_version", max_ver); + } else { + println!("No versions published on crates.io yet (or crate not found)"); + set_output("max_published_version", ""); + } + + if !has_fragments { + let crate_published = check_version_on_crates_io(&crate_name, ¤t_version); + let tag_prefix = get_arg("tag-prefix").unwrap_or_else(|| "v".to_string()); + let dockerhub_image = docker_hub_image_to_check(); + let dockerhub_required = dockerhub_image.is_some(); + let dockerhub_published = dockerhub_image + .as_deref() + .map(|image| { + check_docker_hub_tag(image, ¤t_version) + && check_docker_hub_tag(image, "latest") + }) + .unwrap_or(false); + let github_release_published = get_arg("repository") + .or_else(|| env::var("GITHUB_REPOSITORY").ok().filter(|s| !s.is_empty())) + .map(|repository| check_github_release(&repository, &tag_prefix, ¤t_version)) + .unwrap_or_else(|| { + eprintln!("Warning: GITHUB_REPOSITORY not set; assuming GitHub release is missing"); + false + }); + + set_output( + "crate_published", + if crate_published { "true" } else { "false" }, + ); + set_output( + "dockerhub_required", + if dockerhub_required { "true" } else { "false" }, + ); + set_output( + "dockerhub_published", + if dockerhub_published { "true" } else { "false" }, + ); + set_output( + "github_release_published", + if github_release_published { + "true" + } else { + "false" + }, + ); + + println!( + "Crate: {}, Version: {}, Published on crates.io: {}", + crate_name, current_version, crate_published + ); + if let Some(image) = dockerhub_image { + println!( + "Docker image: {}, version/latest tags published on Docker Hub: {}", + image, dockerhub_published + ); + } else { + println!("Docker Hub artifact check skipped: DOCKERHUB_IMAGE or Dockerfile is not configured"); + } + println!( + "GitHub release {}{} published: {}", + tag_prefix, current_version, github_release_published + ); + + if release_is_complete( + crate_published, + dockerhub_required, + dockerhub_published, + github_release_published, + ) { + println!( + "No changelog fragments and v{} is fully published", + current_version + ); + set_output("should_release", "false"); + } else { + println!( + "No changelog fragments but v{} is missing at least one release artifact", + current_version + ); + set_output("should_release", "true"); + set_output("skip_bump", "true"); + } + } else { + println!("Found changelog fragments, proceeding with release"); + set_output("should_release", "true"); + set_output("skip_bump", "false"); + } +} diff --git a/docs/case-studies/issue-86/templates/rust-ai-driven-development-pipeline-template/file-tree.txt b/docs/case-studies/issue-86/templates/rust-ai-driven-development-pipeline-template/file-tree.txt new file mode 100644 index 0000000..1def62c --- /dev/null +++ b/docs/case-studies/issue-86/templates/rust-ai-driven-development-pipeline-template/file-tree.txt @@ -0,0 +1,147 @@ +.github +.github/workflows +.github/workflows/release.yml +.gitignore +.pre-commit-config.yaml +CHANGELOG.md +CONTRIBUTING.md +Cargo.lock +Cargo.toml +LICENSE +README.md +changelog.d +changelog.d/20251227_224645_changeset_support.md +changelog.d/20251229_143823_fix_ci_workflow_dependencies.md +changelog.d/20251231_115800_fix_readme_script_references.md +changelog.d/20260107_apply_best_practices.md +changelog.d/20260108_171124_fix_changelog_check.md +changelog.d/20260108_171435_prevent_manual_version_modification.md +changelog.d/20260108_apply_lino_objects_codec_fixes.md +changelog.d/20260111_multi_language_support.md +changelog.d/20260119_best_practices_from_browser_commander.md +changelog.d/20260311_translate_scripts_to_rust.md +changelog.d/20260413-ci-cd-best-practices.md +changelog.d/20260413_fix_cargo_token_fallback.md +changelog.d/20260413_fix_crates_io_check.md +changelog.d/20260413_fix_lookahead_regex.md +changelog.d/20260414_fix_per_commit_diff.md +changelog.d/20260415_fix_workspace_release_scripts.md +changelog.d/20260501_decouple_docs_deploy.md +changelog.d/20260503_111500_ci_timeouts.md +changelog.d/20260503_111700_file_size_warning_threshold.md +changelog.d/20260509_031015_human_readable_release_titles.md +changelog.d/20260509_205000_docker_hub_release_publishing.md +changelog.d/20260512_172908_github_pages_artifact_deploy.md +changelog.d/README.md +docs +docs/case-studies +docs/case-studies/issue-11 +docs/case-studies/issue-11/README.md +docs/case-studies/issue-11/analysis-crates-io.md +docs/case-studies/issue-11/analysis-set-output.md +docs/case-studies/issue-11/analysis-workflow-dispatch.md +docs/case-studies/issue-11/online-research.md +docs/case-studies/issue-17 +docs/case-studies/issue-17/README.md +docs/case-studies/issue-19 +docs/case-studies/issue-19/README.md +docs/case-studies/issue-19/ci-logs +docs/case-studies/issue-19/ci-logs/ci-run-20885464993.log.gz +docs/case-studies/issue-19/pr-114-data +docs/case-studies/issue-19/pr-114-data/issue-113-details.txt +docs/case-studies/issue-19/pr-114-data/pr-commits.json +docs/case-studies/issue-19/pr-114-data/pr-conversation-comments.json +docs/case-studies/issue-19/pr-114-data/pr-details.json +docs/case-studies/issue-19/pr-114-data/pr-diff.patch +docs/case-studies/issue-19/pr-114-data/pr-review-comments.json +docs/case-studies/issue-19/pr-114-data/pr-reviews.json +docs/case-studies/issue-19/pr-114-data/solution-draft-log-1.txt.gz +docs/case-studies/issue-19/pr-114-data/solution-draft-log-2.txt.gz +docs/case-studies/issue-21 +docs/case-studies/issue-21/README.md +docs/case-studies/issue-21/browser-commander-issue-27.md +docs/case-studies/issue-21/browser-commander-issue-29.md +docs/case-studies/issue-21/browser-commander-issue-31.md +docs/case-studies/issue-21/browser-commander-issue-33.md +docs/case-studies/issue-21/browser-commander-rust.yml +docs/case-studies/issue-25 +docs/case-studies/issue-25/README.md +docs/case-studies/issue-29 +docs/case-studies/issue-29/README.md +docs/case-studies/issue-32 +docs/case-studies/issue-32/README.md +docs/case-studies/issue-34 +docs/case-studies/issue-34/README.md +docs/case-studies/issue-38 +docs/case-studies/issue-38/README.md +docs/case-studies/issue-38/raw-data +docs/case-studies/issue-38/raw-data/downstream-meta-after-run-24985948212.json +docs/case-studies/issue-38/raw-data/downstream-meta-after-run-24985948212.log.gz +docs/case-studies/issue-38/raw-data/downstream-meta-before-run-24983875003.json +docs/case-studies/issue-38/raw-data/downstream-meta-before-run-24983875003.log.gz +docs/case-studies/issue-38/raw-data/downstream-meta-ontology-issue-3.json +docs/case-studies/issue-38/raw-data/downstream-meta-ontology-pr-4.json +docs/case-studies/issue-38/raw-data/issue-38-comments.json +docs/case-studies/issue-38/raw-data/issue-38.json +docs/case-studies/issue-38/raw-data/js-template-issue-search.json +docs/case-studies/issue-38/raw-data/main-run-24465255225.json +docs/case-studies/issue-38/raw-data/main-run-24465255225.log.gz +docs/case-studies/issue-38/raw-data/main-runs.json +docs/case-studies/issue-38/raw-data/pr-39-conversation-comments.json +docs/case-studies/issue-38/raw-data/pr-39-review-comments.json +docs/case-studies/issue-38/raw-data/pr-39-reviews.json +docs/case-studies/issue-38/raw-data/pr-39.json +docs/case-studies/issue-38/raw-data/pr-branch-runs.json +docs/case-studies/issue-38/raw-data/pr-run-25212295127.json +docs/case-studies/issue-38/raw-data/pr-run-25212295127.log.gz +docs/case-studies/issue-38/raw-data/rust-template-issue-search.json +docs/case-studies/issue-38/template-data +docs/case-studies/issue-38/template-data/js-template-ci-tree.txt +docs/case-studies/issue-38/template-data/js-template-links.yml +docs/case-studies/issue-38/template-data/js-template-release.yml +docs/case-studies/issue-38/template-data/rust-template-ci-tree.txt +docs/case-studies/issue-38/template-data/rust-template-release-after.yml +docs/case-studies/issue-38/template-data/rust-template-release-before.yml +docs/ci-cd +docs/ci-cd/troubleshooting.md +examples +examples/basic_usage.rs +experiments +experiments/test-changelog-parsing.rs +experiments/test-crates-io-check.rs +experiments/test-detect-code-changes.sh +experiments/test-version-check-dependencies.sh +experiments/test-version-check.sh +scripts +scripts/bump-version.rs +scripts/check-changelog-fragment.rs +scripts/check-file-size.rs +scripts/check-release-needed.rs +scripts/check-version-modification.rs +scripts/collect-changelog.rs +scripts/create-changelog-fragment.rs +scripts/create-github-release.rs +scripts/detect-code-changes.rs +scripts/get-bump-type.rs +scripts/get-version.rs +scripts/git-config.rs +scripts/publish-crate.rs +scripts/rust-paths.rs +scripts/version-and-commit.rs +scripts/wait-for-crate.rs +src +src/lib.rs +src/main.rs +src/sum.rs +tests +tests/integration +tests/integration/mod.rs +tests/integration/sum.rs +tests/unit +tests/unit/ci-cd +tests/unit/ci-cd/changelog_parsing.rs +tests/unit/ci-cd/mod.rs +tests/unit/ci-cd/workflow_release.rs +tests/unit/ci-cd/workspace_manifest_resolution.rs +tests/unit/mod.rs +tests/unit/sum.rs diff --git a/docs/case-studies/issue-86/templates/rust-ai-driven-development-pipeline-template/publish-crate.rs b/docs/case-studies/issue-86/templates/rust-ai-driven-development-pipeline-template/publish-crate.rs new file mode 100644 index 0000000..ad46ced --- /dev/null +++ b/docs/case-studies/issue-86/templates/rust-ai-driven-development-pipeline-template/publish-crate.rs @@ -0,0 +1,179 @@ +#!/usr/bin/env rust-script +//! Publish package to crates.io +//! +//! This script publishes the Rust package to crates.io and handles +//! the case where the version already exists. +//! +//! Supports both single-language and multi-language repository structures: +//! - Single-language: Cargo.toml in repository root +//! - Multi-language: Cargo.toml in rust/ subfolder +//! +//! Usage: rust-script scripts/publish-crate.rs [--token ] [--rust-root ] +//! +//! Environment variables (checked in order of priority): +//! - CARGO_REGISTRY_TOKEN: Cargo's native crates.io token (preferred) +//! - CARGO_TOKEN: Alternative token name for backwards compatibility +//! +//! Outputs (written to GITHUB_OUTPUT): +//! - publish_result: 'success', 'already_exists', or 'failed' +//! +//! ```cargo +//! [dependencies] +//! regex = "1" +//! ``` + +use std::env; +use std::fs; +use std::io::Write; +use std::process::{Command, exit}; + +#[path = "rust-paths.rs"] +mod rust_paths; + +fn get_arg(name: &str) -> Option { + let args: Vec = env::args().collect(); + let flag = format!("--{}", name); + + if let Some(idx) = args.iter().position(|a| a == &flag) { + return args.get(idx + 1).cloned(); + } + + None +} + +fn needs_cd(rust_root: &str) -> bool { + rust_root != "." +} + +fn set_output(key: &str, value: &str) { + if let Ok(output_file) = env::var("GITHUB_OUTPUT") { + if let Ok(mut file) = fs::OpenOptions::new().create(true).append(true).open(&output_file) { + let _ = writeln!(file, "{}={}", key, value); + } + } + println!("Output: {}={}", key, value); +} + +fn main() { + let rust_root = match rust_paths::get_rust_root(None, true) { + Ok(root) => root, + Err(e) => { + eprintln!("Error: {}", e); + exit(1); + } + }; + let cargo_toml = rust_paths::get_cargo_toml_path(&rust_root); + let package_manifest = match rust_paths::get_package_manifest_path(&cargo_toml) { + Ok(path) => path, + Err(e) => { + eprintln!("Error: {}", e); + exit(1); + } + }; + + // Get token from CLI arg, then env vars + let token = get_arg("token") + .or_else(|| env::var("CARGO_REGISTRY_TOKEN").ok().filter(|s| !s.is_empty())) + .or_else(|| env::var("CARGO_TOKEN").ok().filter(|s| !s.is_empty())); + + let package_info = match rust_paths::read_package_info(&package_manifest) { + Ok(info) => info, + Err(e) => { + eprintln!("Error: {}", e); + exit(1); + } + }; + let name = package_info.name; + let version = package_info.version; + + println!("Package: {}@{}", name, version); + + if name == "example-sum-package-name" { + println!("Skipping publish: package name is the template default 'example-sum-package-name'"); + println!("Rename the package in Cargo.toml before publishing to crates.io"); + set_output("publish_result", "skipped"); + return; + } + + println!(); + println!("=== Attempting to publish to crates.io ==="); + + if token.is_none() { + println!("::warning::Neither CARGO_REGISTRY_TOKEN nor CARGO_TOKEN is set, attempting publish without explicit token"); + println!(); + println!("To fix this, ensure one of the following secrets is configured:"); + println!(" - CARGO_REGISTRY_TOKEN (Cargo's native env var, preferred)"); + println!(" - CARGO_TOKEN (alternative for backwards compatibility)"); + println!(); + println!("For organization secrets, you may need to map the secret name in your workflow:"); + println!(" env:"); + println!(" CARGO_REGISTRY_TOKEN: ${{{{ secrets.CARGO_TOKEN }}}}"); + println!(); + } else { + println!("Using provided authentication token"); + } + + // Build the cargo publish command + let mut cmd = Command::new("cargo"); + cmd.arg("publish").arg("--allow-dirty").arg("-p").arg(&name); + + if let Some(t) = &token { + cmd.arg("--token").arg(t); + } + + // For multi-language repos, change to the rust directory + if needs_cd(&rust_root) { + cmd.current_dir(&rust_root); + } + + let output = cmd.output().expect("Failed to execute cargo publish"); + + if output.status.success() { + println!("Successfully published {}@{} to crates.io", name, version); + set_output("publish_result", "success"); + } else { + let stderr = String::from_utf8_lossy(&output.stderr); + let stdout = String::from_utf8_lossy(&output.stdout); + let combined = format!("{}\n{}", stdout, stderr); + + if combined.contains("already uploaded") || combined.contains("already exists") { + eprintln!(); + eprintln!("=== VERSION ALREADY PUBLISHED ==="); + eprintln!(); + eprintln!("Version {} already exists on crates.io.", version); + eprintln!("The release pipeline must always publish a version greater than what is already published."); + eprintln!("This indicates a bug in version bumping: the pipeline should have computed a new, unpublished version."); + eprintln!(); + set_output("publish_result", "already_exists"); + exit(1); + } else if combined.contains("non-empty token") + || combined.contains("please provide a") + || combined.contains("unauthorized") + || combined.contains("authentication") + { + eprintln!(); + eprintln!("=== AUTHENTICATION FAILURE ==="); + eprintln!(); + eprintln!("Failed to publish due to missing or invalid authentication token."); + eprintln!(); + eprintln!("SOLUTION: Configure one of these secrets in your repository or organization:"); + eprintln!(" 1. CARGO_REGISTRY_TOKEN - Cargo's native environment variable (preferred)"); + eprintln!(" 2. CARGO_TOKEN - Alternative name for backwards compatibility"); + eprintln!(); + eprintln!("If using organization secrets with a different name, map it in your workflow:"); + eprintln!(" - name: Publish to Crates.io"); + eprintln!(" env:"); + eprintln!(" CARGO_REGISTRY_TOKEN: ${{{{ secrets.YOUR_SECRET_NAME }}}}"); + eprintln!(); + eprintln!("See: https://doc.rust-lang.org/cargo/reference/publishing.html"); + eprintln!(); + set_output("publish_result", "auth_failed"); + exit(1); + } else { + eprintln!("Failed to publish for unknown reason"); + eprintln!("{}", combined); + set_output("publish_result", "failed"); + exit(1); + } + } +} diff --git a/docs/case-studies/issue-86/templates/rust-ai-driven-development-pipeline-template/release.yml b/docs/case-studies/issue-86/templates/rust-ai-driven-development-pipeline-template/release.yml new file mode 100644 index 0000000..885eb01 --- /dev/null +++ b/docs/case-studies/issue-86/templates/rust-ai-driven-development-pipeline-template/release.yml @@ -0,0 +1,670 @@ +name: CI/CD Pipeline + +on: + push: + branches: + - main + pull_request: + types: [opened, synchronize, reopened] + workflow_dispatch: + inputs: + release_mode: + description: 'Manual release mode' + required: true + type: choice + default: 'instant' + options: + - instant + - changelog-pr + bump_type: + description: 'Version bump type' + required: true + type: choice + options: + - patch + - minor + - major + description: + description: 'Release description (optional)' + required: false + type: string + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.ref == 'refs/heads/main' }} + +env: + CARGO_TERM_COLOR: always + RUSTFLAGS: -Dwarnings + # Support both CARGO_REGISTRY_TOKEN (cargo's native env var) and CARGO_TOKEN (for backwards compatibility) + CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN || secrets.CARGO_TOKEN }} + CARGO_TOKEN: ${{ secrets.CARGO_TOKEN }} + # Optional: set repository variable DOCKERHUB_IMAGE to namespace/image to publish Docker Hub releases. + DOCKERHUB_IMAGE: ${{ vars.DOCKERHUB_IMAGE }} + +jobs: + # === DETECT CHANGES - determines which jobs should run === + detect-changes: + name: Detect Changes + runs-on: ubuntu-latest + timeout-minutes: 5 + if: github.event_name != 'workflow_dispatch' + outputs: + rs-changed: ${{ steps.changes.outputs.rs-changed }} + toml-changed: ${{ steps.changes.outputs.toml-changed }} + docs-changed: ${{ steps.changes.outputs.docs-changed }} + workflow-changed: ${{ steps.changes.outputs.workflow-changed }} + any-code-changed: ${{ steps.changes.outputs.any-code-changed }} + steps: + - uses: actions/checkout@v6 + with: + fetch-depth: 0 + + - name: Setup Rust + uses: dtolnay/rust-toolchain@stable + + - name: Install rust-script + run: cargo install rust-script + + - name: Detect changes + id: changes + env: + GITHUB_EVENT_NAME: ${{ github.event_name }} + run: rust-script scripts/detect-code-changes.rs + + # === CHANGELOG CHECK - only runs on PRs with code changes === + # Docs-only PRs (./docs folder, markdown files) don't require changelog fragments + changelog: + name: Changelog Fragment Check + runs-on: ubuntu-latest + timeout-minutes: 10 + needs: [detect-changes] + if: github.event_name == 'pull_request' && needs.detect-changes.outputs.any-code-changed == 'true' + steps: + - uses: actions/checkout@v6 + with: + fetch-depth: 0 + + - name: Setup Rust + uses: dtolnay/rust-toolchain@stable + + - name: Install rust-script + run: cargo install rust-script + + - name: Check for changelog fragments + env: + GITHUB_BASE_REF: ${{ github.base_ref }} + run: rust-script scripts/check-changelog-fragment.rs + + # === VERSION CHECK - prevents manual version modification in PRs === + # This ensures versions are only modified by the automated release pipeline + version-check: + name: Version Modification Check + runs-on: ubuntu-latest + timeout-minutes: 5 + if: github.event_name == 'pull_request' + steps: + - uses: actions/checkout@v6 + with: + fetch-depth: 0 + + - name: Setup Rust + uses: dtolnay/rust-toolchain@stable + + - name: Install rust-script + run: cargo install rust-script + + - name: Check for manual version changes + env: + GITHUB_EVENT_NAME: ${{ github.event_name }} + GITHUB_HEAD_REF: ${{ github.head_ref }} + GITHUB_BASE_REF: ${{ github.base_ref }} + run: rust-script scripts/check-version-modification.rs + + # === LINT AND FORMAT CHECK === + # Lint runs independently of changelog check - it's a fast check that should always run + # See: https://github.com/link-assistant/hive-mind/pull/1024 for why this dependency was removed + lint: + name: Lint and Format Check + runs-on: ubuntu-latest + timeout-minutes: 10 + needs: [detect-changes] + # Note: always() is required because detect-changes is skipped on workflow_dispatch, + # and without always(), this job would also be skipped even though its condition includes workflow_dispatch. + # See: https://github.com/actions/runner/issues/491 + if: | + always() && !cancelled() && ( + github.event_name == 'push' || + github.event_name == 'workflow_dispatch' || + needs.detect-changes.outputs.rs-changed == 'true' || + needs.detect-changes.outputs.toml-changed == 'true' || + needs.detect-changes.outputs.docs-changed == 'true' || + needs.detect-changes.outputs.workflow-changed == 'true' + ) + steps: + - uses: actions/checkout@v6 + + - name: Setup Rust + uses: dtolnay/rust-toolchain@stable + with: + components: rustfmt, clippy + + - name: Install rust-script + run: cargo install rust-script + + - name: Cache cargo registry + uses: actions/cache@v5 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target + key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} + restore-keys: | + ${{ runner.os }}-cargo- + + - name: Check formatting + run: cargo fmt --all -- --check + + - name: Run Clippy + run: cargo clippy --all-targets --all-features + + - name: Check file size limit + run: rust-script scripts/check-file-size.rs + + # === TEST === + # Test runs independently of changelog check + test: + name: Test (${{ matrix.os }}) + runs-on: ${{ matrix.os }} + timeout-minutes: 10 + needs: [detect-changes, changelog] + # Run if: push event, OR changelog succeeded, OR changelog was skipped (docs-only PR) + if: always() && !cancelled() && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || needs.changelog.result == 'success' || needs.changelog.result == 'skipped') + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, macos-latest, windows-latest] + steps: + - uses: actions/checkout@v6 + + - name: Setup Rust + uses: dtolnay/rust-toolchain@stable + + - name: Cache cargo registry + uses: actions/cache@v5 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target + key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} + restore-keys: | + ${{ runner.os }}-cargo- + + - name: Run tests + run: cargo test --all-features --verbose + + - name: Run doc tests + run: cargo test --doc --verbose + + # === CODE COVERAGE === + # Generate and upload code coverage using cargo-llvm-cov + coverage: + name: Code Coverage + runs-on: ubuntu-latest + timeout-minutes: 15 + needs: [detect-changes] + if: | + always() && !cancelled() && ( + github.event_name == 'push' || + github.event_name == 'workflow_dispatch' || + needs.detect-changes.outputs.rs-changed == 'true' || + needs.detect-changes.outputs.toml-changed == 'true' + ) + steps: + - uses: actions/checkout@v6 + + - name: Setup Rust + uses: dtolnay/rust-toolchain@stable + with: + components: llvm-tools-preview + + - name: Cache cargo registry + uses: actions/cache@v5 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target + key: ${{ runner.os }}-cargo-coverage-${{ hashFiles('**/Cargo.lock') }} + restore-keys: | + ${{ runner.os }}-cargo-coverage- + + - name: Install cargo-llvm-cov + uses: taiki-e/install-action@cargo-llvm-cov + + - name: Generate code coverage + run: cargo llvm-cov --all-features --lcov --output-path lcov.info + + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v5 + with: + files: lcov.info + fail_ci_if_error: false + + # === BUILD === + # Build package - only runs if lint and test pass + build: + name: Build Package + runs-on: ubuntu-latest + timeout-minutes: 10 + needs: [lint, test] + if: always() && !cancelled() && needs.lint.result == 'success' && needs.test.result == 'success' + steps: + - uses: actions/checkout@v6 + + - name: Setup Rust + uses: dtolnay/rust-toolchain@stable + + - name: Cache cargo registry + uses: actions/cache@v5 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target + key: ${{ runner.os }}-cargo-build-${{ hashFiles('**/Cargo.lock') }} + restore-keys: | + ${{ runner.os }}-cargo-build- + + - name: Build release + run: cargo build --release --verbose + + - name: Check package + run: cargo package --list --allow-dirty + + # === AUTO RELEASE === + # Automatic release on push to main using changelog fragments + # This job automatically bumps version based on fragments in changelog.d/ + auto-release: + name: Auto Release + needs: [lint, test, build] + # Note: always() ensures consistent behavior with other jobs that depend on jobs using always(). + if: | + always() && !cancelled() && + github.event_name == 'push' && + github.ref == 'refs/heads/main' && + needs.build.result == 'success' + runs-on: ubuntu-latest + timeout-minutes: 30 + env: + DOCKERHUB_USERNAME: ${{ vars.DOCKERHUB_USERNAME || secrets.DOCKERHUB_USERNAME }} + DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} + permissions: + contents: write + steps: + - uses: actions/checkout@v6 + with: + fetch-depth: 0 + token: ${{ secrets.GITHUB_TOKEN }} + + - name: Setup Rust + uses: dtolnay/rust-toolchain@stable + + - name: Install rust-script + run: cargo install rust-script + + - name: Configure git + run: rust-script scripts/git-config.rs + + - name: Determine bump type from changelog fragments + id: bump_type + run: rust-script scripts/get-bump-type.rs + + - name: Check if version already released or no fragments + id: check + env: + HAS_FRAGMENTS: ${{ steps.bump_type.outputs.has_fragments }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: rust-script scripts/check-release-needed.rs + + - name: Collect changelog and bump version + id: version + if: steps.check.outputs.should_release == 'true' && steps.check.outputs.skip_bump != 'true' + run: | + rust-script scripts/version-and-commit.rs \ + --bump-type "${{ steps.bump_type.outputs.bump_type }}" + + - name: Get current version + id: current_version + if: steps.check.outputs.should_release == 'true' + run: rust-script scripts/get-version.rs + + - name: Build release + if: steps.check.outputs.should_release == 'true' + run: cargo build --release + + - name: Publish to Crates.io + if: steps.check.outputs.should_release == 'true' && steps.check.outputs.crate_published != 'true' + id: publish-crate + env: + CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN || secrets.CARGO_TOKEN }} + CARGO_TOKEN: ${{ secrets.CARGO_TOKEN }} + run: rust-script scripts/publish-crate.rs + + - name: Wait for Crate availability on Crates.io + if: steps.check.outputs.should_release == 'true' + run: rust-script scripts/wait-for-crate.rs --release-version "${{ steps.current_version.outputs.version }}" + + - name: Configure Docker Hub publishing + if: steps.check.outputs.should_release == 'true' + id: dockerhub + run: | + disable_dockerhub() { + echo "enabled=false" >> "$GITHUB_OUTPUT" + echo "$1" + } + + if [ -z "$DOCKERHUB_IMAGE" ]; then + disable_dockerhub "Docker Hub publishing disabled: DOCKERHUB_IMAGE repository variable is not set" + exit 0 + fi + + if [ ! -f Dockerfile ]; then + disable_dockerhub "Docker Hub publishing disabled: Dockerfile was not found at repository root" + exit 0 + fi + + if [ -z "$DOCKERHUB_USERNAME" ] || [ -z "$DOCKERHUB_TOKEN" ]; then + echo "::error::Docker Hub publishing requires DOCKERHUB_USERNAME and DOCKERHUB_TOKEN" + echo "Set DOCKERHUB_USERNAME as a repository variable or secret, and DOCKERHUB_TOKEN as a secret." + exit 1 + fi + + echo "enabled=true" >> "$GITHUB_OUTPUT" + echo "docker_hub_url=https://hub.docker.com/r/${DOCKERHUB_IMAGE}" >> "$GITHUB_OUTPUT" + + - name: Log in to Docker Hub + if: steps.dockerhub.outputs.enabled == 'true' + uses: docker/login-action@v4 + with: + username: ${{ env.DOCKERHUB_USERNAME }} + password: ${{ env.DOCKERHUB_TOKEN }} + + - name: Set up Docker Buildx + if: steps.dockerhub.outputs.enabled == 'true' + uses: docker/setup-buildx-action@v4 + + - name: Extract Docker metadata + if: steps.dockerhub.outputs.enabled == 'true' + id: docker-meta + uses: docker/metadata-action@v6 + with: + images: ${{ env.DOCKERHUB_IMAGE }} + tags: | + type=raw,value=latest + type=raw,value=${{ steps.current_version.outputs.version }} + labels: | + org.opencontainers.image.version=${{ steps.current_version.outputs.version }} + + - name: Publish Docker image to Docker Hub + if: steps.dockerhub.outputs.enabled == 'true' + uses: docker/build-push-action@v7 + with: + context: . + push: true + tags: ${{ steps.docker-meta.outputs.tags }} + labels: ${{ steps.docker-meta.outputs.labels }} + + - name: Create GitHub Release + if: steps.check.outputs.should_release == 'true' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + DOCKER_HUB_URL: ${{ steps.dockerhub.outputs.docker_hub_url }} + run: | + # Use new_version from version-and-commit when available (tag-checked), else fall back to Cargo.toml version + RELEASE_VERSION="${{ steps.version.outputs.new_version }}" + if [ -z "$RELEASE_VERSION" ]; then + RELEASE_VERSION="${{ steps.current_version.outputs.version }}" + fi + + release_args=( + --release-version "$RELEASE_VERSION" + --repository "${{ github.repository }}" + ) + if [ -n "$DOCKER_HUB_URL" ]; then + release_args+=(--docker-hub-url "$DOCKER_HUB_URL") + fi + rust-script scripts/create-github-release.rs "${release_args[@]}" + + # === MANUAL INSTANT RELEASE === + # Manual release via workflow_dispatch - only after CI passes + manual-release: + name: Instant Release + needs: [lint, test, build] + # Note: always() is required to evaluate the condition when dependencies use always(). + # The build job ensures lint and test passed before this job runs. + if: | + always() && !cancelled() && + github.event_name == 'workflow_dispatch' && + github.event.inputs.release_mode == 'instant' && + needs.build.result == 'success' + runs-on: ubuntu-latest + timeout-minutes: 30 + env: + DOCKERHUB_USERNAME: ${{ vars.DOCKERHUB_USERNAME || secrets.DOCKERHUB_USERNAME }} + DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} + permissions: + contents: write + steps: + - uses: actions/checkout@v6 + with: + fetch-depth: 0 + token: ${{ secrets.GITHUB_TOKEN }} + + - name: Setup Rust + uses: dtolnay/rust-toolchain@stable + + - name: Install rust-script + run: cargo install rust-script + + - name: Configure git + run: rust-script scripts/git-config.rs + + - name: Collect changelog fragments + run: rust-script scripts/collect-changelog.rs + + - name: Version and commit + id: version + env: + BUMP_TYPE: ${{ github.event.inputs.bump_type }} + DESCRIPTION: ${{ github.event.inputs.description }} + run: rust-script scripts/version-and-commit.rs --bump-type "${{ github.event.inputs.bump_type }}" --description "${{ github.event.inputs.description }}" + + - name: Build release + if: steps.version.outputs.version_committed == 'true' || steps.version.outputs.already_released == 'true' + run: cargo build --release + + - name: Publish to Crates.io + if: steps.version.outputs.version_committed == 'true' || steps.version.outputs.already_released == 'true' + id: publish-crate + env: + CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN || secrets.CARGO_TOKEN }} + CARGO_TOKEN: ${{ secrets.CARGO_TOKEN }} + run: rust-script scripts/publish-crate.rs + + - name: Wait for Crate availability on Crates.io + if: steps.version.outputs.version_committed == 'true' || steps.version.outputs.already_released == 'true' + run: rust-script scripts/wait-for-crate.rs --release-version "${{ steps.version.outputs.new_version }}" + + - name: Configure Docker Hub publishing + if: steps.version.outputs.version_committed == 'true' || steps.version.outputs.already_released == 'true' + id: dockerhub + run: | + disable_dockerhub() { + echo "enabled=false" >> "$GITHUB_OUTPUT" + echo "$1" + } + + if [ -z "$DOCKERHUB_IMAGE" ]; then + disable_dockerhub "Docker Hub publishing disabled: DOCKERHUB_IMAGE repository variable is not set" + exit 0 + fi + + if [ ! -f Dockerfile ]; then + disable_dockerhub "Docker Hub publishing disabled: Dockerfile was not found at repository root" + exit 0 + fi + + if [ -z "$DOCKERHUB_USERNAME" ] || [ -z "$DOCKERHUB_TOKEN" ]; then + echo "::error::Docker Hub publishing requires DOCKERHUB_USERNAME and DOCKERHUB_TOKEN" + echo "Set DOCKERHUB_USERNAME as a repository variable or secret, and DOCKERHUB_TOKEN as a secret." + exit 1 + fi + + echo "enabled=true" >> "$GITHUB_OUTPUT" + echo "docker_hub_url=https://hub.docker.com/r/${DOCKERHUB_IMAGE}" >> "$GITHUB_OUTPUT" + + - name: Log in to Docker Hub + if: steps.dockerhub.outputs.enabled == 'true' + uses: docker/login-action@v4 + with: + username: ${{ env.DOCKERHUB_USERNAME }} + password: ${{ env.DOCKERHUB_TOKEN }} + + - name: Set up Docker Buildx + if: steps.dockerhub.outputs.enabled == 'true' + uses: docker/setup-buildx-action@v4 + + - name: Extract Docker metadata + if: steps.dockerhub.outputs.enabled == 'true' + id: docker-meta + uses: docker/metadata-action@v6 + with: + images: ${{ env.DOCKERHUB_IMAGE }} + tags: | + type=raw,value=latest + type=raw,value=${{ steps.version.outputs.new_version }} + labels: | + org.opencontainers.image.version=${{ steps.version.outputs.new_version }} + + - name: Publish Docker image to Docker Hub + if: steps.dockerhub.outputs.enabled == 'true' + uses: docker/build-push-action@v7 + with: + context: . + push: true + tags: ${{ steps.docker-meta.outputs.tags }} + labels: ${{ steps.docker-meta.outputs.labels }} + + - name: Create GitHub Release + if: steps.version.outputs.version_committed == 'true' || steps.version.outputs.already_released == 'true' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + DOCKER_HUB_URL: ${{ steps.dockerhub.outputs.docker_hub_url }} + run: | + release_args=( + --release-version "${{ steps.version.outputs.new_version }}" + --repository "${{ github.repository }}" + ) + if [ -n "$DOCKER_HUB_URL" ]; then + release_args+=(--docker-hub-url "$DOCKER_HUB_URL") + fi + rust-script scripts/create-github-release.rs "${release_args[@]}" + + # === MANUAL CHANGELOG PR === + changelog-pr: + name: Create Changelog PR + if: github.event_name == 'workflow_dispatch' && github.event.inputs.release_mode == 'changelog-pr' + runs-on: ubuntu-latest + timeout-minutes: 10 + permissions: + contents: write + pull-requests: write + steps: + - uses: actions/checkout@v6 + with: + fetch-depth: 0 + + - name: Setup Rust + uses: dtolnay/rust-toolchain@stable + + - name: Install rust-script + run: cargo install rust-script + + - name: Create changelog fragment + env: + BUMP_TYPE: ${{ github.event.inputs.bump_type }} + DESCRIPTION: ${{ github.event.inputs.description }} + run: rust-script scripts/create-changelog-fragment.rs --bump-type "${{ github.event.inputs.bump_type }}" --description "${{ github.event.inputs.description }}" + + - name: Create Pull Request + uses: peter-evans/create-pull-request@v8 + with: + token: ${{ secrets.GITHUB_TOKEN }} + commit-message: 'chore: add changelog for manual ${{ github.event.inputs.bump_type }} release' + branch: changelog-manual-release-${{ github.run_id }} + delete-branch: true + title: 'chore: manual ${{ github.event.inputs.bump_type }} release' + body: | + ## Manual Release Request + + This PR was created by a manual workflow trigger to prepare a **${{ github.event.inputs.bump_type }}** release. + + ### Release Details + - **Type:** ${{ github.event.inputs.bump_type }} + - **Description:** ${{ github.event.inputs.description || 'Manual release' }} + - **Triggered by:** @${{ github.actor }} + + ### Next Steps + 1. Review the changelog fragment in this PR + 2. Merge this PR to main + 3. The automated release workflow will publish to crates.io and create a GitHub release + + # === DEPLOY DOCUMENTATION === + # Deploy Rust API documentation to GitHub Pages after a successful package build. + # Keep this independent from package/GitHub release publication so the website + # still updates when the release path fails. Use the official Pages artifact + # deployment path so repositories configured with "GitHub Actions" as their + # Pages source fail this job if Pages cannot deploy. + deploy-docs: + name: Deploy Rust Documentation + needs: [build] + if: | + !cancelled() && + needs.build.result == 'success' && ( + (github.event_name == 'push' && github.ref == 'refs/heads/main') || + (github.event_name == 'workflow_dispatch' && github.event.inputs.release_mode == 'instant') + ) + runs-on: ubuntu-latest + timeout-minutes: 15 + permissions: + contents: read + pages: write + id-token: write + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + steps: + - uses: actions/checkout@v6 + with: + ref: main + + - name: Setup Rust + uses: dtolnay/rust-toolchain@stable + + - name: Build documentation + run: cargo doc --no-deps --all-features + + - name: Configure GitHub Pages + uses: actions/configure-pages@v6 + + - name: Upload GitHub Pages artifact + uses: actions/upload-pages-artifact@v5 + with: + path: target/doc + + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v5 diff --git a/docs/case-studies/issue-86/templates/rust-ai-driven-development-pipeline-template/tree.json b/docs/case-studies/issue-86/templates/rust-ai-driven-development-pipeline-template/tree.json new file mode 100644 index 0000000..7c08182 --- /dev/null +++ b/docs/case-studies/issue-86/templates/rust-ai-driven-development-pipeline-template/tree.json @@ -0,0 +1 @@ +{"sha":"401cdd7af90d04435917fb9bd529410bb1670f9a","url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/trees/401cdd7af90d04435917fb9bd529410bb1670f9a","tree":[{"path":".github","mode":"040000","type":"tree","sha":"8a0bf060a799d7193245d2b89d0c18c6b043f469","url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/trees/8a0bf060a799d7193245d2b89d0c18c6b043f469"},{"path":".github/workflows","mode":"040000","type":"tree","sha":"259ba71ad1955a1b8dc395a15b1b2cb22459522a","url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/trees/259ba71ad1955a1b8dc395a15b1b2cb22459522a"},{"path":".github/workflows/release.yml","mode":"100644","type":"blob","sha":"885eb018d8a46298a78ea6dfa42103f7591f6505","size":23449,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/885eb018d8a46298a78ea6dfa42103f7591f6505"},{"path":".gitignore","mode":"100644","type":"blob","sha":"286351608df6c3dd74111b33af1549f9369b612b","size":859,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/286351608df6c3dd74111b33af1549f9369b612b"},{"path":".pre-commit-config.yaml","mode":"100644","type":"blob","sha":"ce4da867928025dcef4769c2d9f480a58c4e5aed","size":836,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/ce4da867928025dcef4769c2d9f480a58c4e5aed"},{"path":"CHANGELOG.md","mode":"100644","type":"blob","sha":"6e9a9ecf8980447d483370f8a9d16db94307440e","size":96926,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/6e9a9ecf8980447d483370f8a9d16db94307440e"},{"path":"CONTRIBUTING.md","mode":"100644","type":"blob","sha":"96300ba39e8a34e4c552db612a65ca7318f1c21d","size":7550,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/96300ba39e8a34e4c552db612a65ca7318f1c21d"},{"path":"Cargo.lock","mode":"100644","type":"blob","sha":"9fb1af04519464ce6026abf43d8f8f05adeed75e","size":9549,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/9fb1af04519464ce6026abf43d8f8f05adeed75e"},{"path":"Cargo.toml","mode":"100644","type":"blob","sha":"3e14df246143ef14e4d523540f726b84b82c7851","size":1257,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/3e14df246143ef14e4d523540f726b84b82c7851"},{"path":"LICENSE","mode":"100644","type":"blob","sha":"fdddb29aa445bf3d6a5d843d6dd77e10a9f99657","size":1211,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/fdddb29aa445bf3d6a5d843d6dd77e10a9f99657"},{"path":"README.md","mode":"100644","type":"blob","sha":"4f0ef71f231d61991714b0521288c1af639cb749","size":13585,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/4f0ef71f231d61991714b0521288c1af639cb749"},{"path":"changelog.d","mode":"040000","type":"tree","sha":"c523fbb7a086569384b3d2ab63e912f2dc381341","url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/trees/c523fbb7a086569384b3d2ab63e912f2dc381341"},{"path":"changelog.d/20251227_224645_changeset_support.md","mode":"100644","type":"blob","sha":"c25cd3f50e15bb8ccffb861550ceb75b1aecd9a6","size":608,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/c25cd3f50e15bb8ccffb861550ceb75b1aecd9a6"},{"path":"changelog.d/20251229_143823_fix_ci_workflow_dependencies.md","mode":"100644","type":"blob","sha":"2667f49968a660dfc73552f6319c77d511baf3bc","size":432,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/2667f49968a660dfc73552f6319c77d511baf3bc"},{"path":"changelog.d/20251231_115800_fix_readme_script_references.md","mode":"100644","type":"blob","sha":"7337c49f3c155911b752dbe40db4fc74170abf08","size":286,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/7337c49f3c155911b752dbe40db4fc74170abf08"},{"path":"changelog.d/20260107_apply_best_practices.md","mode":"100644","type":"blob","sha":"a2d856358c41413e7d3ca32ea13d27f5e1ea7438","size":830,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/a2d856358c41413e7d3ca32ea13d27f5e1ea7438"},{"path":"changelog.d/20260108_171124_fix_changelog_check.md","mode":"100644","type":"blob","sha":"56d16879e9d14ab21b824e2f0c646f266825fe9d","size":857,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/56d16879e9d14ab21b824e2f0c646f266825fe9d"},{"path":"changelog.d/20260108_171435_prevent_manual_version_modification.md","mode":"100644","type":"blob","sha":"132467f8dc02a84fe9d9be0a7b12652289fbf071","size":455,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/132467f8dc02a84fe9d9be0a7b12652289fbf071"},{"path":"changelog.d/20260108_apply_lino_objects_codec_fixes.md","mode":"100644","type":"blob","sha":"c1ac23bbe4a3e28afe5e89db84be08af527bd13c","size":497,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/c1ac23bbe4a3e28afe5e89db84be08af527bd13c"},{"path":"changelog.d/20260111_multi_language_support.md","mode":"100644","type":"blob","sha":"6c8f81dd63d80f9ec9056cd32c06a14b1062e8ca","size":694,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/6c8f81dd63d80f9ec9056cd32c06a14b1062e8ca"},{"path":"changelog.d/20260119_best_practices_from_browser_commander.md","mode":"100644","type":"blob","sha":"b4bca1d666f008de6afd345ef7df20cbdc2ec3ee","size":1137,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/b4bca1d666f008de6afd345ef7df20cbdc2ec3ee"},{"path":"changelog.d/20260311_translate_scripts_to_rust.md","mode":"100644","type":"blob","sha":"4df7c4ac4b9ef39ed6033827004c0a0948dd6a15","size":383,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/4df7c4ac4b9ef39ed6033827004c0a0948dd6a15"},{"path":"changelog.d/20260413-ci-cd-best-practices.md","mode":"100644","type":"blob","sha":"65a108f11bbd760b185cf033355ac67b3e081cd0","size":1052,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/65a108f11bbd760b185cf033355ac67b3e081cd0"},{"path":"changelog.d/20260413_fix_cargo_token_fallback.md","mode":"100644","type":"blob","sha":"87ca39c76b53118ab39b7bc8ae87af7721320cc1","size":474,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/87ca39c76b53118ab39b7bc8ae87af7721320cc1"},{"path":"changelog.d/20260413_fix_crates_io_check.md","mode":"100644","type":"blob","sha":"9fd4fefc6a834598cb90b013e7c040c6287d00d6","size":658,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/9fd4fefc6a834598cb90b013e7c040c6287d00d6"},{"path":"changelog.d/20260413_fix_lookahead_regex.md","mode":"100644","type":"blob","sha":"f5011def0a986e6ca16675c9b91b2561f4a432dc","size":742,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/f5011def0a986e6ca16675c9b91b2561f4a432dc"},{"path":"changelog.d/20260414_fix_per_commit_diff.md","mode":"100644","type":"blob","sha":"c1a11c1eb2f728a01adf96bf5031d54c34c4b0f0","size":231,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/c1a11c1eb2f728a01adf96bf5031d54c34c4b0f0"},{"path":"changelog.d/20260415_fix_workspace_release_scripts.md","mode":"100644","type":"blob","sha":"5db05492683268ff46133e5dff7d8c0dd9da8934","size":130,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/5db05492683268ff46133e5dff7d8c0dd9da8934"},{"path":"changelog.d/20260501_decouple_docs_deploy.md","mode":"100644","type":"blob","sha":"6b7692807e0b5b3496032c4af65df4aeb9018965","size":186,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/6b7692807e0b5b3496032c4af65df4aeb9018965"},{"path":"changelog.d/20260503_111500_ci_timeouts.md","mode":"100644","type":"blob","sha":"05d08498122f62fb5e0234e4311d31be516b348e","size":121,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/05d08498122f62fb5e0234e4311d31be516b348e"},{"path":"changelog.d/20260503_111700_file_size_warning_threshold.md","mode":"100644","type":"blob","sha":"cc99b1930009100ed8996c77cba21ad80989265d","size":167,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/cc99b1930009100ed8996c77cba21ad80989265d"},{"path":"changelog.d/20260509_031015_human_readable_release_titles.md","mode":"100644","type":"blob","sha":"4615bd63260247f53f1700e8b1e80f98ede2503a","size":129,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/4615bd63260247f53f1700e8b1e80f98ede2503a"},{"path":"changelog.d/20260509_205000_docker_hub_release_publishing.md","mode":"100644","type":"blob","sha":"193993ed946a3c7ca42018a72a0c873ba0fe672a","size":365,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/193993ed946a3c7ca42018a72a0c873ba0fe672a"},{"path":"changelog.d/20260512_172908_github_pages_artifact_deploy.md","mode":"100644","type":"blob","sha":"6ba258c49c111f57371a7ae7b3779f898bcafcd8","size":220,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/6ba258c49c111f57371a7ae7b3779f898bcafcd8"},{"path":"changelog.d/README.md","mode":"100644","type":"blob","sha":"b3437e321d87768eb8a7ab42943d5d1ca4968f74","size":3235,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/b3437e321d87768eb8a7ab42943d5d1ca4968f74"},{"path":"docs","mode":"040000","type":"tree","sha":"b333a51690091849578cc7a8d0cdcfba9e80ed86","url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/trees/b333a51690091849578cc7a8d0cdcfba9e80ed86"},{"path":"docs/case-studies","mode":"040000","type":"tree","sha":"2c971ff0192e2d133dc41fbc86d90d641d623e76","url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/trees/2c971ff0192e2d133dc41fbc86d90d641d623e76"},{"path":"docs/case-studies/issue-11","mode":"040000","type":"tree","sha":"6fbae06a4dae4e1a83540b01d75db18f4210ccd6","url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/trees/6fbae06a4dae4e1a83540b01d75db18f4210ccd6"},{"path":"docs/case-studies/issue-11/README.md","mode":"100644","type":"blob","sha":"b5ab5bbb85503311eb336181e7d9fd4505453cf3","size":8907,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/b5ab5bbb85503311eb336181e7d9fd4505453cf3"},{"path":"docs/case-studies/issue-11/analysis-crates-io.md","mode":"100644","type":"blob","sha":"024cd600ef1d15e43abb9a5384223246772fc246","size":6801,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/024cd600ef1d15e43abb9a5384223246772fc246"},{"path":"docs/case-studies/issue-11/analysis-set-output.md","mode":"100644","type":"blob","sha":"a9efdcb8e3e978e1578a7ee9d451a09d1885c4be","size":4331,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/a9efdcb8e3e978e1578a7ee9d451a09d1885c4be"},{"path":"docs/case-studies/issue-11/analysis-workflow-dispatch.md","mode":"100644","type":"blob","sha":"9ebd84b350473d7ac0f608f012b452a539d2c952","size":5375,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/9ebd84b350473d7ac0f608f012b452a539d2c952"},{"path":"docs/case-studies/issue-11/online-research.md","mode":"100644","type":"blob","sha":"e3e9e559634729b2aec17c11ee39d036a40bd922","size":6372,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/e3e9e559634729b2aec17c11ee39d036a40bd922"},{"path":"docs/case-studies/issue-17","mode":"040000","type":"tree","sha":"aad724267a03679e8ffacb3124419ecfdfae33d8","url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/trees/aad724267a03679e8ffacb3124419ecfdfae33d8"},{"path":"docs/case-studies/issue-17/README.md","mode":"100644","type":"blob","sha":"15efc07ca23a9f151c3c5477e773905f39418f9b","size":5870,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/15efc07ca23a9f151c3c5477e773905f39418f9b"},{"path":"docs/case-studies/issue-19","mode":"040000","type":"tree","sha":"cdca87eb853443d107b4b3e041e3b50e1a45b801","url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/trees/cdca87eb853443d107b4b3e041e3b50e1a45b801"},{"path":"docs/case-studies/issue-19/README.md","mode":"100644","type":"blob","sha":"7374ddd74cdcfcd00f5bce7c268587719d4e71fa","size":10930,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/7374ddd74cdcfcd00f5bce7c268587719d4e71fa"},{"path":"docs/case-studies/issue-19/ci-logs","mode":"040000","type":"tree","sha":"d4cc5eba4781540b4c41fcfc16be2e57ab4b79a1","url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/trees/d4cc5eba4781540b4c41fcfc16be2e57ab4b79a1"},{"path":"docs/case-studies/issue-19/ci-logs/ci-run-20885464993.log.gz","mode":"100644","type":"blob","sha":"6c166e69fa2be24b1a29196e5c9da17454e9db42","size":20042,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/6c166e69fa2be24b1a29196e5c9da17454e9db42"},{"path":"docs/case-studies/issue-19/pr-114-data","mode":"040000","type":"tree","sha":"2835b1d1894bb45742f72148aab6af268cdea777","url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/trees/2835b1d1894bb45742f72148aab6af268cdea777"},{"path":"docs/case-studies/issue-19/pr-114-data/issue-113-details.txt","mode":"100644","type":"blob","sha":"157d5bd29fcd9f80e4b97c98308f90fbf9c0b4a3","size":708,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/157d5bd29fcd9f80e4b97c98308f90fbf9c0b4a3"},{"path":"docs/case-studies/issue-19/pr-114-data/pr-commits.json","mode":"100644","type":"blob","sha":"a2801784966fabf146d0b96d743a9c60592e8710","size":3550,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/a2801784966fabf146d0b96d743a9c60592e8710"},{"path":"docs/case-studies/issue-19/pr-114-data/pr-conversation-comments.json","mode":"100644","type":"blob","sha":"cf016694029137ad3d281e33f8fb6177dd390aa5","size":8310,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/cf016694029137ad3d281e33f8fb6177dd390aa5"},{"path":"docs/case-studies/issue-19/pr-114-data/pr-details.json","mode":"100644","type":"blob","sha":"b25c430f066566fc3112b56c509e7ef70cc5453c","size":6727,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/b25c430f066566fc3112b56c509e7ef70cc5453c"},{"path":"docs/case-studies/issue-19/pr-114-data/pr-diff.patch","mode":"100644","type":"blob","sha":"33f28bdfa6ba98300f0a4ffb3335c6a36862b298","size":31790,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/33f28bdfa6ba98300f0a4ffb3335c6a36862b298"},{"path":"docs/case-studies/issue-19/pr-114-data/pr-review-comments.json","mode":"100644","type":"blob","sha":"0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc","size":2,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc"},{"path":"docs/case-studies/issue-19/pr-114-data/pr-reviews.json","mode":"100644","type":"blob","sha":"0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc","size":2,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc"},{"path":"docs/case-studies/issue-19/pr-114-data/solution-draft-log-1.txt.gz","mode":"100644","type":"blob","sha":"a7a5d631c9dfb75cd776a457ffbd97593c9c58c2","size":89348,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/a7a5d631c9dfb75cd776a457ffbd97593c9c58c2"},{"path":"docs/case-studies/issue-19/pr-114-data/solution-draft-log-2.txt.gz","mode":"100644","type":"blob","sha":"49262ff5ad0490f1c8f67dd2c885d69975b5950d","size":69878,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/49262ff5ad0490f1c8f67dd2c885d69975b5950d"},{"path":"docs/case-studies/issue-21","mode":"040000","type":"tree","sha":"a4a636dae23000abc6232931f8018199a2d08e66","url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/trees/a4a636dae23000abc6232931f8018199a2d08e66"},{"path":"docs/case-studies/issue-21/README.md","mode":"100644","type":"blob","sha":"c40aa5d96686a9b49d20963fc6c66e79c2fc4840","size":9651,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/c40aa5d96686a9b49d20963fc6c66e79c2fc4840"},{"path":"docs/case-studies/issue-21/browser-commander-issue-27.md","mode":"100644","type":"blob","sha":"29c1e3ab6250027c30c4e443002a563d0bf5fc44","size":3766,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/29c1e3ab6250027c30c4e443002a563d0bf5fc44"},{"path":"docs/case-studies/issue-21/browser-commander-issue-29.md","mode":"100644","type":"blob","sha":"6fcae8cdc9a23a5ecb263a0c1330d199d72e473f","size":5448,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/6fcae8cdc9a23a5ecb263a0c1330d199d72e473f"},{"path":"docs/case-studies/issue-21/browser-commander-issue-31.md","mode":"100644","type":"blob","sha":"829c1441ef8e4e962013f409653d6a0b33995722","size":4224,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/829c1441ef8e4e962013f409653d6a0b33995722"},{"path":"docs/case-studies/issue-21/browser-commander-issue-33.md","mode":"100644","type":"blob","sha":"a3ec042b03e2fe3b90eae029fe03546327e531d8","size":6909,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/a3ec042b03e2fe3b90eae029fe03546327e531d8"},{"path":"docs/case-studies/issue-21/browser-commander-rust.yml","mode":"100644","type":"blob","sha":"57661e0231d725a7564578ef3b61ab7fe9349e5f","size":14865,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/57661e0231d725a7564578ef3b61ab7fe9349e5f"},{"path":"docs/case-studies/issue-25","mode":"040000","type":"tree","sha":"a048ad4bfec83550f05dfd3d6eecf8fa95a61cd6","url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/trees/a048ad4bfec83550f05dfd3d6eecf8fa95a61cd6"},{"path":"docs/case-studies/issue-25/README.md","mode":"100644","type":"blob","sha":"09a520e6418009da786c05210280f51a6853071b","size":4724,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/09a520e6418009da786c05210280f51a6853071b"},{"path":"docs/case-studies/issue-29","mode":"040000","type":"tree","sha":"f40a9f5cd044a5133c0501ee85549b3628848c88","url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/trees/f40a9f5cd044a5133c0501ee85549b3628848c88"},{"path":"docs/case-studies/issue-29/README.md","mode":"100644","type":"blob","sha":"b09746912b1bbb1433cdff345bbadd82bf63f167","size":6614,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/b09746912b1bbb1433cdff345bbadd82bf63f167"},{"path":"docs/case-studies/issue-32","mode":"040000","type":"tree","sha":"ca29ebcfb86c3a59593abacccb3bca3213bda227","url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/trees/ca29ebcfb86c3a59593abacccb3bca3213bda227"},{"path":"docs/case-studies/issue-32/README.md","mode":"100644","type":"blob","sha":"7f145043605f4b031223e86a26a046e18beea366","size":5520,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/7f145043605f4b031223e86a26a046e18beea366"},{"path":"docs/case-studies/issue-34","mode":"040000","type":"tree","sha":"62e2e40ac4349d6d52e5f409f1064de687f5883a","url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/trees/62e2e40ac4349d6d52e5f409f1064de687f5883a"},{"path":"docs/case-studies/issue-34/README.md","mode":"100644","type":"blob","sha":"19033efc28b660cd278a1ecd25604df6aaa2d2f5","size":7573,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/19033efc28b660cd278a1ecd25604df6aaa2d2f5"},{"path":"docs/case-studies/issue-38","mode":"040000","type":"tree","sha":"b988b5cb25351472ffb22f1ab9d1a6aea6b73955","url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/trees/b988b5cb25351472ffb22f1ab9d1a6aea6b73955"},{"path":"docs/case-studies/issue-38/README.md","mode":"100644","type":"blob","sha":"ee4cb2ac55722cd2ef6d26617acee67ae9666d1f","size":10260,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/ee4cb2ac55722cd2ef6d26617acee67ae9666d1f"},{"path":"docs/case-studies/issue-38/raw-data","mode":"040000","type":"tree","sha":"4db9a94e6fd1842b33dc2978bd3e50c2d4cc86dc","url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/trees/4db9a94e6fd1842b33dc2978bd3e50c2d4cc86dc"},{"path":"docs/case-studies/issue-38/raw-data/downstream-meta-after-run-24985948212.json","mode":"100644","type":"blob","sha":"209d9e25eafe1983b3bc8f5ca8918432620cc272","size":19101,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/209d9e25eafe1983b3bc8f5ca8918432620cc272"},{"path":"docs/case-studies/issue-38/raw-data/downstream-meta-after-run-24985948212.log.gz","mode":"100644","type":"blob","sha":"9ad8a22a9994fb8514f1e8d8497cd8f8af424590","size":106114,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/9ad8a22a9994fb8514f1e8d8497cd8f8af424590"},{"path":"docs/case-studies/issue-38/raw-data/downstream-meta-before-run-24983875003.json","mode":"100644","type":"blob","sha":"4d96d47cb6829ca820991adb8d340ad4c2327a23","size":18003,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/4d96d47cb6829ca820991adb8d340ad4c2327a23"},{"path":"docs/case-studies/issue-38/raw-data/downstream-meta-before-run-24983875003.log.gz","mode":"100644","type":"blob","sha":"b97a011f2c745cde8826e0c3b61b9e6305ae07c1","size":116384,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/b97a011f2c745cde8826e0c3b61b9e6305ae07c1"},{"path":"docs/case-studies/issue-38/raw-data/downstream-meta-ontology-issue-3.json","mode":"100644","type":"blob","sha":"17d78f5f4eacf2afd581ea564ee81ceb8940a40e","size":2010,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/17d78f5f4eacf2afd581ea564ee81ceb8940a40e"},{"path":"docs/case-studies/issue-38/raw-data/downstream-meta-ontology-pr-4.json","mode":"100644","type":"blob","sha":"281cc7e954c717275cb7cf99933e4978687385bc","size":5352,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/281cc7e954c717275cb7cf99933e4978687385bc"},{"path":"docs/case-studies/issue-38/raw-data/issue-38-comments.json","mode":"100644","type":"blob","sha":"48ae41eb529138051a32376a5b8f1c5cec68f818","size":3487,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/48ae41eb529138051a32376a5b8f1c5cec68f818"},{"path":"docs/case-studies/issue-38/raw-data/issue-38.json","mode":"100644","type":"blob","sha":"1e0884882204e6aced0020e6c4dd08af5f9ec18f","size":4414,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/1e0884882204e6aced0020e6c4dd08af5f9ec18f"},{"path":"docs/case-studies/issue-38/raw-data/js-template-issue-search.json","mode":"100644","type":"blob","sha":"fe51488c7066f6687ef680d6bfaa4f7768ef205c","size":3,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/fe51488c7066f6687ef680d6bfaa4f7768ef205c"},{"path":"docs/case-studies/issue-38/raw-data/main-run-24465255225.json","mode":"100644","type":"blob","sha":"09127279e57ef8d57f08ff24a2ffcaaacbbf025a","size":16733,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/09127279e57ef8d57f08ff24a2ffcaaacbbf025a"},{"path":"docs/case-studies/issue-38/raw-data/main-run-24465255225.log.gz","mode":"100644","type":"blob","sha":"5abf2592c57f21a5fb30eb2ba1372653fca772e2","size":89367,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/5abf2592c57f21a5fb30eb2ba1372653fca772e2"},{"path":"docs/case-studies/issue-38/raw-data/main-runs.json","mode":"100644","type":"blob","sha":"0a153a2d3b42eb63d4638794e65b899678c48dab","size":3872,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/0a153a2d3b42eb63d4638794e65b899678c48dab"},{"path":"docs/case-studies/issue-38/raw-data/pr-39-conversation-comments.json","mode":"100644","type":"blob","sha":"0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc","size":2,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc"},{"path":"docs/case-studies/issue-38/raw-data/pr-39-review-comments.json","mode":"100644","type":"blob","sha":"0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc","size":2,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc"},{"path":"docs/case-studies/issue-38/raw-data/pr-39-reviews.json","mode":"100644","type":"blob","sha":"0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc","size":2,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc"},{"path":"docs/case-studies/issue-38/raw-data/pr-39.json","mode":"100644","type":"blob","sha":"2e9908e82f9a3b57e5de45d406ba1e66281bcc8b","size":964,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/2e9908e82f9a3b57e5de45d406ba1e66281bcc8b"},{"path":"docs/case-studies/issue-38/raw-data/pr-branch-runs.json","mode":"100644","type":"blob","sha":"32383fec8592fcf2ebf671a9e88314940ceeecfd","size":396,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/32383fec8592fcf2ebf671a9e88314940ceeecfd"},{"path":"docs/case-studies/issue-38/raw-data/pr-run-25212295127.json","mode":"100644","type":"blob","sha":"69f226d68dba2e467b7d15528f4286a470fd54b5","size":10861,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/69f226d68dba2e467b7d15528f4286a470fd54b5"},{"path":"docs/case-studies/issue-38/raw-data/pr-run-25212295127.log.gz","mode":"100644","type":"blob","sha":"b83c2f71a145fe6e4e95c2d5fec992b1d9ccaf87","size":72323,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/b83c2f71a145fe6e4e95c2d5fec992b1d9ccaf87"},{"path":"docs/case-studies/issue-38/raw-data/rust-template-issue-search.json","mode":"100644","type":"blob","sha":"cc8a938ca1b825dd757a5acad7871d4d10850ff6","size":276,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/cc8a938ca1b825dd757a5acad7871d4d10850ff6"},{"path":"docs/case-studies/issue-38/template-data","mode":"040000","type":"tree","sha":"c3dcb75593d8409564e663b5f2004731719cdf41","url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/trees/c3dcb75593d8409564e663b5f2004731719cdf41"},{"path":"docs/case-studies/issue-38/template-data/js-template-ci-tree.txt","mode":"100644","type":"blob","sha":"371d093f1b8416613e32a4d059f7e6a2fe65276f","size":1719,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/371d093f1b8416613e32a4d059f7e6a2fe65276f"},{"path":"docs/case-studies/issue-38/template-data/js-template-links.yml","mode":"100644","type":"blob","sha":"3b7271b1a82aaf42c0c99aae87faede8f623c87f","size":3035,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/3b7271b1a82aaf42c0c99aae87faede8f623c87f"},{"path":"docs/case-studies/issue-38/template-data/js-template-release.yml","mode":"100644","type":"blob","sha":"7090eb5402bbe81fdda60c8a16e991cf33b22842","size":19369,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/7090eb5402bbe81fdda60c8a16e991cf33b22842"},{"path":"docs/case-studies/issue-38/template-data/rust-template-ci-tree.txt","mode":"100644","type":"blob","sha":"bcabbb200fab940c8472fce393c20573a2619a3b","size":464,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/bcabbb200fab940c8472fce393c20573a2619a3b"},{"path":"docs/case-studies/issue-38/template-data/rust-template-release-after.yml","mode":"100644","type":"blob","sha":"1bc4e06dd6560721361bd5883d99321c9a23704f","size":16624,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/1bc4e06dd6560721361bd5883d99321c9a23704f"},{"path":"docs/case-studies/issue-38/template-data/rust-template-release-before.yml","mode":"100644","type":"blob","sha":"e8b6fb77030f59ecbb748c3e98c2d1cdeba0e079","size":16372,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/e8b6fb77030f59ecbb748c3e98c2d1cdeba0e079"},{"path":"docs/ci-cd","mode":"040000","type":"tree","sha":"aa8a72b360fca75a1908896477d82c90ce9c155b","url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/trees/aa8a72b360fca75a1908896477d82c90ce9c155b"},{"path":"docs/ci-cd/troubleshooting.md","mode":"100644","type":"blob","sha":"b38e5dd7e629121546c47d7b5628e62cc2c0ebac","size":7994,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/b38e5dd7e629121546c47d7b5628e62cc2c0ebac"},{"path":"examples","mode":"040000","type":"tree","sha":"5bc4b2f0ddedb1ccf752d6824e9c207445827022","url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/trees/5bc4b2f0ddedb1ccf752d6824e9c207445827022"},{"path":"examples/basic_usage.rs","mode":"100644","type":"blob","sha":"be9a37ff13abba31b59376b0400db983a21d6da5","size":183,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/be9a37ff13abba31b59376b0400db983a21d6da5"},{"path":"experiments","mode":"040000","type":"tree","sha":"9d74d9926248fd8f13d7308b1314f80a2e737b5e","url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/trees/9d74d9926248fd8f13d7308b1314f80a2e737b5e"},{"path":"experiments/test-changelog-parsing.rs","mode":"100644","type":"blob","sha":"bf19a4571ee8554eb3faeb7c04f828981b907c30","size":3100,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/bf19a4571ee8554eb3faeb7c04f828981b907c30"},{"path":"experiments/test-crates-io-check.rs","mode":"100644","type":"blob","sha":"0741c6f066b24cf0c23a519ed366a81b7038a002","size":2946,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/0741c6f066b24cf0c23a519ed366a81b7038a002"},{"path":"experiments/test-detect-code-changes.sh","mode":"100644","type":"blob","sha":"b63302f0abaa763b12957b2f5005b6e367a74505","size":3146,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/b63302f0abaa763b12957b2f5005b6e367a74505"},{"path":"experiments/test-version-check-dependencies.sh","mode":"100755","type":"blob","sha":"17b269a3046644d8d2721b6fb569bb918d1bc928","size":812,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/17b269a3046644d8d2721b6fb569bb918d1bc928"},{"path":"experiments/test-version-check.sh","mode":"100755","type":"blob","sha":"57c317d7fe9e8db8cf25ef6b34f7d0c953aa2d70","size":1420,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/57c317d7fe9e8db8cf25ef6b34f7d0c953aa2d70"},{"path":"scripts","mode":"040000","type":"tree","sha":"8157ab91d639e5dedec762f5e90066cd0b553783","url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/trees/8157ab91d639e5dedec762f5e90066cd0b553783"},{"path":"scripts/bump-version.rs","mode":"100644","type":"blob","sha":"fe1daee3e9284555bbf5cf8cc012fc47b2967cec","size":4940,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/fe1daee3e9284555bbf5cf8cc012fc47b2967cec"},{"path":"scripts/check-changelog-fragment.rs","mode":"100644","type":"blob","sha":"70faf74947a515cde4a20f959415bafc3d33472c","size":5230,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/70faf74947a515cde4a20f959415bafc3d33472c"},{"path":"scripts/check-file-size.rs","mode":"100644","type":"blob","sha":"64d3eb13937a19b9d6e9be7b3834ba8353a735b3","size":8066,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/64d3eb13937a19b9d6e9be7b3834ba8353a735b3"},{"path":"scripts/check-release-needed.rs","mode":"100644","type":"blob","sha":"b97c5e432eb1ec41158e3847a77e9ef686b5ac7c","size":13507,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/b97c5e432eb1ec41158e3847a77e9ef686b5ac7c"},{"path":"scripts/check-version-modification.rs","mode":"100644","type":"blob","sha":"09ebb332aba4e42aed1cc40e0132f71abf5a412b","size":4917,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/09ebb332aba4e42aed1cc40e0132f71abf5a412b"},{"path":"scripts/collect-changelog.rs","mode":"100644","type":"blob","sha":"63b7d8c39d58fe2cb31b3333d645603a5850b156","size":7325,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/63b7d8c39d58fe2cb31b3333d645603a5850b156"},{"path":"scripts/create-changelog-fragment.rs","mode":"100644","type":"blob","sha":"08e145b18bcd5b689bebd7b7abdcac62810a6bda","size":3280,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/08e145b18bcd5b689bebd7b7abdcac62810a6bda"},{"path":"scripts/create-github-release.rs","mode":"100644","type":"blob","sha":"2a914a03a45ac52c80c4fa62ee2608d7b101982e","size":12545,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/2a914a03a45ac52c80c4fa62ee2608d7b101982e"},{"path":"scripts/detect-code-changes.rs","mode":"100644","type":"blob","sha":"3a5769e580449a92867f379b87acf50c73651b07","size":7070,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/3a5769e580449a92867f379b87acf50c73651b07"},{"path":"scripts/get-bump-type.rs","mode":"100644","type":"blob","sha":"187e018765c64b91863fa35fb480eb2a50efb760","size":5331,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/187e018765c64b91863fa35fb480eb2a50efb760"},{"path":"scripts/get-version.rs","mode":"100644","type":"blob","sha":"07d2886789b6b59984c7221025e26ea64aa9e53e","size":1964,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/07d2886789b6b59984c7221025e26ea64aa9e53e"},{"path":"scripts/git-config.rs","mode":"100644","type":"blob","sha":"8936793f10940d56a6d78d5bcd70248787b100d5","size":1953,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/8936793f10940d56a6d78d5bcd70248787b100d5"},{"path":"scripts/publish-crate.rs","mode":"100644","type":"blob","sha":"ad46ced8fa5e30c11a603d9d2cdea26aa904dfa5","size":6648,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/ad46ced8fa5e30c11a603d9d2cdea26aa904dfa5"},{"path":"scripts/rust-paths.rs","mode":"100644","type":"blob","sha":"e1a0b9214fe91d563ef4fab3f0e29f61d862164f","size":8380,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/e1a0b9214fe91d563ef4fab3f0e29f61d862164f"},{"path":"scripts/version-and-commit.rs","mode":"100644","type":"blob","sha":"0a242424e9822cc939192dd29c7761b4edfae1e9","size":18597,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/0a242424e9822cc939192dd29c7761b4edfae1e9"},{"path":"scripts/wait-for-crate.rs","mode":"100644","type":"blob","sha":"ee80cca922e74045f658742323984fd2aa836365","size":5287,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/ee80cca922e74045f658742323984fd2aa836365"},{"path":"src","mode":"040000","type":"tree","sha":"37cae03414d82f09d33a05aaf7374bc022ae29e0","url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/trees/37cae03414d82f09d33a05aaf7374bc022ae29e0"},{"path":"src/lib.rs","mode":"100644","type":"blob","sha":"490125beab071bf26797c966b0ef9e0a7148e058","size":32,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/490125beab071bf26797c966b0ef9e0a7148e058"},{"path":"src/main.rs","mode":"100644","type":"blob","sha":"3b8bdfe6217b48c3fd2c2fd66a5e9dcdb3cc0cd5","size":444,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/3b8bdfe6217b48c3fd2c2fd66a5e9dcdb3cc0cd5"},{"path":"src/sum.rs","mode":"100644","type":"blob","sha":"e0960d283b99065b95cbeb2b742a83865db7888d","size":66,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/e0960d283b99065b95cbeb2b742a83865db7888d"},{"path":"tests","mode":"040000","type":"tree","sha":"4afeb67caadc13f252fd057dcfeeb0370708eb09","url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/trees/4afeb67caadc13f252fd057dcfeeb0370708eb09"},{"path":"tests/integration","mode":"040000","type":"tree","sha":"a99363a908bd8e4c38637da3e115602eec71ee36","url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/trees/a99363a908bd8e4c38637da3e115602eec71ee36"},{"path":"tests/integration/mod.rs","mode":"100644","type":"blob","sha":"47e2280b07d1efc5bd685915506ba6410bd6a089","size":9,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/47e2280b07d1efc5bd685915506ba6410bd6a089"},{"path":"tests/integration/sum.rs","mode":"100644","type":"blob","sha":"b0d15bcdaf90712755b22a76fe88a4f69a1d2521","size":1059,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/b0d15bcdaf90712755b22a76fe88a4f69a1d2521"},{"path":"tests/unit","mode":"040000","type":"tree","sha":"d6357a25562e91247cac70f9614aece52be3d2f0","url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/trees/d6357a25562e91247cac70f9614aece52be3d2f0"},{"path":"tests/unit/ci-cd","mode":"040000","type":"tree","sha":"baa21e70fe3dab150ec854fa864821fc5ad045ed","url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/trees/baa21e70fe3dab150ec854fa864821fc5ad045ed"},{"path":"tests/unit/ci-cd/changelog_parsing.rs","mode":"100644","type":"blob","sha":"9945412dee4e26b9f135cd31558bf4dfdbb0f488","size":2308,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/9945412dee4e26b9f135cd31558bf4dfdbb0f488"},{"path":"tests/unit/ci-cd/mod.rs","mode":"100644","type":"blob","sha":"7ced4c51ef2ac4a615929043c373d4fc873a8d64","size":289,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/7ced4c51ef2ac4a615929043c373d4fc873a8d64"},{"path":"tests/unit/ci-cd/workflow_release.rs","mode":"100644","type":"blob","sha":"9048e83b7eca5fc83419c03889173c3643e809b8","size":8728,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/9048e83b7eca5fc83419c03889173c3643e809b8"},{"path":"tests/unit/ci-cd/workspace_manifest_resolution.rs","mode":"100644","type":"blob","sha":"10ce4c4df7000ba70f18b158677d22bc3d19d2ca","size":3799,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/10ce4c4df7000ba70f18b158677d22bc3d19d2ca"},{"path":"tests/unit/mod.rs","mode":"100644","type":"blob","sha":"7c158e60a04372aeff255c35aeb12ac7e3ffb9ea","size":46,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/7c158e60a04372aeff255c35aeb12ac7e3ffb9ea"},{"path":"tests/unit/sum.rs","mode":"100644","type":"blob","sha":"84937f6b08f7f883a582874d4a6a127e04dc588c","size":417,"url":"https://api.github.com/repos/link-foundation/rust-ai-driven-development-pipeline-template/git/blobs/84937f6b08f7f883a582874d4a6a127e04dc588c"}],"truncated":false} \ No newline at end of file diff --git a/docs/case-studies/issue-86/templates/rust-ai-driven-development-pipeline-template/wait-for-crate.rs b/docs/case-studies/issue-86/templates/rust-ai-driven-development-pipeline-template/wait-for-crate.rs new file mode 100644 index 0000000..ee80cca --- /dev/null +++ b/docs/case-studies/issue-86/templates/rust-ai-driven-development-pipeline-template/wait-for-crate.rs @@ -0,0 +1,178 @@ +#!/usr/bin/env rust-script +//! Wait for a crates.io package version to become visible. +//! +//! The Docker release step runs after `cargo publish`, but crates.io indexing can +//! lag briefly. Waiting here makes Docker Hub tags and GitHub releases point at a +//! crate version that users can already resolve. +//! +//! Usage: +//! rust-script scripts/wait-for-crate.rs --release-version +//! +//! Optional arguments: +//! --crate-name Crate name. Defaults to Cargo.toml package name. +//! --rust-root Root containing Cargo.toml. Defaults to auto-detect. +//! --max-attempts Defaults to 30. +//! --sleep-seconds Defaults to 10. +//! +//! Outputs (written to GITHUB_OUTPUT): +//! - crate_available: 'true' when the version is visible, or 'skipped' for template defaults +//! +//! ```cargo +//! [dependencies] +//! regex = "1" +//! ureq = "2" +//! ``` + +use std::env; +use std::fs; +use std::process::exit; +use std::thread; +use std::time::Duration; + +#[path = "rust-paths.rs"] +mod rust_paths; + +fn get_arg(name: &str) -> Option { + let args: Vec = env::args().collect(); + let flag = format!("--{}", name); + + if let Some(idx) = args.iter().position(|a| a == &flag) { + return args.get(idx + 1).cloned(); + } + + let env_name = name.to_uppercase().replace('-', "_"); + env::var(&env_name).ok().filter(|s| !s.is_empty()) +} + +fn set_output(key: &str, value: &str) { + if let Ok(output_file) = env::var("GITHUB_OUTPUT") { + if let Err(e) = fs::OpenOptions::new() + .create(true) + .append(true) + .open(&output_file) + .and_then(|mut f| { + use std::io::Write; + writeln!(f, "{}={}", key, value) + }) + { + eprintln!("Warning: Could not write to GITHUB_OUTPUT: {}", e); + } + } + println!("Output: {}={}", key, value); +} + +fn parse_count_arg(name: &str, default: u64) -> u64 { + get_arg(name) + .and_then(|value| { + value.parse::().map_or_else( + |_| { + eprintln!( + "Warning: Invalid {} value '{}'; using default {}", + name, value, default + ); + None + }, + Some, + ) + }) + .unwrap_or(default) +} + +fn crate_version_exists(crate_name: &str, version: &str) -> bool { + let url = format!("https://crates.io/api/v1/crates/{}/{}", crate_name, version); + + match ureq::get(&url) + .set("User-Agent", "rust-script-wait-for-crate") + .call() + { + Ok(response) => response.status() == 200, + Err(ureq::Error::Status(404, _)) => false, + Err(e) => { + eprintln!("Warning: Could not check crates.io: {}", e); + false + } + } +} + +fn should_skip_crate_wait(crate_name: &str) -> bool { + crate_name == "example-sum-package-name" +} + +fn main() { + let rust_root = match rust_paths::get_rust_root(None, true) { + Ok(root) => root, + Err(e) => { + eprintln!("Error: {}", e); + exit(1); + } + }; + let cargo_toml = rust_paths::get_cargo_toml_path(&rust_root); + let package_manifest = match rust_paths::get_package_manifest_path(&cargo_toml) { + Ok(path) => path, + Err(e) => { + eprintln!("Error: {}", e); + exit(1); + } + }; + let package_info = match rust_paths::read_package_info(&package_manifest) { + Ok(info) => info, + Err(e) => { + eprintln!("Error: {}", e); + exit(1); + } + }; + + let crate_name = get_arg("crate-name").unwrap_or(package_info.name); + let version = get_arg("release-version").unwrap_or(package_info.version); + let max_attempts = parse_count_arg("max-attempts", 30); + let sleep_seconds = parse_count_arg("sleep-seconds", 10); + + if should_skip_crate_wait(&crate_name) { + println!( + "Skipping crates.io availability wait: package name is the template default '{}'", + crate_name + ); + set_output("crate_available", "skipped"); + return; + } + + for attempt in 1..=max_attempts { + if crate_version_exists(&crate_name, &version) { + println!( + "{}@{} is visible on crates.io after attempt {}", + crate_name, version, attempt + ); + set_output("crate_available", "true"); + return; + } + + if attempt < max_attempts { + println!( + "{}@{} is not visible on crates.io yet (attempt {}/{}); waiting {}s", + crate_name, version, attempt, max_attempts, sleep_seconds + ); + thread::sleep(Duration::from_secs(sleep_seconds)); + } + } + + eprintln!( + "Error: {}@{} was not visible on crates.io after {} attempts", + crate_name, version, max_attempts + ); + exit(1); +} + +#[cfg(test)] +mod tests { + use super::should_skip_crate_wait; + + #[test] + fn skips_template_default_package_name() { + assert!(should_skip_crate_wait("example-sum-package-name")); + } + + #[test] + fn waits_for_real_package_names() { + assert!(!should_skip_crate_wait("real-package-name")); + } +} From 4dbb7831b739c97fb821c9ebad51d330dcbcaf5e Mon Sep 17 00:00:00 2001 From: konard Date: Tue, 12 May 2026 21:44:35 +0000 Subject: [PATCH 4/4] chore: remove PR bootstrap placeholder --- .gitkeep | 1 - 1 file changed, 1 deletion(-) delete mode 100644 .gitkeep diff --git a/.gitkeep b/.gitkeep deleted file mode 100644 index b503c3d..0000000 --- a/.gitkeep +++ /dev/null @@ -1 +0,0 @@ -# .gitkeep file auto-generated at 2026-05-12T21:27:17.058Z for PR creation at branch issue-86-799717a6ecc6 for issue https://github.com/link-foundation/link-cli/issues/86 \ No newline at end of file