diff --git a/.codacy.yml b/.codacy.yml new file mode 100644 index 0000000..2934215 --- /dev/null +++ b/.codacy.yml @@ -0,0 +1,4 @@ +--- +# Immutable downloaded logs and template snapshots are evidence, not maintained source. +exclude_paths: + - 'dev/log/**' diff --git a/.github/actions/prepare-ci/action.yml b/.github/actions/prepare-ci/action.yml new file mode 100644 index 0000000..99508d0 --- /dev/null +++ b/.github/actions/prepare-ci/action.yml @@ -0,0 +1,27 @@ +name: Prepare CI merge +description: Merge the current PR base into the checked-out revision +inputs: + base-sha: + description: Replay a previously validated base commit for benchmark matrix consistency + required: false +outputs: + base-sha: + description: Base commit used for this merge + value: ${{ steps.merge.outputs.base }} +runs: + using: composite + steps: + - name: Merge current base for pull requests + id: merge + if: github.event_name == 'pull_request' + shell: bash + env: + BASE_REF: ${{ github.base_ref }} + BASE_SHA: ${{ inputs.base-sha }} + run: | + git config user.email 'github-actions[bot]@users.noreply.github.com' + git config user.name 'github-actions[bot]' + git fetch origin "$BASE_REF" + base="${BASE_SHA:-origin/$BASE_REF}" + echo "base=$(git rev-parse "$base")" >> "$GITHUB_OUTPUT" + git merge --no-edit "$base" diff --git a/.github/dependabot.yml b/.github/dependabot.yml index f87be70..c5693a1 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,16 +1,37 @@ version: 2 updates: - package-ecosystem: nuget - directory: "/csharp" + directories: + - "/csharp" + - "/experiments/csharp_objects_profile" + - "/experiments/csharp_split_linked_list" + - "/experiments/csharp_tree_delete" + - "/experiments/system_data_sqlite" schedule: interval: daily open-pull-requests-limit: 10 + cooldown: + default-days: 7 - package-ecosystem: cargo - directory: "/rust" + directories: + - "/rust" + - "/experiments/unit_store_growth" + - "/experiments/sqlite_returning" + - "/experiments/split_store_delete" schedule: interval: daily open-pull-requests-limit: 10 + cooldown: + default-days: 7 - package-ecosystem: github-actions directory: "/" schedule: interval: weekly + cooldown: + default-days: 7 +- package-ecosystem: pip + directory: "/scripts" + schedule: + interval: weekly + cooldown: + default-days: 7 diff --git a/.github/workflows/AutoMerge.yml b/.github/workflows/AutoMerge.yml index 7b8c981..d495862 100644 --- a/.github/workflows/AutoMerge.yml +++ b/.github/workflows/AutoMerge.yml @@ -1,14 +1,34 @@ name: auto-merge on: - pull_request_target: + pull_request_target: # zizmor: ignore[dangerous-triggers] metadata only; no checkout or PR code execution + types: [opened, reopened, synchronize] + +permissions: + contents: read jobs: auto-merge: - runs-on: ubuntu-latest + if: github.event.pull_request.user.login == 'dependabot[bot]' + runs-on: ubuntu-24.04 + timeout-minutes: 5 + permissions: + contents: write + pull-requests: write + concurrency: + group: main-writer-${{ github.repository }}-main + cancel-in-progress: false steps: - - uses: actions/checkout@v7 - - uses: ahmadnassri/action-dependabot-auto-merge@v2 + # Action updates can use v1/v2 titles which the old parser rejected. + - uses: dependabot/fetch-metadata@25dd0e34f4fe68f24cc83900b1fe3fe149efef98 # v3 + id: metadata with: - target: minor - github-token: ${{ secrets.DEPENDABOT_AUTO_MERGE_TOKEN }} + github-token: ${{ secrets.GITHUB_TOKEN }} + - name: Enable auto-merge for patch and minor updates + if: >- + steps.metadata.outputs.update-type == 'version-update:semver-patch' || + steps.metadata.outputs.update-type == 'version-update:semver-minor' + env: + GH_TOKEN: ${{ secrets.DEPENDABOT_AUTO_MERGE_TOKEN || github.token }} + PR_URL: ${{ github.event.pull_request.html_url }} + run: gh pr merge --auto --squash "$PR_URL" diff --git a/.github/workflows/benchmarks.yml b/.github/workflows/benchmarks.yml index 1144167..f4a5d2b 100644 --- a/.github/workflows/benchmarks.yml +++ b/.github/workflows/benchmarks.yml @@ -1,136 +1,238 @@ name: Benchmarks -# Every job measures one README table (language, category, bits, size) with all its variants on one runner, -# so that the variants of a table are compared on the same machine. Pull requests run the whole pipeline -# on small sizes; pushes to main publish the results to README.md and README.ru.md. on: push: branches: [main] - paths: ['rust/**', 'csharp/**', 'scripts/**', '.github/workflows/benchmarks.yml'] + paths: ['rust/**', 'csharp/**', 'scripts/**', 'pyproject.toml', '.github/actions/**', '.github/workflows/benchmarks.yml', '.markdownlint.json'] pull_request: - paths: ['rust/**', 'csharp/**', 'scripts/**', '.github/workflows/benchmarks.yml'] + paths: ['rust/**', 'csharp/**', 'scripts/**', 'pyproject.toml', '.github/actions/**', '.github/workflows/benchmarks.yml', '.markdownlint.json'] workflow_dispatch: inputs: sizes: - description: JSON array of sizes (objects skip 10,000,000 and 100,000,000) + description: JSON sizes (1..10,000,000; objects stop at 1,000,000) default: '[100000, 1000000, 10000000]' + verbose: + description: Print artifact diagnostics and Rust backtraces + type: boolean + default: false -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: ${{ github.event_name == 'pull_request' }} +permissions: + contents: read env: CARGO_TERM_COLOR: always + SOURCE_SHA: ${{ github.sha }} jobs: report-tests: - name: Report script tests - runs-on: ubuntu-latest + name: Report script tests and benchmark plan + runs-on: ubuntu-24.04 timeout-minutes: 10 + concurrency: + group: check-${{ github.workflow }}-${{ github.ref }}-report-tests + cancel-in-progress: true + outputs: + matrix: ${{ steps.plan.outputs.matrix }} + sizes: ${{ steps.plan.outputs.sizes }} + tree: ${{ steps.plan.outputs.tree }} + base: ${{ steps.prepare.outputs.base-sha || github.sha }} steps: - - uses: actions/checkout@v7 - - uses: actions/setup-python@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + with: + fetch-depth: 0 + persist-credentials: false + - uses: ./.github/actions/prepare-ci # zizmor: ignore[self-repository] actionlint 1.7.12 lacks $/ syntax + id: prepare + - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7 with: python-version: '3.13' - - run: pip install -r scripts/requirements.txt + - run: pip install -r scripts/requirements.txt PyYAML==6.0.3 - run: python -m unittest discover -s scripts -v - run: npx --yes markdownlint-cli@0.49.1 README.md README.ru.md + - name: Validate sizes and emit matrix + id: plan + env: + SIZES: ${{ inputs.sizes || (github.event_name == 'pull_request' && '[1000]') || '[100000, 1000000, 10000000]' }} + run: | + matrix=$(python scripts/benchmark_ci.py matrix --sizes "$SIZES") + sizes=$(jq -c . <<< "$SIZES") + { + echo "matrix=$matrix" + echo "sizes=$sizes" + echo "tree=$(git rev-parse 'HEAD^{tree}')" + } >> "$GITHUB_OUTPUT" benchmark: name: ${{ matrix.language }} ${{ matrix.category }} ${{ matrix.bits }} bit ${{ matrix.size }} - runs-on: ubuntu-latest + needs: report-tests + runs-on: ubuntu-24.04 timeout-minutes: 355 + concurrency: + group: check-${{ github.workflow }}-${{ github.ref }}-${{ matrix.language }}-${{ matrix.category }}-${{ matrix.bits }}-${{ matrix.size }} + cancel-in-progress: true strategy: fail-fast: false - matrix: - language: [rust, csharp] - category: [links, objects] - bits: [32, 64] - size: ${{ fromJSON(inputs.sizes || (github.event_name == 'pull_request' && '[1000]') || '[100000, 1000000, 10000000]') }} - exclude: - # One million blog posts already take an hour in C#; ten millions would not fit into a job. - - category: objects - size: 10000000 - - category: objects - size: 100000000 + matrix: ${{ fromJSON(needs.report-tests.outputs.matrix) }} + env: + LANGUAGE: ${{ matrix.language }} + CATEGORY: ${{ matrix.category }} + BITS: ${{ matrix.bits }} + SIZE: ${{ matrix.size }} + RUST_BACKTRACE: ${{ inputs.verbose && 'full' || '0' }} steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + with: + fetch-depth: 0 + persist-credentials: false + - uses: ./.github/actions/prepare-ci # zizmor: ignore[self-repository] actionlint 1.7.12 lacks $/ syntax + with: + base-sha: ${{ needs.report-tests.outputs.base }} - if: matrix.language == 'rust' - uses: dtolnay/rust-toolchain@stable + uses: dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d # stable + with: + toolchain: stable - if: matrix.language == 'rust' - uses: Swatinem/rust-cache@v2 + uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 with: workspaces: rust + save-if: ${{ github.ref == 'refs/heads/main' }} - if: matrix.language == 'rust' - run: | - cargo build --release --manifest-path rust/Cargo.toml - echo "BENCHMARK=rust/target/release/sqlite-vs-doublets" >> "$GITHUB_ENV" + run: cargo build --locked --release --manifest-path rust/Cargo.toml - if: matrix.language == 'csharp' - uses: actions/setup-dotnet@v6 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6 with: global-json-file: csharp/global.json - if: matrix.language == 'csharp' - run: | - dotnet build -c Release csharp/SQLiteVSDoublets - echo "BENCHMARK=dotnet csharp/SQLiteVSDoublets/bin/Release/net10.0/sqlite-vs-doublets.dll" >> "$GITHUB_ENV" + run: dotnet build -c Release -warnaserror csharp/SQLiteVSDoublets - name: Benchmark run: | - name=${{ matrix.category }}-${{ matrix.language }}-${{ matrix.bits }}-${{ matrix.size }} + name="$CATEGORY-$LANGUAGE-$BITS-$SIZE" echo "NAME=$name" >> "$GITHUB_ENV" - $BENCHMARK ${{ matrix.category }} ${{ matrix.bits }} ${{ matrix.size }} \ + if [ "$LANGUAGE" = rust ]; then + benchmark=(rust/target/release/sqlite-vs-doublets) + else + benchmark=(dotnet csharp/SQLiteVSDoublets/bin/Release/net10.0/sqlite-vs-doublets.dll) + fi + "${benchmark[@]}" "$CATEGORY" "$BITS" "$SIZE" \ --directory "$RUNNER_TEMP/storage" --output "$RUNNER_TEMP/measured.json" machine="$(. /etc/os-release && echo "$PRETTY_NAME"), $(lscpu | sed -n 's/^Model name: *//p' | head -1)" machine="$machine, $(nproc) cores, $(awk '/^MemTotal/ { printf "%.0f", $2 / 1048576 }' /proc/meminfo) GiB" mkdir results jq --arg run_url "$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID" \ + --arg source_sha "$SOURCE_SHA" --arg tree_sha "$(git rev-parse 'HEAD^{tree}')" \ --arg date "$(date -u +%Y-%m-%d)" --arg machine "$machine" \ - '. + {run_url: $run_url, date: $date, machine: $machine}' \ + '. + {run_url: $run_url, source_sha: $source_sha, tree_sha: $tree_sha, date: $date, machine: $machine}' \ "$RUNNER_TEMP/measured.json" > "results/$name.json" - - uses: actions/upload-artifact@v7 + - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: results-${{ env.NAME }} path: results/${{ env.NAME }}.json + if-no-files-found: error + retention-days: 14 report: name: Report needs: [report-tests, benchmark] - # Publishes the finished tables even if some jobs failed; the missing ones keep their previous results. - if: ${{ !cancelled() && needs.report-tests.result == 'success' }} - runs-on: ubuntu-latest + if: ${{ !cancelled() && needs.report-tests.result == 'success' && needs.benchmark.result == 'success' }} + runs-on: ubuntu-24.04 timeout-minutes: 15 - permissions: - contents: write + concurrency: + group: check-${{ github.workflow }}-${{ github.ref }}-report + cancel-in-progress: true + env: + SIZES: ${{ needs.report-tests.outputs.sizes }} + EXPECTED_TREE: ${{ needs.report-tests.outputs.tree }} + CI_VERBOSE: ${{ inputs.verbose && 'true' || 'false' }} steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: - ref: ${{ github.event_name == 'pull_request' && github.sha || github.ref_name }} - - uses: actions/setup-python@v7 + fetch-depth: 0 + persist-credentials: false + - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7 with: python-version: '3.13' - run: pip install -r scripts/requirements.txt - - uses: actions/download-artifact@v8 + - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 with: pattern: results-* merge-multiple: true - path: ${{ github.event_name == 'pull_request' && format('{0}/results', runner.temp) || 'docs/benchmarks/results' }} - - if: github.event_name == 'pull_request' - name: Check the report + path: ${{ runner.temp }}/results + - name: Verify every current-run artifact + run: | + args=() + if [ "$CI_VERBOSE" = true ]; then args+=(--verbose); fi + python scripts/benchmark_ci.py verify --directory "$RUNNER_TEMP/results" \ + --sizes "$SIZES" --sha "$SOURCE_SHA" --tree "$EXPECTED_TREE" "${args[@]}" + - name: Check the report run: | python scripts/benchmark_report.py "$RUNNER_TEMP/results" >> "$GITHUB_STEP_SUMMARY" - python scripts/benchmark_report.py "$RUNNER_TEMP/results" --readme README.md --readme README.ru.md - npx --yes markdownlint-cli@0.49.1 README.md README.ru.md - - if: github.event_name != 'pull_request' - name: Publish the report + if [ "$GITHUB_EVENT_NAME" = pull_request ]; then + python scripts/benchmark_report.py "$RUNNER_TEMP/results" --readme README.md --readme README.ru.md + npx --yes markdownlint-cli@0.49.1 README.md README.ru.md + fi + + publish: + name: Publish benchmark results + needs: [report-tests, report] + if: ${{ !cancelled() && github.event_name != 'pull_request' && github.ref == 'refs/heads/main' && needs.report.result == 'success' }} + runs-on: ubuntu-24.04 + timeout-minutes: 15 + permissions: + contents: write + concurrency: + group: main-writer-${{ github.repository }}-main + cancel-in-progress: false + env: + SIZES: ${{ needs.report-tests.outputs.sizes }} + EXPECTED_TREE: ${{ needs.report-tests.outputs.tree }} + CI_VERBOSE: ${{ inputs.verbose && 'true' || 'false' }} + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + with: + fetch-depth: 0 + persist-credentials: false + - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7 + with: + python-version: '3.13' + - run: pip install -r scripts/requirements.txt + - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 + with: + pattern: results-* + merge-multiple: true + path: ${{ runner.temp }}/results + - name: Publish the report + env: + GH_TOKEN: ${{ github.token }} run: | - python scripts/benchmark_report.py docs/benchmarks/results \ - --readme README.md --readme README.ru.md --charts docs/benchmarks - git config user.email 'linksplatform@gmail.com' - git config user.name 'LinksPlatformBencher' - git add README.md README.ru.md docs/benchmarks - git diff --staged --quiet && exit 0 - git commit -m 'Update benchmark results [skip ci]' - for attempt in 1 2 3; do - git pull --rebase origin "$GITHUB_REF_NAME" && git push origin "HEAD:$GITHUB_REF_NAME" && exit 0 - sleep 10 - done - exit 1 + gh auth setup-git + args=() + if [ "$CI_VERBOSE" = true ]; then args+=(--verbose); fi + python scripts/benchmark_ci.py verify --directory "$RUNNER_TEMP/results" \ + --sizes "$SIZES" --sha "$SOURCE_SHA" --tree "$EXPECTED_TREE" "${args[@]}" + python scripts/publish_benchmarks.py "$RUNNER_TEMP/results" \ + --sizes "$SIZES" --sha "$SOURCE_SHA" "${args[@]}" + + pipeline-status: + name: Pipeline Status + needs: [report-tests, benchmark, report, publish] + if: ${{ !cancelled() }} + runs-on: ubuntu-24.04 + timeout-minutes: 5 + defaults: + run: + working-directory: . + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + with: + persist-credentials: false + - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7 + with: + python-version: '3.13' + - run: python -m pip install PyYAML==6.0.3 + - name: Check terminal status + env: + NEEDS_JSON: ${{ toJSON(needs) }} + WORKFLOW_FILE: .github/workflows/benchmarks.yml + RUN_REF: ${{ github.ref }} + RUN_SHA: ${{ github.sha }} + run: python scripts/check_pipeline_status.py diff --git a/.github/workflows/cpp.yml b/.github/workflows/cpp.yml deleted file mode 100644 index 048238a..0000000 --- a/.github/workflows/cpp.yml +++ /dev/null @@ -1,93 +0,0 @@ -name: cpp - -on: - push: - branches: main - paths: - - 'cpp/**' - - '.github/workflows/cpp.yml' - -env: - NUGETTOKEN: ${{ secrets.NUGET_TOKEN }} - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - SCRIPTS_BASE_URL: https://raw.githubusercontent.com/linksplatform/Scripts/main/MultiProjectRepository - -defaults: - run: - working-directory: cpp - -jobs: - test: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v7 - with: - submodules: true - - name: Setup clang - uses: egor-tensin/setup-clang@v2 - with: - version: 13 - platform: x64 - - name: Install conan - run: pip install conan - - name: Setup conan - run: | - conan profile new linksplatform --detect - conan profile update settings.compiler=clang linksplatform - conan profile update settings.compiler.version=13 linksplatform - conan profile update settings.compiler.libcxx=libstdc++11 linksplatform - conan profile update env.CXX=clang++ linksplatform - conan profile show linksplatform - - name: Instll conan packages - run: | - if [ -f "install-local-conan-dependencies.sh" ]; then - echo "install-local-conan-dependencies.sh exists." - chmod +x ./install-local-conan-dependencies.sh - ./install-local-conan-dependencies.sh - fi - - name: Test and scan-build - run: | - CXX=clang++ - cmake_flags="-DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER=clang++ -DLINKS_PLATFORM_TESTS=TRUE" - cmake_build_dir="build" - mkdir $cmake_build_dir && cd $cmake_build_dir - conan install .. -pr=linksplatform --build=missing - cmake .. "$cmake_flags" - cmake --build . - ls - pushToNuget: - runs-on: ubuntu-latest - needs: test - steps: - - uses: actions/checkout@v7 - with: - submodules: true - - name: Read package information - run: | - export REPOSITORY_NAME=$(basename ${{ github.repository }}) - wget "$SCRIPTS_BASE_URL/read_cpp_package_info.sh" - bash ./read_cpp_package_info.sh - - name: Publish NuGet package - run: | - export REPOSITORY_NAME=$(basename ${{ github.repository }}) - wget "$SCRIPTS_BASE_URL/push-cpp-nuget.sh" - bash ./push-cpp-nuget.sh - publiseRelease: - runs-on: ubuntu-latest - needs: test - steps: - - uses: actions/checkout@v7 - with: - submodules: true - - name: Read project information - run: | - export REPOSITORY_NAME=$(basename ${{ github.repository }}) - wget "$SCRIPTS_BASE_URL/read_cpp_package_info.sh" - bash ./read_cpp_package_info.sh - - name: Publish release - run: | - export REPOSITORY_NAME=$(basename ${{ github.repository }}) - wget "$SCRIPTS_BASE_URL/publish-release.sh" - chmod +x ./publish-release.sh - wget "$SCRIPTS_BASE_URL/publish-cpp-release.sh" - bash ./publish-cpp-release.sh diff --git a/.github/workflows/csharp.yml b/.github/workflows/csharp.yml index 9dd11a3..21f2f2c 100644 --- a/.github/workflows/csharp.yml +++ b/.github/workflows/csharp.yml @@ -1,11 +1,15 @@ name: C# on: + workflow_dispatch: push: branches: [main] - paths: ['csharp/**', 'experiments/system_data_sqlite/**', '.github/workflows/csharp.yml'] + paths: ['csharp/**', 'experiments/**/*.cs', 'experiments/**/*.csproj', 'experiments/system_data_sqlite/**', '.github/workflows/csharp.yml', '.github/actions/**', 'scripts/check_pipeline_status.py', 'scripts/ci_process.py', 'scripts/workflow_yaml.py'] pull_request: - paths: ['csharp/**', 'experiments/system_data_sqlite/**', '.github/workflows/csharp.yml'] + paths: ['csharp/**', 'experiments/**/*.cs', 'experiments/**/*.csproj', 'experiments/system_data_sqlite/**', '.github/workflows/csharp.yml', '.github/actions/**', 'scripts/check_pipeline_status.py', 'scripts/ci_process.py', 'scripts/workflow_yaml.py'] + +permissions: + contents: read concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -23,13 +27,50 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-latest, macos-latest, windows-latest] + os: [ubuntu-24.04, macos-15, windows-2025] steps: - - uses: actions/checkout@v7 - - uses: actions/setup-dotnet@v6 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + with: + fetch-depth: 0 + persist-credentials: false + - uses: ./.github/actions/prepare-ci # zizmor: ignore[self-repository] actionlint 1.7.12 lacks $/ syntax + - uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6 with: global-json-file: csharp/global.json + - run: dotnet format whitespace SQLiteVSDoublets.slnx --verify-no-changes + - name: Format every C# experiment + shell: bash + run: | + while IFS= read -r project; do + dotnet format whitespace "../$project" --verify-no-changes + done < <(git -C .. ls-files 'experiments/**/*.csproj') - run: dotnet build -c Release -warnaserror - - run: dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build + - run: dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build -- --timeout 10m + - name: Check SQLite provider reports run: python ../experiments/system_data_sqlite/check_reports.py + + pipeline-status: + name: Pipeline Status + needs: [test] + if: ${{ !cancelled() }} + runs-on: ubuntu-24.04 + timeout-minutes: 5 + defaults: + run: + working-directory: . + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + with: + persist-credentials: false + - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7 + with: + python-version: '3.13' + - run: python -m pip install PyYAML==6.0.3 + - name: Check terminal status + env: + NEEDS_JSON: ${{ toJSON(needs) }} + WORKFLOW_FILE: .github/workflows/csharp.yml + RUN_REF: ${{ github.ref }} + RUN_SHA: ${{ github.sha }} + run: python scripts/check_pipeline_status.py diff --git a/.github/workflows/dependencies.yml b/.github/workflows/dependencies.yml new file mode 100644 index 0000000..e7b401b --- /dev/null +++ b/.github/workflows/dependencies.yml @@ -0,0 +1,72 @@ +name: Dependency audit + +on: + workflow_dispatch: + schedule: + - cron: '17 4 * * 1' + push: + branches: [main] + paths: ['**/Cargo.toml', '**/Cargo.lock', '**/*.csproj', 'csharp/global.json', 'scripts/requirements*.txt', 'scripts/audit_dotnet.py', '.github/workflows/dependencies.yml', '.github/actions/**', 'scripts/check_pipeline_status.py', 'scripts/ci_process.py', 'scripts/workflow_yaml.py'] + pull_request: + paths: ['**/Cargo.toml', '**/Cargo.lock', '**/*.csproj', 'csharp/global.json', 'scripts/requirements*.txt', 'scripts/audit_dotnet.py', '.github/workflows/dependencies.yml', '.github/actions/**', 'scripts/check_pipeline_status.py', 'scripts/ci_process.py', 'scripts/workflow_yaml.py'] + +permissions: + contents: read + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + audit: + runs-on: ubuntu-24.04 + timeout-minutes: 20 + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + with: + fetch-depth: 0 + persist-credentials: false + - uses: ./.github/actions/prepare-ci # zizmor: ignore[self-repository] actionlint 1.7.12 lacks $/ syntax + - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7 + with: + python-version: '3.13' + - run: python -m pip install pip-audit==2.10.1 + - run: pip-audit -r scripts/requirements.txt -r scripts/requirements-ci.txt + - uses: dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d # stable + with: + toolchain: stable + - run: cargo install cargo-audit --version 0.22.2 --locked + - name: Audit every Rust dependency tree + run: | + while IFS= read -r lockfile; do + cargo audit --file "$lockfile" --deny warnings + done < <(git ls-files '**/Cargo.lock') + - uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6 + with: + global-json-file: csharp/global.json + - run: python scripts/audit_dotnet.py + + pipeline-status: + name: Pipeline Status + needs: [audit] + if: ${{ !cancelled() }} + runs-on: ubuntu-24.04 + timeout-minutes: 5 + defaults: + run: + working-directory: . + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + with: + persist-credentials: false + - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7 + with: + python-version: '3.13' + - run: python -m pip install PyYAML==6.0.3 + - name: Check terminal status + env: + NEEDS_JSON: ${{ toJSON(needs) }} + WORKFLOW_FILE: .github/workflows/dependencies.yml + RUN_REF: ${{ github.ref }} + RUN_SHA: ${{ github.sha }} + run: python scripts/check_pipeline_status.py diff --git a/.github/workflows/quality.yml b/.github/workflows/quality.yml new file mode 100644 index 0000000..9582669 --- /dev/null +++ b/.github/workflows/quality.yml @@ -0,0 +1,89 @@ +name: CI quality + +on: + workflow_dispatch: + push: + branches: [main] + paths: ['.github/**', 'scripts/**', 'experiments/**', 'pyproject.toml', 'README*.md', 'CONTRIBUTING.md', 'cpp/**', '.secretlintrc.json', '.pre-commit-config.yaml', '.markdownlint.json', '.codacy.yml'] + pull_request: + paths: ['.github/**', 'scripts/**', 'experiments/**', 'pyproject.toml', 'README*.md', 'CONTRIBUTING.md', 'cpp/**', '.secretlintrc.json', '.pre-commit-config.yaml', '.markdownlint.json', '.codacy.yml'] + +permissions: + contents: read + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + workflows: + runs-on: ubuntu-24.04 + timeout-minutes: 10 + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + with: + fetch-depth: 0 + persist-credentials: false + - uses: ./.github/actions/prepare-ci # zizmor: ignore[self-repository] actionlint 1.7.12 lacks $/ syntax + - name: Actionlint and ShellCheck + run: docker run --rm -v "$PWD:/repo" -w /repo rhysd/actionlint@sha256:b1934ee5f1c509618f2508e6eb47ee0d3520686341fec936f3b79331f9315667 -color + - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7 + with: + python-version: '3.13' + - run: python -m pip install zizmor==1.30.1 + - name: Workflow security + run: | + zizmor --offline --min-severity medium .github + zizmor --offline --persona pedantic --min-severity high --min-confidence high .github + + python: + needs: workflows + runs-on: ubuntu-24.04 + timeout-minutes: 15 + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + with: + fetch-depth: 0 + persist-credentials: false + - uses: ./.github/actions/prepare-ci # zizmor: ignore[self-repository] actionlint 1.7.12 lacks $/ syntax + - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7 + with: + python-version: '3.13' + - run: python -m pip install -r scripts/requirements.txt -r scripts/requirements-ci.txt + - run: ruff check scripts experiments + - run: ruff format --check scripts experiments + - run: mypy scripts + - run: bandit -r scripts experiments -q + - run: python scripts/ci_checks.py + - run: python -m unittest discover -s scripts -v + - run: python -m unittest discover -s experiments/ci -v + - name: Verify preserved investigation evidence + run: python experiments/ci/package_evidence.py dev/log/issues/110/pulls/111 --verify + - run: npx --yes markdownlint-cli@0.49.1 README.md README.ru.md CONTRIBUTING.md cpp/README.md + - name: Scan maintained source for secrets + run: git ls-files -z -- ':!dev/log/**' ':!docs/benchmarks/**' ':!*.png' | xargs -0 npx --yes -p secretlint@13.0.7 -p @secretlint/secretlint-rule-preset-recommend@13.0.7 secretlint + + pipeline-status: + name: Pipeline Status + needs: [workflows, python] + if: ${{ !cancelled() }} + runs-on: ubuntu-24.04 + timeout-minutes: 5 + defaults: + run: + working-directory: . + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + with: + persist-credentials: false + - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7 + with: + python-version: '3.13' + - run: python -m pip install PyYAML==6.0.3 + - name: Check terminal status + env: + NEEDS_JSON: ${{ toJSON(needs) }} + WORKFLOW_FILE: .github/workflows/quality.yml + RUN_REF: ${{ github.ref }} + RUN_SHA: ${{ github.sha }} + run: python scripts/check_pipeline_status.py diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 2123a32..4ef602f 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -1,11 +1,15 @@ name: Rust on: + workflow_dispatch: push: branches: [main] - paths: ['rust/**', '.github/workflows/rust.yml'] + paths: ['rust/**', 'experiments/**/*.rs', 'experiments/**/Cargo.toml', 'experiments/**/Cargo.lock', '.github/workflows/rust.yml', '.github/actions/**', 'scripts/check_pipeline_status.py', 'scripts/ci_process.py', 'scripts/workflow_yaml.py'] pull_request: - paths: ['rust/**', '.github/workflows/rust.yml'] + paths: ['rust/**', 'experiments/**/*.rs', 'experiments/**/Cargo.toml', 'experiments/**/Cargo.lock', '.github/workflows/rust.yml', '.github/actions/**', 'scripts/check_pipeline_status.py', 'scripts/ci_process.py', 'scripts/workflow_yaml.py'] + +permissions: + contents: read concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -26,15 +30,51 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-latest, macos-latest, windows-latest] + os: [ubuntu-24.04, macos-15, windows-2025] steps: - - uses: actions/checkout@v7 - - uses: dtolnay/rust-toolchain@stable + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + with: + fetch-depth: 0 + persist-credentials: false + - uses: ./.github/actions/prepare-ci # zizmor: ignore[self-repository] actionlint 1.7.12 lacks $/ syntax + - uses: dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d # stable with: components: rustfmt, clippy - - uses: Swatinem/rust-cache@v2 + toolchain: stable + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 with: workspaces: rust - - run: cargo fmt --check - - run: cargo clippy --release --all-targets -- -D warnings - - run: cargo test --release + - name: Format every Rust crate + shell: bash + run: | + cargo fmt --check + while IFS= read -r manifest; do + cargo fmt --manifest-path "../$manifest" --check + done < <(git -C .. ls-files 'experiments/**/Cargo.toml') + - run: cargo clippy --locked --release --all-targets -- -D warnings + - run: cargo test --locked --release + + pipeline-status: + name: Pipeline Status + needs: [test] + if: ${{ !cancelled() }} + runs-on: ubuntu-24.04 + timeout-minutes: 5 + defaults: + run: + working-directory: . + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + with: + persist-credentials: false + - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7 + with: + python-version: '3.13' + - run: python -m pip install PyYAML==6.0.3 + - name: Check terminal status + env: + NEEDS_JSON: ${{ toJSON(needs) }} + WORKFLOW_FILE: .github/workflows/rust.yml + RUN_REF: ${{ github.ref }} + RUN_SHA: ${{ github.sha }} + run: python scripts/check_pipeline_status.py diff --git a/.github/zizmor.yml b/.github/zizmor.yml new file mode 100644 index 0000000..2fcbb54 --- /dev/null +++ b/.github/zizmor.yml @@ -0,0 +1,5 @@ +rules: + unpinned-uses: + config: + policies: + '*': hash-pin diff --git a/.gitignore b/.gitignore index e5c9ab8..c5bd78a 100644 --- a/.gitignore +++ b/.gitignore @@ -9,9 +9,11 @@ cpp/*.exe # Common temporary files __pycache__/ +.venv/ *.py[cod] *.tmp *.log +!dev/log/issues/**/*.log *.swp *~ .DS_Store @@ -22,3 +24,10 @@ target/ # .NET build output bin/ obj/ + +# Raw investigation files are preserved in the verified compressed archive. +/dev/log/issues/110/pulls/111/ci-logs/ +/dev/log/issues/110/pulls/111/github/ +/dev/log/issues/110/pulls/111/research/ +/dev/log/issues/110/pulls/111/templates/ +/dev/log/issues/110/pulls/111/validation/ diff --git a/.markdownlint.json b/.markdownlint.json new file mode 100644 index 0000000..4228693 --- /dev/null +++ b/.markdownlint.json @@ -0,0 +1,3 @@ +{ + "MD043": false +} diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..b52c8cd --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,23 @@ +repos: + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.16.10 + hooks: + - id: ruff-check + args: [--fix] + files: ^(scripts|experiments)/.*\.py$ + - id: ruff-format + files: ^(scripts|experiments)/.*\.py$ + - repo: local + hooks: + - id: rustfmt + name: Rust formatting + entry: cargo fmt --manifest-path rust/Cargo.toml --check + language: system + files: ^rust/.*\.rs$ + pass_filenames: false + - id: dotnet-format + name: C# whitespace formatting + entry: dotnet format whitespace csharp/SQLiteVSDoublets.slnx --verify-no-changes + language: system + files: ^csharp/.*\.cs$ + pass_filenames: false diff --git a/.secretlintrc.json b/.secretlintrc.json new file mode 100644 index 0000000..42656a2 --- /dev/null +++ b/.secretlintrc.json @@ -0,0 +1,3 @@ +{ + "rules": [{"id": "@secretlint/secretlint-rule-preset-recommend"}] +} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..3c4d45c --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,68 @@ + +# Contributing + +Use a pull request and keep changes focused on the benchmark comparison. CI checks +the current merge tree, uses fixed runner versions, and checks formatting before +tests. Documentation and Python changes have their own validation workflow. + +## Local checks + +Use the SDK from `csharp/global.json`, stable Rust, Python 3.13 or later, and Node.js +for Markdown and secret checks. Create a virtual environment before installing +the Python tools: + +```sh +python -m venv .venv +. .venv/bin/activate +python -m pip install -r scripts/requirements.txt -r scripts/requirements-ci.txt +ruff check scripts experiments +ruff format --check scripts experiments +mypy scripts +bandit -r scripts experiments -q +python scripts/ci_checks.py +python -m unittest discover -s scripts -v +python -m unittest discover -s experiments/ci -v +python experiments/ci/package_evidence.py dev/log/issues/110/pulls/111 --verify +cargo fmt --manifest-path rust/Cargo.toml --check +cargo clippy --manifest-path rust/Cargo.toml --locked --release \ + --all-targets -- -D warnings +cargo test --manifest-path rust/Cargo.toml --locked --release +dotnet format whitespace csharp/SQLiteVSDoublets.slnx --verify-no-changes +dotnet build csharp/SQLiteVSDoublets.slnx -c Release -warnaserror +(cd csharp && dotnet test --project SQLiteVSDoublets.Tests -c Release \ + --no-build -- --timeout 10m) +npx --yes markdownlint-cli@0.49.1 README.md README.ru.md CONTRIBUTING.md cpp/README.md +``` + +Workflow validation also runs actionlint with ShellCheck and zizmor. The pinned +actionlint container command is in `.github/workflows/quality.yml`. Run both +zizmor commands from that workflow locally when changing automation. Optional +pre-commit hooks are configured in `.pre-commit-config.yaml`. + +## Dependencies and diagnostics + +Language workflows also verify formatting in every Rust and C# experiment; +the Python formatting commands cover all experiment scripts. + +The dependency workflow audits Python, every committed Rust lockfile (including +experiments), and direct and transitive NuGet packages weekly and on relevant +changes. Run `pip-audit -r scripts/requirements.txt -r scripts/requirements-ci.txt`, +`cargo audit --file --deny warnings`, and +`python scripts/audit_dotnet.py` locally with the workflow tool versions. + +Benchmark inputs are bounded to ten million links and one million objects, +with at most 32 requested sizes (256 jobs). The +workflow's `verbose` input enables full Rust backtraces and artifact/publication +diagnostics; the default is off. Missing, stale, duplicate, or invalid reports +fail validation. Publication retries only concurrent branch updates and rebuilds +reports from the newly fetched branch on every retry. + +This repository contains benchmark executables, without a package release or +container deployment pipeline. Package changesets, registry credentials, and +container build steps should be added with an actual distributable component. +The C++ directory is a placeholder; see [its prerequisites](cpp/README.md). + +Immutable investigation evidence is preserved in +[the issue 110 investigation](dev/log/issues/110/pulls/111/ANALYSIS.md). +Downloaded upstream logs and snapshots are excluded from source formatting and +secret scanning so historical third-party output is preserved unchanged. diff --git a/cpp/README.md b/cpp/README.md new file mode 100644 index 0000000..0b0ecfa --- /dev/null +++ b/cpp/README.md @@ -0,0 +1,10 @@ + +# C++ placeholder + +This directory contains an empty Conan manifest and no C++ implementation, +`CMakeLists.txt`, tests, or package metadata. The obsolete build and release +workflow was retired in issue #110; it could not build or publish this tree. + +A future C++ implementation must add a real build target and tests before +enabling CI. Use a supported Clang version on a pinned runner, Conan 2 profiles +and generators, pull request validation, and release jobs gated on passing tests. diff --git a/dev/log/issues/110/pulls/111/ANALYSIS.md b/dev/log/issues/110/pulls/111/ANALYSIS.md new file mode 100644 index 0000000..4e361d5 --- /dev/null +++ b/dev/log/issues/110/pulls/111/ANALYSIS.md @@ -0,0 +1,481 @@ +# Issue 110 investigation and implementation + +Repository: linksplatform/Comparisons.SQLiteVSDoublets. Implementation and review: +[PR 111](https://github.com/linksplatform/Comparisons.SQLiteVSDoublets/pull/111). +All times below are UTC. Initial default branch: `d2ee41e17b1bf6a8f3bea6c96827c41311cedb19`. +Prepared branch: `issue-110-e1f96d946132`, initial commit `3b19ef1`. + +## Evidence and collection scope + +`github/` preserves the complete issue, conversation comments, inline review +comments, reviews, PR details/diff, recent related PRs, repository tree, commit +history, and run timestamps/SHAs. There were no issue or PR comments/reviews in +the initial collection. `ci-logs/` preserves run metadata, all job pages, and +every downloadable completed-run log since October 3, including all five runs +named in the issue. Unfinished runs have metadata/job records; GitHub does not +provide a completed-run log until the run ends. Refresh with +`python experiments/ci/collect_evidence.py`. + +Raw directories are preserved byte-for-byte in `raw-evidence.tar.gz`; extract +them using the commands in [README.md](README.md). All original paths and +hashes below remain valid. CI verifies every archived member against the +manifest. Readable analysis, plans and indexes remain separate files. + +The initial completed-log corpus contains 67 run logs. Completed job logs +from unfinished runs are also preserved via the job-log API. Logs were inspected in +chunks of at most 1,500 lines. `ci-logs/diagnostics.json` records diagnostic +matches and original line numbers; `ci-logs/diagnostics.md` lists distinct +messages. `validation/` contains failing reproductions, complete local test +output, audits, tool versions, and eight real small benchmark reports. +`research/` preserves the referenced best-practice document, action SHAs, +upstream source/issue evidence, and submitted reports. GitHub service tokens in logs are masked; collector commands never print +authentication tokens. + +Three complete template snapshots, exact commit SHAs, and repository metadata +are under `templates/`. The full-tree comparison TSVs classify **every tracked +file**: Rust 162, C# 73, Python 101. Application examples are classified rather +than replacing this repository's working benchmark implementations. The +`*-ci-review.txt` files record workflow/script/configuration details used in +the semantic comparison below; snapshot archives preserve the complete source. + +## Every requirement and its disposition + +| Requirement | Evidence, solution, and verification | +| --- | --- | +| Read the issue and all comments; investigate the named main runs | Complete API snapshots in `github/`, named-run logs/job metadata in `ci-logs/`; correlate SHAs rather than treating old failures as current regressions. | +| Find all CI false positives, false negatives, warnings, and errors | Diagnostic index and causes below; reproduce missing/invalid/incomplete reports, classify write rejections, reject unexpected cancellations, and restrict Dependabot automation to its own PRs. | +| Compare the complete Rust, C#, and Python template trees and CI scripts | Three immutable archives, full file inventories with applicability classifications, semantic comparison, and all 16 best-practice decisions below. | +| Reuse all applicable practices in this single PR | Fixed runners, pinned actions, read permissions, safe writer concurrency, fresh merge checks, formatting, workflow/security lint, docs checks, secret scans, complete dependency audits, bounded inputs, terminal status gates, and local contributor commands. | +| Report the same issue in templates | Rust runner drift already reported as template #180; C# floating matrix reported as template #65 with reproduction, workaround, and a suggested regression check. Python template has fixed runner labels; no duplicate report created. | +| Download logs and compile issue data in the requested folder | This directory contains raw metadata, logs, snapshots, research, reproductions, and analysis; reusable collector can refresh it. | +| Deep analysis, timeline, root cause, alternatives, solution plans | Sections below distinguish observed failures, inherited fixes, reproduced false successes, and environmental/tool limitations. | +| Search online for facts and reusable components | Primary sources and selected components below; exact versions/SHAs are preserved and exercised locally. | +| Add default-off diagnostics when needed | `workflow_dispatch.verbose` enables full Rust backtraces and artifact/publication diagnostics; Python `--verbose` defaults off. Validation always identifies the offending artifact, expected SHA/tree, or actual Git rejection. | +| Report related project defects with reproductions and fixes | Reproduced the `doublets` memory contract defect with finite inputs and a 512 MiB limit; report URL/body preserved under `research/`. Existing `Whole` workaround remains in all Rust storage paths. | +| Apply each fix across the whole codebase | All workflows have runner/time/permission policies; NuGet audits enumerate main and experimental projects, Cargo audits enumerate every lockfile, Dependabot covers both sets, Python/report checks cover both languages/categories/address widths. | +| Regression tests before fixes; local checks and fresh CI | Baseline failure logs in `validation/`, meaningful artifact/schema/race/status/audit tests, all language tests, real eight-cell smoke run, workflow lint/security scans, and fresh run metadata keyed to implementation SHA. | +| Preserve history; update existing PR and finish ready | Commit atomic changes on the prepared branch, synchronize main, update title/body, inspect the final diff, check all latest-commit statuses, and mark PR 111 ready. | + +## Reconstructed sequence + +| UTC event | Consequence and source | +| --- | --- | +| Oct 4, 17:05–17:40 | PR 108 rewrites the Rust/C# harnesses to stable Rust edition 2024 and .NET 10. Old workflows still refer to a 2022 nightly and a removed `.sln`. | +| Oct 4, 17:53:53 | Rust run 37222262227 and C# run 37222262316 fail at `4f8d0c5`; old-toolchain parsing and MSB1009 are actual historical failures. | +| Oct 4, 18:21:28 | Commit `4d83c843` updates the language workflows and benchmark pipeline. Later passing runs demonstrate those historical failures are already fixed. | +| Oct 4, 18:32–18:52 | Full benchmarks at `b8c842ed` expose the Rust allocation contract mismatch; run 37224809082 has four Rust exit-101 failures and cancellation of other jobs. | +| Oct 4, 18:52:35 | `e965c93d` adds the `Whole` adapter, returning the complete allocation after growth. This PR preserves and verifies that fix. | +| Oct 4, 19:31 → Oct 5, 01:55 | Run 37228604862 tries 100 million links and reaches the 355-minute job budget. This is workload exhaustion, not evidence that a larger timeout fixes correctness. | +| Oct 5, 00:27–01:58 | PR 108 updates obsolete action runtimes, Markdown formatting, and documents 10-million-link/1-million-object practical limits. | +| Oct 5, 10:00:35 | PR 108 merges as `f61d583`; C# 37293771766 and Rust 37293771933 pass. The main benchmark run starts on this source. | +| Oct 5, 10:00–10:04 | Legacy C++ runs 37293772008 and 37294124568 fail on LLVM 13 packages for Noble. PR 109 bumps setup-clang v1 to v2 and merges as `d2ee41e`, but the compiler/repository mismatch remains. | +| Oct 5, 10:24:35–10:25 | Issue 110 is opened; the prepared PR 111 is created on `3b19ef1`. The issue's in-progress benchmark entry is a status snapshot, not a reported success or failure. | +| Oct 5, investigation | Archive logs/templates, reproduce false report success and upstream growth, implement regression checks and workflow changes, and run local validation before pushing. | +| Oct 5, 11:24:41 | First source revision `73c7cff` runs hosted CI: all three OS matrices, eight benchmark cells/report, dependency audit and workflow security pass. Quality fails on a documentation link whose evidence target had not yet been committed (`quality-37302748264.log:716`). | +| Oct 5, 11:25–11:26 | CodeFactor reports validator complexity and two B506 warnings. Codacy's public API supplies all 31 findings despite the GitHub check containing no annotations; browser snapshots and API JSON are preserved. | +| Oct 5, 11:49:43 | Revision `ffd5966` includes the archive. Rust, C#, dependency audits and benchmarks pass. Quality run 37305441174 fails on two B603 warnings; Codacy reports the same two locations and CodeFactor passes. | +| Oct 5, 11:58:24 | Revision `7d7f9bc` adds narrow explanations for the two fixed Git queries. Python 3.13.15 local checks pass, including all 55 tests; the fresh hosted quality, CodeFactor and Codacy checks pass. | +| Oct 5, 12:08:22 | Revision `0dba0f5` separates nested Git-output parsing after successful checks exposed two spurious unused-annotation warnings. A three-case Bandit probe reproduces the warning and verifies the workaround; confirmation and a code-fix suggestion are posted on existing upstream issue 1041. | +| Oct 5, 12:15–12:19 | Evidence revision `4311b79` passes all five maintained workflows and CodeFactor. Main benchmark run 37297329698 completes and publishes `4528bc4`, including both C# SQLite providers; the new default branch is merged without altering its results. Codacy temporarily posts ACTION_REQUIRED while its API reports analysis in progress and zero new issues. | +| Oct 5, final collection | An actual job-log download reproduces GitHub CLI's terminal-escape refusal: exit 1 and zero bytes. Adding its documented `--allow-escape-sequences` option returns exit 0 and 23,091 bytes. The collector uses the option for all raw job downloads and retries earlier affected files while retaining the original errors. | +| Oct 5, 12:27:38 | All analyzers succeed at `741dffc`, but Codacy's PR comparison against new main `4528bc4` fails in Diff after 60,008 ms and then Deltas; its check is ACTION_REQUIRED with no annotations. The 680-file evidence changeset also reproduces GitHub's HTTP 406 diff limit. Raw evidence is packaged without changing its bytes, and CI verifies every archived file's size/hash. | + +## Root causes and solution choices + +### 1. Phantom C++ build/release pipeline + +Run `37294124568.log:349` shows the apt 404. Lines 366–377 identify +`llvm-toolchain-noble-13` without a Release file and missing clang-tidy, +clang-format, LLVM, and lld 13 packages. The earlier run has the same mismatch +at lines 323 and 370–372. Bumping the setup action cannot make that repository +exist. [LLVM's package repository](https://apt.llvm.org/) describes the +maintained distribution/version combinations. + +The full repository tree contains only `cpp/conanfile.txt`, with no requirements, +no C++ source, no CMake project, tests, package metadata, or release artifact. +The inherited workflow would next invoke nonexistent CMake targets, combine +flags into one quoted argument, and download moving external release scripts. +An action-only repair would merely advance to another failure. + +Options: reconstruct a new C++ implementation/build/release system (a separate +feature with no issue requirement), or remove its unsupported automation and +record prerequisites. Implemented the latter: remove `cpp.yml`, retain the +placeholder manifest, add `cpp/README.md`, and add a policy regression guard. +No working implementation or benchmark comparison is removed. + +### 2. Partial, absent, stale, and invalid benchmark reports could pass + +The former report job permitted failed benchmark dependencies, downloaded into +the directory containing checked-in old results, and uploaded missing files as +a warning. `benchmark_report.load(empty)` returned an empty mapping and the +renderer could publish a successful missing-results report. Valid SQLite +baselines also concealed omitted Doublets variants. + +Reproduction: `validation/report-reproduction.log` records five failing +schema/empty-input assertions against the original script; +`validation/variant-reproduction.log` records a further false success with all +Doublets results removed. New artifact tests check missing/extra files, stale +source SHA, wrong table identity, different merge trees, and missing variants. + +Implemented: emit a single bounded matrix plan, require all benchmark jobs to +succeed, download to a fresh temporary directory, fail missing uploads, and +verify every expected file, table, variant, source commit, and measured tree. +Schema validation rejects duplicate variants, missing operations/baselines, +empty samples, nonfinite/nonpositive timings, and invalid metadata. Rendering +an empty directory fails. Both language reports go through the same validator. +Existing comparison statistics and chart/report hierarchy are preserved. + +### 3. Cancellation and publication races hid actual outcomes + +Workflow-level cancellation can interrupt a writer even if its job says not +to cancel. Separate workflows can race on main when groups include workflow +names. Blind push retries misclassify protection/authentication failures; +rebasing generated reports can also carry stale documents onto new source. +[GitHub concurrency documentation](https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-syntax) +confirms groups span workflows in a repository and do not promise FIFO order. + +Implemented: readers cancel at their own scope; main writers use one shared +job-level group with cancellation disabled. Publication is a separate privileged +job. Every attempt fetches main, refuses results if measured sources changed, +creates a fresh temporary worktree, copies validated measurements, and rebuilds +both READMEs/charts. Only non-fast-forward/fetch-first races retry (three finite +attempts); GH006/GH013, credentials, network, and other rejections fail with +their actual output. No forced push or history rewrite is used. + +`test_publish_benchmarks.py` creates a real bare origin and injects a concurrent +documentation commit immediately before the first push. It verifies two +attempts, regenerated sections, and preservation of both commits. A separate +test proves new benchmark source prevents publication. Terminal status tests +reject timeout/cancelled writers; only readers with proven supersession and an +enabled cancellation policy may be treated as expected churn. + +### 4. Auto-merge warnings were self-inflicted + +`37295743786.log:191` and earlier runs warn about human PR authors; the workflow +ran Dependabot-specific parsing on every PR. `37294036931.log:198` warns that +the action cannot parse a v1→v2 action title. Human PRs and major updates should +be ordinary skips, not warnings or accidental merges. + +Implemented: gate the job on the Dependabot PR author, obtain update types from +the official [fetch-metadata action](https://github.com/dependabot/fetch-metadata), +and enable GitHub auto-merge only for patch/minor updates. Pin its Node 24 v3 +revision. The privileged metadata workflow checks out and executes no PR code. +The existing Dependabot token fallback is retained. Its writer group matches +benchmark publication. No title-regex parser remains. + +Fresh PR logs still run the old auto-merge action from the default branch: +`37306375540.log:189` records its human-author warning. `pull_request_target` +intentionally loads the base-branch workflow, so a PR cannot replace privileged +automation before its changes merge. The new metadata-only job is checked by +workflow/security policy checks; human-author skips take effect after merging. + +### 5. Missing local/CI policy and dependency coverage + +Before this PR there was no actionlint/ShellCheck/zizmor gate, Python formatting +or type check, C# formatting gate, required document/link check, secret scan, or +scheduled complete dependency audit. Floating runner labels and actions allowed +unreviewed changes; old logs also contain already-resolved Node 20 deprecations. + +Implemented: workflow security/policy tests, pinned runners and action SHAs, +read-only defaults, explicit writer permissions, meaningful time budgets, +Ruff/mypy, Rust fmt/strict Clippy, C# whitespace formatting and warning-as-error +builds, Markdown/local-link and source/document line limits, secretlint, +pre-commit configuration, and `CONTRIBUTING.md` with matching commands. + +Audits cover every Cargo.lock and every main/experimental C# project, including +transitive dependencies, plus runtime/CI Python dependencies. Cargo warnings +are denied; NuGet JSON findings explicitly fail because listing advisories is +not itself a failing process exit. Tests cover direct/transitive audit handling +and incomplete audit output. Dependabot covers these locations with a seven-day +cooldown. Current local audits found no vulnerabilities. + +Upstream reports: [C# template #65](https://github.com/link-foundation/csharp-ai-driven-development-pipeline-template/issues/65), +[Rust template #180 (existing)](https://github.com/link-foundation/rust-ai-driven-development-pipeline-template/issues/180), +and [doublets #68](https://github.com/linksplatform/doublets-rs/issues/68). + +### 6. Historical library growth panic and oversized workloads + +`37224809082.log:3229` records an index of 1,040,384 against that exact slice +length; line 5777 shows `NotExists(1040384)`. `doublets::resize_mem` treats the +slice returned by `platform-mem::grow_filled` as the whole allocation; that +backend returns only the added portion. Current upstream main retains this +call, so the contract defect remains reportable despite the repository's fix. + +The existing finite `unit_store_growth` probe, capped to 512 MiB virtual memory, +reproduces a panic at link 1,040,384 (`validation/unit-store-bare.log:17–18`). +The existing adapter succeeds through 2,097,153 links and multiple growths +(`unit-store-whole.log`). An upstream report includes the runnable experiment, +workaround, and suggested `grow_filled(...)?; Ok(allocated_mut())` correction. +No second workaround is introduced here. Matrix inputs now enforce the +documented maximum sizes and at most 256 jobs before starting costly work. + +### 7. External and historical warnings + +The diagnostic index distinguishes current failures from cancellation of +superseded runs and already-fixed obsolete actions/toolchains. C# `.slnx` and +stable Rust are verified locally; reverting to old scaffolding would regress +them. Dependabot's service-owned `rehash` warning in `37293778052.log:63` refers +to its bundled CA certificate file containing multiple certificates. That run +completed successfully; it is not a project build or dependency finding. Its +container initialization cannot be edited in this repository. Preserve the +evidence rather than changing trust stores or suppressing unrelated diagnostics. + +## Template comparison and all best-practice decisions + +The reviewed [best-practice document](https://github.com/link-assistant/hive-mind/blob/main/docs/CI-CD-BEST-PRACTICES.md) +is preserved in `research/CI-CD-BEST-PRACTICES.md`. These are concrete decisions, +not a claim that unrelated application/release scaffolding was copied. + +| Principle | Applied behavior or justified applicability | +| --- | --- | +| 1. Relevant file changes | Workflow path sets cover code, scripts, manifests, own workflows, and the shared merge action; manual runs remain possible. Docs/Python have dedicated validation. Fixed Ubuntu 24.04/macOS 15/Windows 2025 environments prevent runner drift. | +| 2. File size limits | Check maintained source across languages and experiments at 1,500 lines and required documents at 2,500; exclude immutable downloaded evidence/build outputs. | +| 3. Automated formatting | Rust fmt, C# whitespace verification, Python Ruff formatting, Markdown lint, and optional local hooks. | +| 4. Static analysis/lints | Clippy `-D warnings`, C# `-warnaserror`, Ruff/mypy, workflow/security policy checks; no continue-on-error. | +| 5. Fast fail ordering | Formatting precedes language build/tests; script tests/input validation precede the matrix; workflow lint precedes Python tests. | +| 6. Changesets | No distributed package/release workflow exists; application and experiment package versions are local. Contributor guidance records requirements for future publishing. | +| 7. Actual merge validation | Shared composite fetches/merges current PR base. The benchmark plan freezes that validated base commit so every matrix job reconstructs the same tree even if main advances during the run. | +| 8. Pre-commit | Configured Ruff, rustfmt, C# format hooks; local commands match CI. | +| 9. Release automation | No NuGet/PyPI/crates release exists. Remove the fictitious C++/NuGet path instead of adding registry secrets or a version bump without a distributable artifact. | +| 10. Concurrency | Readers cancel; main writers share one job-level non-cancelling group. Regenerate on proven branch races; fail GH006/GH013 without retry. Fresh-worktree retries preserve history. Superseded pending reports are intentionally replaceable; FIFO/release-queue guarantees are not required. | +| 11. Secret detection | Scan maintained tracked source with versioned secretlint rules; exclude immutable third-party evidence and generated artifacts. | +| 12. Documentation | Lint both READMEs and contributor/C++ prerequisites; enforce required sections and local links. Docs changes trigger quality checks. | +| 13. Native image architecture | No published runtime image; actionlint uses a native-compatible digest-pinned validation container. No emulated/cross-architecture release matrix applies. | +| 14. Workflow lint/security | actionlint/ShellCheck plus regular/pedantic zizmor, SHA pinning policy. Narrow self-repository exceptions document unsupported new self syntax in actionlint 1.7.12. Privileged metadata exception documents its no-checkout boundary. | +| 15. Complete dependency audit | Weekly and relevant-change audits of every Rust lockfile, every C# project including transitive packages, and Python runtime/CI tools. Cargo warning and NuGet JSON false-success semantics explicitly fail. | +| 16. Publisher preflight | Registry credential/write/OIDC probes are inapplicable: no package or image publishing exists. Benchmark publication requires complete validated artifacts, commit/tree consistency, and unchanged measured sources before writing, and preserves actual credential/ruleset errors. No speculative login or no-op push is presented as proof of write access. | + + +Rust template's security/workflow scripts supplied audit-warning and terminal +status patterns. C# template supplied fixed Ubuntu, formatting, local layout, +and strict-build guidance, but its macOS/Windows matrix still floats. Python +template supplied Ruff/mypy, transitive audits, policy-aware cancellation and +fresh writer regeneration patterns. Its package versioning, PyPI OIDC, Docker +publishing, docs-site deployment, and application scaffolding are recorded as +inapplicable because this repository has no such delivery targets. CodeQL or +network-wide external link crawling are optional additional services; the +required workflow security audit, dependency graphs, Markdown and local links +are validated without introducing unavailable service permissions. + +## Online facts and existing components + +- [LLVM apt repositories](https://apt.llvm.org/): determine which Ubuntu/LLVM + combinations actually exist; do not infer availability from an action version. +- [GitHub workflow/concurrency syntax](https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-syntax): + shared groups, cancellation, conditions, runner/path behavior, and pending-run + replacement limits. Publication needs fresh preflight even with concurrency. +- [GitHub same-repository actions announcement](https://github.blog/changelog/2026-07-30-reference-same-repository-actions-with-self-repository-syntax/): + newer self syntax exists; `validation/actionlint-after.log` from the draft + showed current actionlint rejects it, so conventional checkout/local actions + are used with a specific documented exception. +- [actionlint](https://github.com/rhysd/actionlint) and + [zizmor](https://docs.zizmor.sh/): selected existing workflow/ShellCheck and + security analyzers; versions/digests pinned and checked locally. +- [Ruff](https://docs.astral.sh/ruff/), [mypy](https://mypy.readthedocs.io/), + [secretlint](https://github.com/secretlint/secretlint): selected maintained + format/lint/type/secret components instead of inventing replacements. +- [cargo-audit](https://github.com/rustsec/rustsec/tree/main/cargo-audit), + [pip-audit](https://github.com/pypa/pip-audit), and + [NuGet auditing](https://learn.microsoft.com/en-us/nuget/concepts/auditing-packages): + reuse advisory databases and include transitive dependencies; enforce findings + in process outcomes and avoid a direct-only audit false negative. +- [dotnet package list JSON](https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-package-list) + and [dotnet test](https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-test): + use machine-readable graph reports and the configured Microsoft.Testing.Platform + runner. Run tests from `csharp/` so its `global.json` selects that runner. +- [Dependabot metadata](https://github.com/dependabot/fetch-metadata) and + [options](https://docs.github.com/en/code-security/reference/supply-chain-security/dependabot-options-reference): + structured update types and explicit cooldowns avoid custom title parsing. +- [Conan 2 profiles](https://docs.conan.io/2/reference/config_files/profiles.html): + confirms legacy C++ setup would need more than a Clang action bump if a real + C++ implementation is introduced later. + +## Validation and remaining practical limits + +The 55-test local Python suite includes schema/artifact, actual Git race/source-change, +workflow policy, audit JSON, terminal status, report statistics, and chart tests. +Rust formatting, locked strict Clippy, locked Release tests, C# formatting, +warning-free Release build, and all 37 C# tests pass. The eight-cell real smoke +run covers Rust/C#, links/objects, 32/64-bit addresses at size 1,000, one measured +repetition; every complete variant set and operation validates. These are +correctness smoke measurements, not replacement published performance results. + +Dependency audit logs cover four Rust lockfiles, all six C# projects, and Python +runtime/CI tools. Workflow lint/security, Python type/format checks, document +lint/links, and source secret scans are recorded under `validation/`. +Fresh hosted-run evidence is collected after pushing and must match the latest +implementation commit. Old cancelled runs remain evidence, not a claim that +old commits now pass. Main-size performance measurements still have an explicit +355-minute per-job budget; oversized inputs are rejected rather than increasing +that limit. No new feature, registry release, or default-branch merge is performed. + +## Default-branch changes during the investigation + +PR 100 merged System.Data.SQLite into main while this work was running. The +branch merges that history, preserves its C# provider smoke check, and requires +the additional provider variants in every current C# artifact. The original +main benchmark run 37293771868 subsequently published commit `669369c` from +`f61d583` measurements after the source had advanced to `2c43a22`. Its checked-in +C# tables still have six/ten variants rather than the current eight/twelve. +This is observed evidence of the stale-source publication flaw, in addition +to the reproducing Git tests. The new publisher refuses that source mismatch. +Main-size measurements for the new source are a separate run; old results +are preserved as historical data rather than relabelled as new measurements. + +Formatting coverage was also checked across all experiment projects. One old +Rust experiment needed rustfmt; its scenarios are unchanged. Python formatting +now covers all experiment scripts, including the inherited provider checker. +All four experimental C# projects pass whitespace verification. The expanded +workflow paths and formatter loops enforce these checks on subsequent changes. + +## Findings from implementation CI and external analysis + +The first hosted quality failure is an archive-ordering issue, not a stale test +result: `CONTRIBUTING.md` links to this analysis, but its first pushed commit did +not yet include the evidence directory. The link check correctly failed. The +archive is included before rerunning the same check; no link validation is relaxed. + +CodeFactor's three annotations and Codacy's complete 31 findings are retained +under `github/` and `research/`. Each finding was traced to its source: + +- The report validator's complexity is reduced by separating metadata, variants + and individual measurements; existing schema regression behavior remains covered. +- B506 on `yaml.BaseLoader` is a false positive. [PyYAML's loader contract](https://pyyaml.org/wiki/PyYAMLDocumentation) + supports only strings, lists and dictionaries, while the preserved Bandit plugin + only recognizes SafeLoader/CSafeLoader. A harmless object-tag probe reproduces + B506 with Bandit 1.9.4. Both workflow readers now share `yaml.safe_load` with + explicit `on` normalization. Tests prevent losing privileged-event detection + or cancellation semantics. [Bandit #1477](https://github.com/PyCQA/bandit/issues/1477) reports the reproduction, workaround and suggested fix. +- Pylint's `isinstance` advice would accept JSON booleans if applied mechanically, + because `bool` subclasses `int`. Updated checks use `isinstance` and explicitly + reject booleans; the existing bounded-matrix regression still rejects `[true]`. +- B404/B603/B607 concern necessary CI subprocesses. Each invocation was reviewed: + fixed tools/options, trusted tracked paths or CI metadata as separate arguments, + no shell. Tools are now resolved to absolute paths with a missing-tool error. + Remaining generic B404/B603 warnings have per-call, rule-specific explanations; + no global subprocess/security exclusion is introduced. Local Bandit is clean. +- Codacy's MD043 expects `[None]` for the new documents: an empty required-heading + policy is unsuitable for different document structures. Shared Markdown config + disables that generic structure rule; the repository policy checker enforces + actual required sections per document. Codacy's wrapper gives UI patterns + precedence over the config file, so the two affected documents also carry + a specific MD043 directive. Its published default disables MD043 with an + empty headings array; this is repository/service configuration, not an upstream + Markdown parser defect. Other Markdown rules remain enabled. +- Downloaded evidence is excluded from Codacy with its documented `exclude_paths` + setting, matching local maintained-source scans. Source, tests, experiments, + workflows and maintained documentation remain analyzed. + +Two additional policy regressions initially fail in +`validation/yaml-policy-reproduction.log`: quoted `continue-on-error: false` +must not be treated as enabled, and a real YAML boolean cancellation policy must +allow a proven superseded reader. Both now pass. Safe-loader tests additionally +reject object tags and non-mapping workflow documents. `manifest.json` records +SHA-256/size for each collected file; `diagnostic-index.json` retains diagnostic +paths and original line numbers, generated in chunks of at most 1,500 lines. + +## Final verification and review + +All five maintained workflows pass on final implementation revision +`6eff47bffcbf9300f4a80e7dec5da45db0eb67b1`: quality (including all 61 Python +tests and complete archive verification), Rust and C# on all three operating +systems, dependency audit, and all eight benchmark cells plus the complete +report. Codacy and CodeFactor both post SUCCESS at this exact head. GitHub +reports the PR merge state as CLEAN and the PR is ready for review. Main-only +publication is intentionally skipped on the pull request. +`github/packaged-6eff-*` preserves exact check conclusions, run timestamps/SHAs, +the successful full GitHub diff and PR state. Earlier `implementation-final-*` +records remain historical evidence for `0dba0f5`. The final evidence-only +revision is checked again at its actual pushed head before completion. + +Codacy's successful PR log, `research/codacy-packaged-6eff-pr-logs.json`, records +Diff completing in 1,413 ms and Deltas in 424 ms, compared with the prior +60,008 ms Diff error. Its new-issues response is empty. This confirms that +packaging the same raw data resolves the comparison failure without changing +quality gates or the underlying benchmark implementation. + +The subsequent main result commit `4528bc4` is merged as `9505fbc`. Its 20 +reports are preserved separately in `validation/main-result-snapshot-4528bc4`; +schema validation passes and the C# reports retain all 8 link / 12 object +variants. The original historical snapshot is retained. README formatting, +local links, all 55 Python tests and the warning-free security scan pass again. + +Raw job logs may contain ANSI terminal controls. GitHub CLI refuses to emit +these without its explicit `--allow-escape-sequences` option, even when stdout +is redirected. `validation/job-log-download-probe.json` records the exact +before/after command outcomes, and `research/gh-api-help.txt` documents the +option. The collector now applies it and recovers previously affected jobs; +the original `.error.txt` files remain evidence alongside successful `.log` +downloads. Two cancelled historical jobs have no available log, with their +actual `log not found` responses preserved rather than claiming recovery. + +The remaining B603 findings in `quality-37305441174.log:717–771` identify +`experiments/ci/run_smoke.py:19` and `scripts/check_pipeline_status.py:39`. +Both invoke resolved Git executables with fixed read-only commands and separate +arguments. Per-call B603 explanations address these findings without changing +the commands or disabling the rule elsewhere. Reproduction on Python 3.13.15 +and 3.14.7 gives the same two findings: the earlier local result was stale, +not an analyzer version or recursive-scan defect. `python313-final.log` records +the passing combined lint, format, type, security, policy and 55-test checks. + +The passing `37306378854.log:722–723` scan then exposed two false unused-nosec +warnings: Bandit visits both the subprocess and its chained `.strip()`/`.split()` +call, applying the same line annotation to both. The correct B603 finding is +suppressed, but the outer call emits a warning. The three-case +`experiments/ci/bandit_nosec_probe.py` verifies the original finding, the spurious +warning, and the warning-free separate-assignment workaround. The two production +queries now separate output parsing; `python313-warning-cleanup.log` passes +without scanner warnings. The existing [Bandit 1041 report](https://github.com/PyCQA/bandit/issues/1041#issuecomment-5994134386) +has the current-version reproduction, workaround, and a proposed per-file +aggregation fix, avoiding a duplicate issue. + +`validation/main-result-snapshot` preserves all 20 historical checked-in +measurements at the merged default branch. `validation/hosted-smoke-results` +preserves all eight real hosted artifacts; `hosted-artifact-verification.log` +validates their exact source SHA and common tree. The measured PR merge commit +`9edb881` has parents `669369c` (main) and `7d7f9bc` (PR head), recorded in +`github/implementation-measured-merge.json`. This distinguishes GitHub's synthetic +measured merge from the PR-head SHA stored in workflow run metadata. + +GitHub's complete PR-diff endpoint initially returns HTTP 406 above 300 changed +files because the individually tracked evidence exceeds that limit. The failure is +preserved in `github/pr-final-diff.error.txt`; initial review uses paginated +`github/pr-files.json` and `github/pr-final-source.diff`, generated from the +merged default branch with the evidence directory excluded. The source diff +was read in bounded chunks. The removed C++ automation had no build target; +working Rust/C# comparisons, provider checks, historical reports and existing +memory-growth workarounds remain present. + +The final check reveals a second consequence of the oversized evidence diff. +`research/codacy-741-commit-logs.json` records all analyzer steps as successful, +and `codacy-741-issues.json` reports zero findings. The separate PR log +`codacy-741-pr-logs.json` records Diff failing after exactly 60,008 ms, followed +by Deltas failing. The backend supplies no exception text, so the exact internal +failure is unknown; associating it with the oversized comparison is an inference +supported by the concurrent HTTP 406 reproduction and the successful commit +analysis. [GitHub's documented limits](https://docs.github.com/en/repositories/creating-and-managing-repositories/repository-limits) +include 300 files, 20,000 loaded lines and 1 MB of raw diff data. + +Options: omit collected evidence, change service settings, or preserve it in a +compressed archive that keeps the actual source diff reviewable. The chosen +solution packages all original directories with the standard-library tar/gzip +components, retains every original byte/path, ignores only extracted copies, +and adds a hosted integrity check. The verifier streams every archived file, +checks its original SHA-256 and size, and rejects missing, unexpected or duplicate +members. `manifest.json` also records the compressed archive's hash. This reduces +the PR's final file count without rewriting history or changing analyzer gates. + +The package regression suite has six cases: original binary/text round-trip, +same-length byte corruption, missing files, unexpected files, duplicate files, +and an unextracted checkout. The latter fails before the guard is added +(`validation/packaging-unextracted-reproduction.log`); packaging now checks all +five raw directories before opening the archive, preserving the existing bundle +on an incomplete checkout. All 61 Python tests pass locally. + +The first packaged collection contains 666 original raw files (12,854,036 compressed +bytes). Verification succeeds with only the tracked archive and manifest, +matching a fresh CI checkout. The staged PR diff contains 52 files and 13,847 +lines / 754,444 bytes, within the documented review limits. All original +raw-member hashes pass; the readable diagnostic index uses 500-character +excerpts, with the earlier full index and unabridged logs preserved in the +archive. Final service checks are repeated at the pushed revision. diff --git a/dev/log/issues/110/pulls/111/PLAN.md b/dev/log/issues/110/pulls/111/PLAN.md new file mode 100644 index 0000000..b3ff8bb --- /dev/null +++ b/dev/log/issues/110/pulls/111/PLAN.md @@ -0,0 +1,43 @@ +# Issue 110 / PR 111 execution plan + +Evidence is collected under this directory. Commands with substantial output write +logs here; experiments and reusable regression checks live under `experiments/ci`. + +- [x] Read the complete issue, all three PR comment types, repository instructions, + contributing guidance, recent related PRs, and the current branch/default branch. +- [x] Preserve issue/PR metadata, complete repository and template file trees, + recent CI runs with timestamps and SHAs, job details, and downloadable logs. +- [x] Read the referenced CI/CD best practices and compare every workflow and + CI-related script/configuration against the Rust, C#, and Python templates. +- [x] Reconstruct the event timeline and enumerate every issue requirement. +- [x] Read logs in chunks of at most 1,500 lines, identify failures, warnings, + false positives/negatives, and correlate them with the exact source revision. +- [x] Research primary documentation and existing components; document options, + root causes, reproductions, and a concrete solution for each requirement. +- [x] Add minimal failing regression checks before changing affected behavior. +- [x] Fix all affected code paths; retain default-off verbose diagnostics when + evidence is insufficient. Bound resource-intensive probes. +- [x] Report reproduced upstream/template defects with examples, workarounds, + and suggested code changes, when applicable and possible. +- [x] Run local CI checks and all applicable test suites, preserving their output. +- [x] Commit useful atomic changes and push only `issue-110-e1f96d946132`. +- [x] Merge the current default branch if needed; review the complete PR diff for + unintended changes and verify a clean working tree. +- [x] Replace the placeholder PR title/body with the final solution, reproduction, + validation, evidence links, and any remaining limits; mark PR 111 ready. +- [x] Verify fresh CI runs match the latest implementation commit; download and + analyze every unsuccessful run, fix causes, and wait for checks to finish. + +All implementation checks pass on `6eff47bffcbf9300f4a80e7dec5da45db0eb67b1`; +Codacy and CodeFactor both pass, GitHub reports CLEAN, and PR 111 is ready. +The final archive contains the successful implementation logs and the original +failures, with every raw member verified by SHA-256 and size. The final +evidence-only commit is checked again at its own pushed head before completion. + +## Scope assumptions + +The requested template comparison concerns CI/CD behavior and supporting files; +language-specific application scaffolding is recorded in the complete inventories +and classified for applicability rather than copied into this benchmark repository. +Benchmark workloads must remain finite. CI fixes must preserve all languages and +the existing benchmark comparisons. diff --git a/dev/log/issues/110/pulls/111/README.md b/dev/log/issues/110/pulls/111/README.md new file mode 100644 index 0000000..a571fdc --- /dev/null +++ b/dev/log/issues/110/pulls/111/README.md @@ -0,0 +1,34 @@ +# Issue 110 / PR 111 evidence + +[Analysis](ANALYSIS.md) lists every requirement, reconstructs the timeline, +identifies root causes and compares all three templates and all 16 principles. +[Solution plans](SOLUTION_PLANS.md) describe alternatives and the implemented +choices. [Execution plan](PLAN.md) records the completed work. + +The complete raw collection is in [raw-evidence.tar.gz](raw-evidence.tar.gz). +It contains the original `ci-logs`, `github`, `research`, `templates` and +`validation` directories. Every original path cited in the analysis is retained +inside the archive. [manifest.json](manifest.json) records file sizes and SHA-256 +hashes; [diagnostic-index.json](diagnostic-index.json) records original log paths +and line numbers with excerpts. Complete lines remain in the archived logs. + +From the repository root, extract and verify the evidence: + +```sh +tar -xzf dev/log/issues/110/pulls/111/raw-evidence.tar.gz \ + -C dev/log/issues/110/pulls/111 +python experiments/ci/package_evidence.py dev/log/issues/110/pulls/111 --verify +``` + +Extracted directories are ignored by Git. Keeping their original bytes in a +compressed archive avoids GitHub's diff limits and the observed Codacy PR-diff +timeout while preserving a readable source diff and all investigation data. + +To refresh the collection, run these commands in order: + +```sh +python experiments/ci/collect_evidence.py +python experiments/ci/package_evidence.py dev/log/issues/110/pulls/111 +python experiments/ci/index_evidence.py dev/log/issues/110/pulls/111 +python experiments/ci/package_evidence.py dev/log/issues/110/pulls/111 --verify +``` diff --git a/dev/log/issues/110/pulls/111/SOLUTION_PLANS.md b/dev/log/issues/110/pulls/111/SOLUTION_PLANS.md new file mode 100644 index 0000000..b1b2bba --- /dev/null +++ b/dev/log/issues/110/pulls/111/SOLUTION_PLANS.md @@ -0,0 +1,35 @@ +# Requirement-by-requirement solution choices and plans + +See [the analysis](ANALYSIS.md) for the timeline, exact error lines, reproductions, +primary references and all 16 best-practice decisions. This table records the +alternatives considered and the implemented sequence for each issue requirement. + +| Requirement / problem | Possible approaches | Chosen solution plan and completion evidence | +| --- | --- | --- | +| Understand the five named main runs and every comment | Inspect status badges alone; or preserve source-correlated metadata and raw logs. | Fetch issue and all PR comment/review endpoints with pagination; collect runs, timestamps, SHAs, jobs and logs; inspect bounded chunks; classify historical vs current outcomes. `github/`, `ci-logs/` and diagnostic indexes preserve the evidence. | +| Download all related logs into the requested directory | Link to expiring hosted logs; or preserve reproducible local snapshots. | Save complete downloadable runs since October 3, available job logs for unfinished runs, related PR 108 authenticated Gist sessions, local probes and analyzer API/browser evidence. Add reusable collector and SHA-256 manifest/index generator. | +| Remove C++ build errors | Change Clang/Ubuntu versions; create a complete C++ implementation; or remove unsupported automation. | Verify LLVM repository mismatch and absent CMake/source/release metadata; retain the placeholder; remove its fictitious build/release workflow; document actual prerequisites; reject future phantom build configuration. No implemented language is removed. | +| Prevent benchmark false successes | Require job success alone; or validate the complete artifact contract as well. | Write failing empty/schema/variant tests; bound inputs; plan one matrix; pin one merge base; fail absent uploads; download fresh artifacts; verify all filenames, variants, operations, SHA and merge tree before reporting or publishing. Eight real cells and regression tests exercise both languages/categories/widths. | +| Prevent stale or racing publication | Blind rebase/retry; serialize alone; or serialize plus revalidate/regenerate. | Reproduce a real bare-Git concurrent write and changed-source rejection; use one non-cancelling main writer group; fetch main and reject changed measured sources; create a fresh worktree and regenerate on each finite retry; retry only proven branch races and retain actual protection/authentication errors. | +| Make failure/cancellation status truthful | Treat every cancellation as failure; accept all cancellations; or verify the configured reason. | Add terminal gates to every maintained test/audit workflow; fail failures, unknown outcomes and current-run cancellation; accept only superseded readers with an enabled cancellation policy and a changed remote head. Test both string and parsed boolean policies. | +| Eliminate Dependabot warnings on ordinary PRs and major updates | Relax the old title parser; or use official metadata and event gating. | Gate on the Dependabot author; use pinned Node 24 fetch-metadata v3; only enable patch/minor auto-merge; share writer serialization; execute no PR source in the privileged metadata workflow. Historical CA-bundle rehash warnings are service-owned and documented separately. | +| Compare every file in all three templates | Copy scaffolding blindly; or inventory every file and apply relevant CI semantics. | Preserve full trees and exact revisions; classify every tracked file; review workflows/scripts/configuration; map every best-practice principle to an implementation or concrete delivery-target limitation. Preserve current stable Rust/.NET 10 and System.Data.SQLite support. | +| Reuse applicable quality/security practices everywhere | Depend on external analyzers only; or enforce matching local and hosted checks. | Pin action SHAs and runners; restrict permissions; set time budgets; validate current merge trees; add Ruff/mypy/Bandit, actionlint/ShellCheck/zizmor, all-crate Rust/C# formatting, strict builds, Markdown/per-document sections/links, line limits, secretlint and optional pre-commit hooks. Contributor commands match CI. | +| Complete dependency coverage | Audit direct main-project dependencies only; or enumerate complete graphs. | Audit both Python requirement sets, all four Rust lockfiles with warning failures, and all six main/experimental NuGet projects including transitive advisories; parse advisory JSON into failing outcomes; test incomplete/direct/transitive semantics; configure complete Dependabot directories and cooldowns. Local and first hosted audits are clean. | +| Find actual causes and report upstream/template defects | Add another local workaround; report speculative symptoms; or reproduce and identify the existing fix/contract. | Bound memory-growth probes to finite inputs/512 MiB; preserve the already-working Whole adapter; report doublets #68 with contract correction. Report C# template #65 and reuse Rust template #180 for floating runners. Reproduce/report Bandit #1477 for BaseLoader. Python template does not share those runner failures. | +| Resolve newly observed external-analysis findings | Globally disable scanners; or examine each finding and retain narrowly documented checks. | Save all annotations and public API results; split the complex validator; use safe YAML loading with event/policy tests; retain boolean rejection with explicit isinstance checks; resolve executable paths; document reviewed shell-free calls with rule-specific comments; correct per-document heading policy and exclude immutable raw evidence only. | +| Preserve complete evidence while keeping the PR analyzable | Omit logs, relax quality gates, or compress immutable data. | Reproduce HTTP 406 and Codacy's 60,008 ms PR-diff failure; preserve successful analyzer logs and zero-issue results; package original raw directories with their paths intact; retain readable analysis/indexes; verify every member's hash/size in local and hosted CI, rejecting incomplete or altered archives. | +| Add diagnostics when evidence is insufficient | Permanently enable verbose output; or make targeted tracing opt-in. | Keep artifact/publication verbose flags and full Rust backtraces off by default; include actionable artifact/SHA/tree/Git rejection details in normal failures; preserve complete logs and probe output. The known correctness problems have reproductions; service initialization warnings have documented ownership limits. | +| Finish everything in PR 111 without rewriting history | Work on main or force-push; or preserve atomic commits and the prepared PR. | Commit source steps, merge current main, commit evidence, push only the prepared branch, update title/body, review the PR diff, inspect every latest-head check and failed log, then mark ready. No package version/release trigger applies because no distributable registry/image target exists. | + +The final review also reproduces Bandit's nested-call unused-annotation warning, +uses separate assignments to retain the exact security check without warnings, +and adds current-version evidence and a fix suggestion to existing Bandit #1041. + +Hosted implementation checks are preserved separately from the original failing +runs. Final branch checks must be inspected at the actual pushed head; a passing +older source revision is never used as proof that a newer revision passes. + +Packaging restores the complete GitHub diff and Codacy SUCCESS at `6eff47b`: its +Diff step drops from the observed 60,008 ms failure to a 1,413 ms success. +The quality workflow verifies all archived bytes and six integrity regressions. diff --git a/dev/log/issues/110/pulls/111/collection.log b/dev/log/issues/110/pulls/111/collection.log new file mode 100644 index 0000000..00bef80 --- /dev/null +++ b/dev/log/issues/110/pulls/111/collection.log @@ -0,0 +1,218 @@ +github/issue-comments.json: exit 0, 4 bytes +github/pr-comments.json: exit 0, 4 bytes +github/issue-110.json: exit 0, 3736 bytes +github/pr-111.json: exit 0, 2229 bytes +github/pr-review-comments.json: exit 0, 4 bytes +github/pr-reviews.json: exit 0, 4 bytes +github/recent-pulls.json: exit 0, 505663 bytes +github/repository.json: exit 0, 8241 bytes +github/branch-runs.json: exit 0, 189 bytes +github/pr.diff: exit 0, 340 bytes +github/recent-runs.json: exit 0, 1014793 bytes +ci-logs/37222262227.json: exit 0, 14778 bytes +ci-logs/37216883117.json: exit 0, 14713 bytes +ci-logs/37222260811.json: exit 0, 14794 bytes +ci-logs/37222262316.json: exit 0, 14769 bytes +ci-logs/37216883117-jobs.json: exit 0, 2049 bytes +ci-logs/37222262227-jobs.json: exit 0, 12606 bytes +ci-logs/37222260811-jobs.json: exit 0, 2049 bytes +ci-logs/37222262316-jobs.json: exit 0, 11146 bytes +ci-logs/37222260811.log: exit 0, 36639 bytes +ci-logs/37216883117.log: exit 0, 36637 bytes +ci-logs/37222262316.log: exit 0, 90342 bytes +ci-logs/37222262227.log: exit 0, 215205 bytes +ci-logs/37224471966.json: exit 0, 14595 bytes +ci-logs/37224473358.json: exit 0, 14579 bytes +ci-logs/37224473401.json: exit 0, 14590 bytes +ci-logs/37224473429.json: exit 0, 14576 bytes +ci-logs/37224471966-jobs.json: exit 0, 2049 bytes +ci-logs/37224473358-jobs.json: exit 0, 8056 bytes +ci-logs/37224473429-jobs.json: exit 0, 7138 bytes +ci-logs/37224473401-jobs.json: exit 0, 29370 bytes +ci-logs/37224471966.log: exit 0, 36464 bytes +ci-logs/37224473429.log: exit 0, 82860 bytes +ci-logs/37224473358.log: exit 0, 220694 bytes +ci-logs/37224809082.json: exit 0, 14503 bytes +ci-logs/37224473401.log: exit 0, 629405 bytes +ci-logs/37224810674.json: exit 0, 14555 bytes +ci-logs/37224812564.json: exit 0, 14539 bytes +ci-logs/37224812655.json: exit 0, 14550 bytes +ci-logs/37224810674-jobs.json: exit 0, 2049 bytes +ci-logs/37224812564-jobs.json: exit 0, 8056 bytes +ci-logs/37224809082-jobs.json: exit 0, 64267 bytes +ci-logs/37224812655-jobs.json: exit 0, 29370 bytes +ci-logs/37224810674.log: exit 0, 36722 bytes +ci-logs/37224812564.log: exit 0, 170949 bytes +ci-logs/37224812701.json: exit 0, 14536 bytes +ci-logs/37226110636.json: exit 0, 14908 bytes +ci-logs/37224812655.log: exit 0, 575916 bytes +ci-logs/37224812701-jobs.json: exit 0, 7138 bytes +ci-logs/37226112158.json: exit 0, 14974 bytes +ci-logs/37224809082.log: exit 1, 1161883 bytes +ci-logs/37226110636-jobs.json: exit 0, 65932 bytes +ci-logs/37226112158-jobs.json: exit 0, 2049 bytes +ci-logs/37224812701.log: exit 0, 82856 bytes +ci-logs/37226112765.json: exit 0, 14955 bytes +ci-logs/37226112826.json: exit 0, 14958 bytes +ci-logs/37226112765-jobs.json: exit 0, 7138 bytes +ci-logs/37226112158.log: exit 0, 36637 bytes +ci-logs/37226112826-jobs.json: exit 0, 8056 bytes +ci-logs/37226112834.json: exit 0, 14969 bytes +ci-logs/37226110636.log: exit 0, 1135122 bytes +ci-logs/37226112765.log: exit 0, 82864 bytes +ci-logs/37228600749.json: exit 0, 14646 bytes +ci-logs/37226112834-jobs.json: exit 0, 29370 bytes +ci-logs/37228602158.json: exit 0, 14641 bytes +ci-logs/37226112826.log: exit 0, 171783 bytes +ci-logs/37228600749-jobs.json: exit 0, 2049 bytes +ci-logs/37228602183.json: exit 0, 14627 bytes +ci-logs/37228602158-jobs.json: exit 0, 29370 bytes +ci-logs/37228602183-jobs.json: exit 0, 7138 bytes +ci-logs/37226112834.log: exit 0, 576170 bytes +ci-logs/37228600749.log: exit 0, 36808 bytes +ci-logs/37228602189.json: exit 0, 14630 bytes +ci-logs/37228604862.json: exit 0, 14555 bytes +ci-logs/37228602183.log: exit 0, 82849 bytes +ci-logs/37228602158.log: exit 0, 575712 bytes +ci-logs/37228602189-jobs.json: exit 0, 8056 bytes +ci-logs/37228604862-jobs.json: exit 0, 17231 bytes +ci-logs/37247423335.json: exit 0, 14606 bytes +ci-logs/37247424781.json: exit 0, 14590 bytes +ci-logs/37247423335-jobs.json: exit 0, 2049 bytes +ci-logs/37247424781-jobs.json: exit 0, 8056 bytes +ci-logs/37228602189.log: exit 0, 171676 bytes +ci-logs/37228604862.log: exit 0, 236937 bytes +ci-logs/37247424792.json: exit 0, 14587 bytes +ci-logs/37247423335.log: exit 0, 36644 bytes +ci-logs/37247424817.json: exit 0, 14601 bytes +ci-logs/37247561524.json: exit 0, 14600 bytes +ci-logs/37247424781.log: exit 0, 171887 bytes +ci-logs/37247424792-jobs.json: exit 0, 7138 bytes +ci-logs/37247563255.json: exit 0, 14597 bytes +ci-logs/37247561524-jobs.json: exit 0, 2049 bytes +ci-logs/37247424817-jobs.json: exit 0, 29370 bytes +ci-logs/37247424792.log: exit 0, 82853 bytes +ci-logs/37247563255-jobs.json: exit 0, 27683 bytes +ci-logs/37247563257.json: exit 0, 14581 bytes +ci-logs/37247561524.log: exit 0, 36730 bytes +ci-logs/37247424817.log: exit 0, 575814 bytes +ci-logs/37247563272.json: exit 0, 14586 bytes +ci-logs/37247563257-jobs.json: exit 0, 7138 bytes +ci-logs/37247619896.json: exit 0, 14552 bytes +ci-logs/37247563272-jobs.json: exit 0, 8064 bytes +ci-logs/37247619896-jobs.json: exit 0, 2049 bytes +ci-logs/37247563257.log: exit 0, 82850 bytes +ci-logs/37247563255.log: exit 1, 539144 bytes +ci-logs/37247563272.log: exit 0, 168077 bytes +ci-logs/37247621001.json: exit 0, 14548 bytes +ci-logs/37247621053.json: exit 0, 14533 bytes +ci-logs/37247619896.log: exit 0, 36722 bytes +ci-logs/37247621054.json: exit 0, 14536 bytes +ci-logs/37247621053-jobs.json: exit 0, 7138 bytes +ci-logs/37247621001-jobs.json: exit 0, 29370 bytes +ci-logs/37248525093.json: exit 0, 14893 bytes +ci-logs/37247621054-jobs.json: exit 0, 8056 bytes +ci-logs/37248525093-jobs.json: exit 0, 2049 bytes +ci-logs/37247621053.log: exit 0, 82852 bytes +ci-logs/37247621054.log: exit 0, 172011 bytes +ci-logs/37248526574.json: exit 0, 14875 bytes +ci-logs/37247621001.log: exit 0, 576011 bytes +ci-logs/37248525093.log: exit 0, 36726 bytes +ci-logs/37248526582.json: exit 0, 14877 bytes +ci-logs/37248526574-jobs.json: exit 0, 7138 bytes +ci-logs/37248526603.json: exit 0, 14889 bytes +ci-logs/37250841289.json: exit 0, 14771 bytes +ci-logs/37248526582-jobs.json: exit 0, 8056 bytes +ci-logs/37250841289-jobs.json: exit 0, 2049 bytes +ci-logs/37248526603-jobs.json: exit 0, 29572 bytes +ci-logs/37248526574.log: exit 0, 82859 bytes +ci-logs/37248526582.log: exit 0, 171899 bytes +ci-logs/37250841289.log: exit 0, 36639 bytes +ci-logs/37250843914.json: exit 0, 14753 bytes +ci-logs/37250844025.json: exit 0, 14755 bytes +ci-logs/37248526603.log: exit 0, 577874 bytes +ci-logs/37250844147.json: exit 0, 14767 bytes +ci-logs/37250843914-jobs.json: exit 0, 7138 bytes +ci-logs/37251039161.json: exit 0, 14702 bytes +ci-logs/37250844025-jobs.json: exit 0, 8056 bytes +ci-logs/37250844147-jobs.json: exit 0, 29572 bytes +ci-logs/37251039161-jobs.json: exit 0, 2049 bytes +ci-logs/37250843914.log: exit 0, 82854 bytes +ci-logs/37250844025.log: exit 0, 171794 bytes +ci-logs/37251040491.json: exit 0, 14686 bytes +ci-logs/37251039161.log: exit 0, 36552 bytes +ci-logs/37250844147.log: exit 0, 577285 bytes +ci-logs/37251040493.json: exit 0, 14698 bytes +ci-logs/37251040573.json: exit 0, 14684 bytes +ci-logs/37251040491-jobs.json: exit 0, 8056 bytes +ci-logs/37253543708.json: exit 0, 14977 bytes +ci-logs/37251040573-jobs.json: exit 0, 7138 bytes +ci-logs/37251040493-jobs.json: exit 0, 29572 bytes +ci-logs/37253543708-jobs.json: exit 0, 2049 bytes +ci-logs/37251040573.log: exit 0, 82852 bytes +ci-logs/37251040491.log: exit 0, 171680 bytes +ci-logs/37253543708.log: exit 0, 36552 bytes +ci-logs/37251040493.log: exit 0, 577399 bytes +ci-logs/37253545576.json: exit 0, 14961 bytes +ci-logs/37253545605.json: exit 0, 14973 bytes +ci-logs/37253545610.json: exit 0, 14959 bytes +ci-logs/37293771766.json: exit 0, 14596 bytes +ci-logs/37253545576-jobs.json: exit 0, 8056 bytes +ci-logs/37253545610-jobs.json: exit 0, 7138 bytes +ci-logs/37253545605-jobs.json: exit 0, 29572 bytes +ci-logs/37293771766-jobs.json: exit 0, 7084 bytes +ci-logs/37253545576.log: exit 0, 171798 bytes +ci-logs/37253545610.log: exit 0, 82858 bytes +ci-logs/37293771766.log: exit 0, 89707 bytes +ci-logs/37293771868.json: exit 0, 14610 bytes +ci-logs/37253545605.log: exit 0, 577244 bytes +ci-logs/37293771933.json: exit 0, 14598 bytes +ci-logs/37293772008.json: exit 0, 14593 bytes +ci-logs/37293778052.json: exit 0, 14920 bytes +ci-logs/37293772008-jobs.json: exit 0, 4285 bytes +ci-logs/37293771933-jobs.json: exit 0, 8002 bytes +ci-logs/37293778052-jobs.json: exit 0, 1817 bytes +ci-logs/37293771868-jobs.json: exit 0, 65738 bytes +ci-logs/37293772008.log: exit 0, 43496 bytes +ci-logs/37293778052.log: exit 0, 169635 bytes +ci-logs/37293771933.log: exit 0, 256795 bytes +ci-logs/37293778906.json: exit 0, 14908 bytes +ci-logs/37294036931.json: exit 0, 15395 bytes +ci-logs/37293779105.json: exit 0, 14912 bytes +ci-logs/37293778906-jobs.json: exit 0, 1811 bytes +ci-logs/37294036931-jobs.json: exit 0, 2078 bytes +ci-logs/37293779105-jobs.json: exit 0, 1813 bytes +ci-logs/37293778906.log: exit 0, 21137 bytes +ci-logs/37293779105.log: exit 0, 176101 bytes +ci-logs/37294036931.log: exit 0, 30297 bytes +ci-logs/37294124568.json: exit 0, 14564 bytes +ci-logs/37295743786.json: exit 0, 14534 bytes +ci-logs/37295746040.json: exit 0, 14516 bytes +ci-logs/37294124568-jobs.json: exit 0, 4285 bytes +ci-logs/37295743786-jobs.json: exit 0, 2043 bytes +ci-logs/37295746040-jobs.json: exit 0, 7633 bytes +ci-logs/37294124568.log: exit 0, 43929 bytes +ci-logs/37295743786.log: exit 0, 29530 bytes +ci-logs/37295746040.log: exit 0, 128854 bytes +ci-logs/37296408272.json: exit 0, 14521 bytes +ci-logs/37295746192.json: exit 0, 14530 bytes +ci-logs/37296412630.json: exit 0, 14503 bytes +ci-logs/37296408272-jobs.json: exit 0, 2043 bytes +ci-logs/37293771868.log: exit 0, 1298311 bytes +ci-logs/37296412630-jobs.json: exit 0, 7633 bytes +ci-logs/37295746192-jobs.json: exit 0, 29512 bytes +ci-logs/37296412634.json: exit 0, 14517 bytes +ci-logs/37296408272.log: exit 0, 29530 bytes +ci-logs/37296412630.log: exit 0, 128879 bytes +ci-logs/37296412634-jobs.json: exit 0, 29512 bytes +ci-logs/37295746192.log: exit 0, 644393 bytes +ci-logs/37296459852.json: exit 0, 15273 bytes +ci-logs/37297329559.json: exit 0, 14554 bytes +ci-logs/37297329698.json: exit 0, 14565 bytes +ci-logs/37296459852-jobs.json: exit 0, 2049 bytes +ci-logs/37297329559-jobs.json: exit 0, 7597 bytes +ci-logs/37297329698-jobs.json: exit 0, 58885 bytes +ci-logs/37296412634.log: exit 0, 644244 bytes +ci-logs/37296459852.log: exit 0, 29143 bytes +ci-logs/37297329559.log: exit 0, 126880 bytes +run 37297329698: preserved available job logs; refresh after completion diff --git a/dev/log/issues/110/pulls/111/diagnostic-index.json b/dev/log/issues/110/pulls/111/diagnostic-index.json new file mode 100644 index 0000000..f022989 --- /dev/null +++ b/dev/log/issues/110/pulls/111/diagnostic-index.json @@ -0,0 +1,6627 @@ +[ + { + "path": "ci-logs/37216883117.log", + "line": 331, + "text": "auto-merge\tUNKNOWN STEP\t2026-10-04T16:29:08.3803557Z ##[warning]exiting early - expected PR by \"dependabot[bot]\", found \"konard\" instead\n" + }, + { + "path": "ci-logs/37216883117.log", + "line": 347, + "text": "auto-merge\tUNKNOWN STEP\t2026-10-04T16:29:08.7012067Z ##[warning]Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v2. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/\n" + }, + { + "path": "ci-logs/37222260811.log", + "line": 331, + "text": "auto-merge\tUNKNOWN STEP\t2026-10-04T17:54:03.0864765Z ##[warning]exiting early - expected PR by \"dependabot[bot]\", found \"konard\" instead\n" + }, + { + "path": "ci-logs/37222260811.log", + "line": 347, + "text": "auto-merge\tUNKNOWN STEP\t2026-10-04T17:54:03.3235239Z ##[warning]Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v2. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/\n" + }, + { + "path": "ci-logs/37222262227.log", + "line": 266, + "text": "Results pipeline tests\tUNKNOWN STEP\t2026-10-04T17:54:06.1100526Z ##[warning]Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v4, actions/setup-python@v5. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/\n" + }, + { + "path": "ci-logs/37222262227.log", + "line": 481, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T17:54:09.4258180Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37222262227.log", + "line": 638, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T17:54:19.3497000Z Error: The process '/Users/runner/.cargo/bin/cargo' failed with exit code 101\n" + }, + { + "path": "ci-logs/37222262227.log", + "line": 647, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T17:54:19.3535170Z stderr: '\\x1B[0m\\x1B[0m\\x1B[1m\\x1B[31merror\\x1B[0m\\x1B[1m:\\x1B[0m failed to parse manifest at `/Users/runner/work/Comparisons.SQLiteVSDoublets/Comparisons.SQLiteVSDoublets/rust/Cargo.toml`\\n' +\n" + }, + { + "path": "ci-logs/37222262227.log", + "line": 650, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T17:54:19.3536400Z ' failed to parse the `edition` key\\n' +\n" + }, + { + "path": "ci-logs/37222262227.log", + "line": 700, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T17:54:19.8177130Z `cargo metadata` exited with an error: ^[[0m^[[0m^[[1m^[[31merror^[[0m^[[1m:^[[0m failed to parse manifest at `/Users/runner/work/Comparisons.SQLiteVSDoublets/Comparisons.SQLiteVSDoublets/rust/Cargo.toml`\n" + }, + { + "path": "ci-logs/37222262227.log", + "line": 703, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T17:54:19.8178920Z failed to parse the `edition` key\n" + }, + { + "path": "ci-logs/37222262227.log", + "line": 745, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T17:54:19.8211520Z ##[error]Process completed with exit code 1.\n" + }, + { + "path": "ci-logs/37222262227.log", + "line": 778, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T17:54:22.0318910Z Error: The process '/Users/runner/.cargo/bin/cargo' failed with exit code 101\n" + }, + { + "path": "ci-logs/37222262227.log", + "line": 790, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T17:54:22.0338640Z stderr: '\\x1B[0m\\x1B[0m\\x1B[1m\\x1B[31merror\\x1B[0m\\x1B[1m:\\x1B[0m failed to parse manifest at `/Users/runner/work/Comparisons.SQLiteVSDoublets/Comparisons.SQLiteVSDoublets/rust/Cargo.toml`\\n' +\n" + }, + { + "path": "ci-logs/37222262227.log", + "line": 793, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T17:54:22.0340080Z ' failed to parse the `edition` key\\n' +\n" + }, + { + "path": "ci-logs/37222262227.log", + "line": 821, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T17:54:26.6081170Z ##[warning]Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/\n" + }, + { + "path": "ci-logs/37222262227.log", + "line": 1040, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T17:54:04.1376574Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37222262227.log", + "line": 1195, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T17:54:20.0365037Z Error: The process 'C:\\Users\\runneradmin\\.cargo\\bin\\cargo.exe' failed with exit code 101\n" + }, + { + "path": "ci-logs/37222262227.log", + "line": 1204, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T17:54:20.0371405Z stderr: '\\x1B[0m\\x1B[0m\\x1B[1m\\x1B[31merror\\x1B[0m\\x1B[1m:\\x1B[0m failed to parse manifest at `D:\\\\a\\\\Comparisons.SQLiteVSDoublets\\\\Comparisons.SQLiteVSDoublets\\\\rust\\\\Cargo.toml`\\n' +\n" + }, + { + "path": "ci-logs/37222262227.log", + "line": 1207, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T17:54:20.0372971Z ' failed to parse the `edition` key\\n' +\n" + }, + { + "path": "ci-logs/37222262227.log", + "line": 1257, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T17:54:21.2235535Z `cargo metadata` exited with an error: ^[[0m^[[0m^[[1m^[[31merror^[[0m^[[1m:^[[0m failed to parse manifest at `D:\\a\\Comparisons.SQLiteVSDoublets\\Comparisons.SQLiteVSDoublets\\rust\\Cargo.toml`\n" + }, + { + "path": "ci-logs/37222262227.log", + "line": 1260, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T17:54:21.2237129Z failed to parse the `edition` key\n" + }, + { + "path": "ci-logs/37222262227.log", + "line": 1302, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T17:54:21.3605940Z ##[error]Process completed with exit code 1.\n" + }, + { + "path": "ci-logs/37222262227.log", + "line": 1335, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T17:54:21.6623469Z Error: The process 'C:\\Users\\runneradmin\\.cargo\\bin\\cargo.exe' failed with exit code 101\n" + }, + { + "path": "ci-logs/37222262227.log", + "line": 1344, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T17:54:21.6628657Z stderr: '\\x1B[0m\\x1B[0m\\x1B[1m\\x1B[31merror\\x1B[0m\\x1B[1m:\\x1B[0m failed to parse manifest at `D:\\\\a\\\\Comparisons.SQLiteVSDoublets\\\\Comparisons.SQLiteVSDoublets\\\\rust\\\\Cargo.toml`\\n' +\n" + }, + { + "path": "ci-logs/37222262227.log", + "line": 1347, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T17:54:21.6629720Z ' failed to parse the `edition` key\\n' +\n" + }, + { + "path": "ci-logs/37222262227.log", + "line": 1375, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T17:54:24.3702329Z ##[warning]Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/\n" + }, + { + "path": "ci-logs/37222262227.log", + "line": 1606, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T17:54:00.1933853Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37222262227.log", + "line": 1761, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T17:54:07.6984435Z Error: The process '/home/runner/.cargo/bin/cargo' failed with exit code 101\n" + }, + { + "path": "ci-logs/37222262227.log", + "line": 1772, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T17:54:07.6990314Z stderr: '\\x1B[0m\\x1B[0m\\x1B[1m\\x1B[31merror\\x1B[0m\\x1B[1m:\\x1B[0m failed to parse manifest at `/home/runner/work/Comparisons.SQLiteVSDoublets/Comparisons.SQLiteVSDoublets/rust/Cargo.toml`\\n' +\n" + }, + { + "path": "ci-logs/37222262227.log", + "line": 1775, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T17:54:07.6991514Z ' failed to parse the `edition` key\\n' +\n" + }, + { + "path": "ci-logs/37222262227.log", + "line": 1825, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T17:54:07.8520239Z `cargo metadata` exited with an error: ^[[0m^[[0m^[[1m^[[31merror^[[0m^[[1m:^[[0m failed to parse manifest at `/home/runner/work/Comparisons.SQLiteVSDoublets/Comparisons.SQLiteVSDoublets/rust/Cargo.toml`\n" + }, + { + "path": "ci-logs/37222262227.log", + "line": 1828, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T17:54:07.8521179Z failed to parse the `edition` key\n" + }, + { + "path": "ci-logs/37222262227.log", + "line": 1870, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T17:54:07.8538366Z ##[error]Process completed with exit code 1.\n" + }, + { + "path": "ci-logs/37222262227.log", + "line": 1904, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T17:54:07.9588484Z Error: The process '/home/runner/.cargo/bin/cargo' failed with exit code 101\n" + }, + { + "path": "ci-logs/37222262227.log", + "line": 1917, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T17:54:07.9596961Z stderr: '\\x1B[0m\\x1B[0m\\x1B[1m\\x1B[31merror\\x1B[0m\\x1B[1m:\\x1B[0m failed to parse manifest at `/home/runner/work/Comparisons.SQLiteVSDoublets/Comparisons.SQLiteVSDoublets/rust/Cargo.toml`\\n' +\n" + }, + { + "path": "ci-logs/37222262227.log", + "line": 1920, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T17:54:07.9598704Z ' failed to parse the `edition` key\\n' +\n" + }, + { + "path": "ci-logs/37222262227.log", + "line": 1945, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T17:54:08.6386048Z ##[warning]Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/\n" + }, + { + "path": "ci-logs/37222262316.log", + "line": 252, + "text": "Results pipeline tests\tUNKNOWN STEP\t2026-10-04T17:54:15.6975160Z ##[warning]Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v4, actions/setup-python@v5. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/\n" + }, + { + "path": "ci-logs/37222262316.log", + "line": 396, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T17:54:13.5251780Z MSBUILD : error MSB1009: Project file does not exist.\n" + }, + { + "path": "ci-logs/37222262316.log", + "line": 398, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T17:54:13.6389466Z ##[error]Process completed with exit code 1.\n" + }, + { + "path": "ci-logs/37222262316.log", + "line": 414, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T17:54:15.3214065Z ##[warning]Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v4, actions/setup-dotnet@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/\n" + }, + { + "path": "ci-logs/37222262316.log", + "line": 571, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T17:54:02.9053509Z MSBUILD : error MSB1009: Project file does not exist.\n" + }, + { + "path": "ci-logs/37222262316.log", + "line": 573, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T17:54:02.9130429Z ##[error]Process completed with exit code 1.\n" + }, + { + "path": "ci-logs/37222262316.log", + "line": 589, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T17:54:03.1761827Z ##[warning]Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v4, actions/setup-dotnet@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/\n" + }, + { + "path": "ci-logs/37222262316.log", + "line": 748, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T17:54:21.4920810Z MSBUILD : error MSB1009: Project file does not exist.\n" + }, + { + "path": "ci-logs/37222262316.log", + "line": 750, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T17:54:21.4980870Z ##[error]Process completed with exit code 1.\n" + }, + { + "path": "ci-logs/37222262316.log", + "line": 767, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T17:54:23.1583200Z ##[warning]Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v4, actions/setup-dotnet@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/\n" + }, + { + "path": "ci-logs/37224471966.log", + "line": 329, + "text": "auto-merge\tUNKNOWN STEP\t2026-10-04T18:27:03.1423525Z ##[warning]exiting early - expected PR by \"dependabot[bot]\", found \"konard\" instead\n" + }, + { + "path": "ci-logs/37224471966.log", + "line": 345, + "text": "auto-merge\tUNKNOWN STEP\t2026-10-04T18:27:03.4666599Z ##[warning]Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v2. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/\n" + }, + { + "path": "ci-logs/37224473358.log", + "line": 216, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T18:27:11.3503503Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37224473358.log", + "line": 548, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T18:28:47.1796216Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37224473358.log", + "line": 554, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T18:28:47.1899607Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37224473358.log", + "line": 559, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T18:28:47.2138279Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37224473358.log", + "line": 567, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T18:28:58.4352381Z test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 11.24s\n" + }, + { + "path": "ci-logs/37224473358.log", + "line": 573, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T18:28:58.4931677Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37224473358.log", + "line": 857, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T18:27:04.6219150Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37224473358.log", + "line": 1193, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T18:28:09.7563100Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37224473358.log", + "line": 1198, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T18:28:09.7630310Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37224473358.log", + "line": 1204, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T18:28:09.8467980Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37224473358.log", + "line": 1211, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T18:28:10.6523900Z test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.88s\n" + }, + { + "path": "ci-logs/37224473358.log", + "line": 1217, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T18:28:10.7474640Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37224473358.log", + "line": 1518, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T18:26:58.6931165Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37224473358.log", + "line": 1853, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T18:28:21.8986334Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37224473358.log", + "line": 1858, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T18:28:21.8995009Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37224473358.log", + "line": 1863, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T18:28:21.9110842Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37224473358.log", + "line": 1871, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T18:28:25.0565223Z test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.16s\n" + }, + { + "path": "ci-logs/37224473358.log", + "line": 1877, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T18:28:25.0865228Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37224473401.log", + "line": 512, + "text": "rust objects 64 bit 1000\tUNKNOWN STEP\t2026-10-04T18:26:59.7384991Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37224473401.log", + "line": 974, + "text": "rust objects 64 bit 1000\tUNKNOWN STEP\t2026-10-04T18:28:23.3293087Z Failed to save: Unable to reserve cache with key v0-rust-benchmark-Linux-x64-c7b3ef7d-061d0a07, another job may be creating this cache.\n" + }, + { + "path": "ci-logs/37224473401.log", + "line": 1236, + "text": "rust objects 32 bit 1000\tUNKNOWN STEP\t2026-10-04T18:26:59.3653789Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37224473401.log", + "line": 2642, + "text": "rust links 32 bit 1000\tUNKNOWN STEP\t2026-10-04T18:26:59.0672523Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37224473401.log", + "line": 3064, + "text": "rust links 32 bit 1000\tUNKNOWN STEP\t2026-10-04T18:28:12.9341453Z Failed to save: Unable to reserve cache with key v0-rust-benchmark-Linux-x64-c7b3ef7d-061d0a07, another job may be creating this cache.\n" + }, + { + "path": "ci-logs/37224473401.log", + "line": 3326, + "text": "rust links 64 bit 1000\tUNKNOWN STEP\t2026-10-04T18:26:59.0589703Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37224473401.log", + "line": 3748, + "text": "rust links 64 bit 1000\tUNKNOWN STEP\t2026-10-04T18:28:17.2398161Z Failed to save: Unable to reserve cache with key v0-rust-benchmark-Linux-x64-c7b3ef7d-061d0a07, another job may be creating this cache.\n" + }, + { + "path": "ci-logs/37224473429.log", + "line": 188, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T18:27:24.7477340Z failed: 0\n" + }, + { + "path": "ci-logs/37224473429.log", + "line": 400, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T18:27:43.3087667Z failed: 0\n" + }, + { + "path": "ci-logs/37224473429.log", + "line": 627, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T18:27:18.7568427Z failed: 0\n" + }, + { + "path": "ci-logs/37224809082.log", + "line": 731, + "text": "csharp objects 32 bit 1000000\tUNKNOWN STEP\t2026-10-04T18:52:47.8731988Z ##[error]The operation was canceled.\n" + }, + { + "path": "ci-logs/37224809082.log", + "line": 956, + "text": "csharp links 32 bit 10000000\tUNKNOWN STEP\t2026-10-04T18:52:47.7478273Z ##[error]The operation was canceled.\n" + }, + { + "path": "ci-logs/37224809082.log", + "line": 1180, + "text": "csharp links 64 bit 10000000\tUNKNOWN STEP\t2026-10-04T18:52:47.7949100Z ##[error]The operation was canceled.\n" + }, + { + "path": "ci-logs/37224809082.log", + "line": 1440, + "text": "csharp objects 32 bit 100000\tUNKNOWN STEP\t2026-10-04T18:52:47.8280853Z ##[error]The operation was canceled.\n" + }, + { + "path": "ci-logs/37224809082.log", + "line": 1691, + "text": "rust objects 64 bit 100000\tUNKNOWN STEP\t2026-10-04T18:32:13.4984965Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37224809082.log", + "line": 2103, + "text": "rust objects 64 bit 100000\tUNKNOWN STEP\t2026-10-04T18:37:33.3833725Z Failed to save: Unable to reserve cache with key v0-rust-benchmark-Linux-x64-c7b3ef7d-061d0a07, another job may be creating this cache.\n" + }, + { + "path": "ci-logs/37224809082.log", + "line": 2678, + "text": "csharp objects 64 bit 100000\tUNKNOWN STEP\t2026-10-04T18:52:47.8856548Z ##[error]The operation was canceled.\n" + }, + { + "path": "ci-logs/37224809082.log", + "line": 2929, + "text": "rust links 32 bit 10000000\tUNKNOWN STEP\t2026-10-04T18:32:13.5705173Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37224809082.log", + "line": 3229, + "text": "rust links 32 bit 10000000\tUNKNOWN STEP\t2026-10-04T18:47:16.0853150Z thread 'main' (3126) panicked at /home/runner/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/unit/generic/sources_recursionless_size_balanced_tree.rs:231:19:\n" + }, + { + "path": "ci-logs/37224809082.log", + "line": 3232, + "text": "rust links 32 bit 10000000\tUNKNOWN STEP\t2026-10-04T18:47:16.0895671Z ##[error]Process completed with exit code 101.\n" + }, + { + "path": "ci-logs/37224809082.log", + "line": 3458, + "text": "csharp objects 64 bit 1000000\tUNKNOWN STEP\t2026-10-04T18:52:47.9239659Z ##[error]The operation was canceled.\n" + }, + { + "path": "ci-logs/37224809082.log", + "line": 3709, + "text": "rust objects 32 bit 1000000\tUNKNOWN STEP\t2026-10-04T18:32:12.9333687Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37224809082.log", + "line": 4009, + "text": "rust objects 32 bit 1000000\tUNKNOWN STEP\t2026-10-04T18:33:49.2134804Z thread 'main' (3151) panicked at /home/runner/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/unit/generic/sources_recursionless_size_balanced_tree.rs:231:19:\n" + }, + { + "path": "ci-logs/37224809082.log", + "line": 4012, + "text": "rust objects 32 bit 1000000\tUNKNOWN STEP\t2026-10-04T18:33:49.2770062Z ##[error]Process completed with exit code 101.\n" + }, + { + "path": "ci-logs/37224809082.log", + "line": 4262, + "text": "rust objects 64 bit 1000000\tUNKNOWN STEP\t2026-10-04T18:32:14.7991090Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37224809082.log", + "line": 4562, + "text": "rust objects 64 bit 1000000\tUNKNOWN STEP\t2026-10-04T18:33:56.6016338Z thread 'main' (2959) panicked at /home/runner/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/unit/generic/sources_recursionless_size_balanced_tree.rs:231:19:\n" + }, + { + "path": "ci-logs/37224809082.log", + "line": 4565, + "text": "rust objects 64 bit 1000000\tUNKNOWN STEP\t2026-10-04T18:33:56.6552653Z ##[error]Process completed with exit code 101.\n" + }, + { + "path": "ci-logs/37224809082.log", + "line": 4815, + "text": "rust objects 32 bit 100000\tUNKNOWN STEP\t2026-10-04T18:32:14.9138672Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37224809082.log", + "line": 5227, + "text": "rust objects 32 bit 100000\tUNKNOWN STEP\t2026-10-04T18:37:09.6659925Z Failed to save: Unable to reserve cache with key v0-rust-benchmark-Linux-x64-c7b3ef7d-061d0a07, another job may be creating this cache.\n" + }, + { + "path": "ci-logs/37224809082.log", + "line": 5477, + "text": "rust links 64 bit 10000000\tUNKNOWN STEP\t2026-10-04T18:32:12.6949676Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37224809082.log", + "line": 5777, + "text": "rust links 64 bit 10000000\tUNKNOWN STEP\t2026-10-04T18:46:50.8684315Z thread 'main' (3124) panicked at src/links.rs:201:42:\n" + }, + { + "path": "ci-logs/37224809082.log", + "line": 5780, + "text": "rust links 64 bit 10000000\tUNKNOWN STEP\t2026-10-04T18:46:50.8725441Z ##[error]Process completed with exit code 101.\n" + }, + { + "path": "ci-logs/37224809082.log", + "line": 6339, + "text": "rust links 64 bit 1000000\tUNKNOWN STEP\t2026-10-04T18:32:16.0450831Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37224809082.log", + "line": 6719, + "text": "rust links 64 bit 1000000\tUNKNOWN STEP\t2026-10-04T18:37:33.5886897Z Failed to save: Unable to reserve cache with key v0-rust-benchmark-Linux-x64-c7b3ef7d-061d0a07, another job may be creating this cache.\n" + }, + { + "path": "ci-logs/37224809082.log", + "line": 7236, + "text": "rust links 32 bit 100000\tUNKNOWN STEP\t2026-10-04T18:32:12.6928268Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37224809082.log", + "line": 7908, + "text": "rust links 64 bit 100000\tUNKNOWN STEP\t2026-10-04T18:32:14.9329615Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37224809082.log", + "line": 8330, + "text": "rust links 64 bit 100000\tUNKNOWN STEP\t2026-10-04T18:34:12.9779139Z Failed to save: Unable to reserve cache with key v0-rust-benchmark-Linux-x64-c7b3ef7d-061d0a07, another job may be creating this cache.\n" + }, + { + "path": "ci-logs/37224809082.log", + "line": 8580, + "text": "rust links 32 bit 1000000\tUNKNOWN STEP\t2026-10-04T18:32:14.3898735Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37224809082.log", + "line": 8960, + "text": "rust links 32 bit 1000000\tUNKNOWN STEP\t2026-10-04T18:37:00.3289147Z Failed to save: Unable to reserve cache with key v0-rust-benchmark-Linux-x64-c7b3ef7d-061d0a07, another job may be creating this cache.\n" + }, + { + "path": "ci-logs/37224810674.log", + "line": 332, + "text": "auto-merge\tUNKNOWN STEP\t2026-10-04T18:33:49.2469010Z ##[warning]exiting early - expected PR by \"dependabot[bot]\", found \"konard\" instead\n" + }, + { + "path": "ci-logs/37224810674.log", + "line": 348, + "text": "auto-merge\tUNKNOWN STEP\t2026-10-04T18:33:49.5711325Z ##[warning]Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v2. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/\n" + }, + { + "path": "ci-logs/37224812564.log", + "line": 228, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T18:33:23.6413639Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37224812564.log", + "line": 441, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T18:33:53.1891217Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37224812564.log", + "line": 447, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T18:33:53.1902499Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37224812564.log", + "line": 452, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T18:33:53.2009907Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37224812564.log", + "line": 460, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T18:33:56.3359837Z test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.14s\n" + }, + { + "path": "ci-logs/37224812564.log", + "line": 466, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T18:33:56.3642068Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37224812564.log", + "line": 714, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T18:34:11.4510670Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37224812564.log", + "line": 930, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T18:34:45.5852870Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37224812564.log", + "line": 936, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T18:34:45.5914070Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37224812564.log", + "line": 941, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T18:34:45.6655230Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37224812564.log", + "line": 948, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T18:34:46.5470640Z test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.95s\n" + }, + { + "path": "ci-logs/37224812564.log", + "line": 954, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T18:34:46.6399710Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37224812564.log", + "line": 1207, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T18:34:09.3817547Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37224812564.log", + "line": 1422, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T18:35:14.0644529Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37224812564.log", + "line": 1428, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T18:35:14.0763807Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37224812564.log", + "line": 1433, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T18:35:14.1009165Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37224812564.log", + "line": 1441, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T18:35:23.0882584Z test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 9.00s\n" + }, + { + "path": "ci-logs/37224812564.log", + "line": 1447, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T18:35:23.1556371Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37224812655.log", + "line": 833, + "text": "rust links 32 bit 1000\tUNKNOWN STEP\t2026-10-04T18:34:59.3185292Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37224812655.log", + "line": 1396, + "text": "rust links 64 bit 1000\tUNKNOWN STEP\t2026-10-04T18:34:20.6560003Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37224812655.log", + "line": 2680, + "text": "rust objects 32 bit 1000\tUNKNOWN STEP\t2026-10-04T18:34:44.6265652Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37224812655.log", + "line": 3603, + "text": "rust objects 64 bit 1000\tUNKNOWN STEP\t2026-10-04T18:35:17.9838471Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37224812701.log", + "line": 186, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T18:34:36.8009587Z failed: 0\n" + }, + { + "path": "ci-logs/37224812701.log", + "line": 398, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T18:33:14.1603947Z failed: 0\n" + }, + { + "path": "ci-logs/37224812701.log", + "line": 627, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T18:34:56.3316770Z failed: 0\n" + }, + { + "path": "ci-logs/37226110636.log", + "line": 2168, + "text": "rust links 32 bit 10000000\tUNKNOWN STEP\t2026-10-04T18:53:27.5882993Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37226110636.log", + "line": 2923, + "text": "rust links 64 bit 10000000\tUNKNOWN STEP\t2026-10-04T18:53:13.8200663Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37226110636.log", + "line": 3945, + "text": "rust links 32 bit 1000000\tUNKNOWN STEP\t2026-10-04T18:53:27.0026283Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37226110636.log", + "line": 4454, + "text": "rust objects 64 bit 100000\tUNKNOWN STEP\t2026-10-04T18:53:27.0662198Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37226110636.log", + "line": 5303, + "text": "rust objects 32 bit 100000\tUNKNOWN STEP\t2026-10-04T18:53:33.1506205Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37226110636.log", + "line": 5843, + "text": "rust objects 64 bit 1000000\tUNKNOWN STEP\t2026-10-04T18:53:35.9738017Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37226110636.log", + "line": 6343, + "text": "rust links 32 bit 100000\tUNKNOWN STEP\t2026-10-04T18:53:55.2216309Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37226110636.log", + "line": 6893, + "text": "rust links 64 bit 100000\tUNKNOWN STEP\t2026-10-04T18:53:52.4084823Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37226110636.log", + "line": 7443, + "text": "rust objects 32 bit 1000000\tUNKNOWN STEP\t2026-10-04T18:53:49.3334196Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37226110636.log", + "line": 7943, + "text": "rust links 64 bit 1000000\tUNKNOWN STEP\t2026-10-04T18:54:09.4970740Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37226112158.log", + "line": 331, + "text": "auto-merge\tUNKNOWN STEP\t2026-10-04T18:52:52.4870055Z ##[warning]exiting early - expected PR by \"dependabot[bot]\", found \"konard\" instead\n" + }, + { + "path": "ci-logs/37226112158.log", + "line": 347, + "text": "auto-merge\tUNKNOWN STEP\t2026-10-04T18:52:52.7264739Z ##[warning]Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v2. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/\n" + }, + { + "path": "ci-logs/37226112765.log", + "line": 186, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T18:53:09.7455999Z failed: 0\n" + }, + { + "path": "ci-logs/37226112765.log", + "line": 413, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T18:53:28.3998100Z failed: 0\n" + }, + { + "path": "ci-logs/37226112765.log", + "line": 625, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T18:53:39.7788777Z failed: 0\n" + }, + { + "path": "ci-logs/37226112826.log", + "line": 216, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T18:52:57.5775381Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37226112826.log", + "line": 432, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T18:53:49.9237166Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37226112826.log", + "line": 438, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T18:53:49.9306779Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37226112826.log", + "line": 443, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T18:53:49.9448817Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37226112826.log", + "line": 452, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T18:53:59.3128851Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 9.37s\n" + }, + { + "path": "ci-logs/37226112826.log", + "line": 458, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T18:53:59.3587341Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37226112826.log", + "line": 707, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T18:52:57.7913710Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37226112826.log", + "line": 925, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T18:53:41.3769240Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37226112826.log", + "line": 930, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T18:53:41.3802700Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37226112826.log", + "line": 936, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T18:53:41.4969310Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37226112826.log", + "line": 944, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T18:53:44.2753770Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.89s\n" + }, + { + "path": "ci-logs/37226112826.log", + "line": 950, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T18:53:44.4832250Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37226112826.log", + "line": 1215, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T18:52:54.7198166Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37226112826.log", + "line": 1430, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T18:53:24.6011683Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37226112826.log", + "line": 1435, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T18:53:24.6019240Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37226112826.log", + "line": 1440, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T18:53:24.6121310Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37226112826.log", + "line": 1449, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T18:53:27.7882236Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.18s\n" + }, + { + "path": "ci-logs/37226112826.log", + "line": 1455, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T18:53:27.8163343Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37226112834.log", + "line": 1154, + "text": "rust links 32 bit 1000\tUNKNOWN STEP\t2026-10-04T18:52:47.6328286Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37226112834.log", + "line": 2078, + "text": "rust links 64 bit 1000\tUNKNOWN STEP\t2026-10-04T18:52:49.9652588Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37226112834.log", + "line": 2641, + "text": "rust objects 32 bit 1000\tUNKNOWN STEP\t2026-10-04T18:52:47.1419590Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37226112834.log", + "line": 3243, + "text": "rust objects 64 bit 1000\tUNKNOWN STEP\t2026-10-04T18:52:48.0143496Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37228600749.log", + "line": 333, + "text": "auto-merge\tUNKNOWN STEP\t2026-10-04T19:31:39.4342412Z ##[warning]exiting early - expected PR by \"dependabot[bot]\", found \"konard\" instead\n" + }, + { + "path": "ci-logs/37228600749.log", + "line": 349, + "text": "auto-merge\tUNKNOWN STEP\t2026-10-04T19:31:39.7549072Z ##[warning]Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v2. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/\n" + }, + { + "path": "ci-logs/37228602158.log", + "line": 512, + "text": "rust objects 64 bit 1000\tUNKNOWN STEP\t2026-10-04T19:31:37.4436870Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37228602158.log", + "line": 1114, + "text": "rust objects 32 bit 1000\tUNKNOWN STEP\t2026-10-04T19:31:38.7169283Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37228602158.log", + "line": 2037, + "text": "rust links 64 bit 1000\tUNKNOWN STEP\t2026-10-04T19:31:38.8656596Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37228602158.log", + "line": 3281, + "text": "rust links 32 bit 1000\tUNKNOWN STEP\t2026-10-04T19:31:39.3878449Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37228602183.log", + "line": 173, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T19:32:23.7851942Z failed: 0\n" + }, + { + "path": "ci-logs/37228602183.log", + "line": 402, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T19:32:25.2327880Z failed: 0\n" + }, + { + "path": "ci-logs/37228602183.log", + "line": 627, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T19:32:20.3691783Z failed: 0\n" + }, + { + "path": "ci-logs/37228602189.log", + "line": 216, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T19:31:42.8723020Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37228602189.log", + "line": 432, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T19:32:47.7967775Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37228602189.log", + "line": 438, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T19:32:47.8087009Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37228602189.log", + "line": 443, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T19:32:47.8343691Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37228602189.log", + "line": 452, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T19:33:02.1065513Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 14.29s\n" + }, + { + "path": "ci-logs/37228602189.log", + "line": 458, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-04T19:33:02.1771715Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37228602189.log", + "line": 723, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T19:31:37.7063990Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37228602189.log", + "line": 938, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T19:32:07.1075152Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37228602189.log", + "line": 943, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T19:32:07.1081470Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37228602189.log", + "line": 948, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T19:32:07.1194210Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37228602189.log", + "line": 957, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T19:32:11.4762164Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.37s\n" + }, + { + "path": "ci-logs/37228602189.log", + "line": 963, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-04T19:32:11.5049248Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37228602189.log", + "line": 1211, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T19:31:44.7608940Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37228602189.log", + "line": 1428, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T19:32:24.0124960Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37228602189.log", + "line": 1434, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T19:32:24.0145700Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37228602189.log", + "line": 1439, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T19:32:24.1170830Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37228602189.log", + "line": 1447, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T19:32:26.6304180Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.61s\n" + }, + { + "path": "ci-logs/37228602189.log", + "line": 1453, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-04T19:32:26.7494690Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37228604862.log", + "line": 460, + "text": "csharp links 32 bit 100000000\tUNKNOWN STEP\t2026-10-05T01:55:36.3350721Z ##[error]The operation was canceled.\n" + }, + { + "path": "ci-logs/37228604862.log", + "line": 711, + "text": "rust links 64 bit 100000000\tUNKNOWN STEP\t2026-10-04T20:00:16.5560926Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37228604862.log", + "line": 923, + "text": "rust links 64 bit 100000000\tUNKNOWN STEP\t2026-10-05T01:55:30.4843040Z ##[error]The operation was canceled.\n" + }, + { + "path": "ci-logs/37228604862.log", + "line": 1174, + "text": "rust links 32 bit 100000000\tUNKNOWN STEP\t2026-10-04T20:00:15.5166952Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37228604862.log", + "line": 1385, + "text": "rust links 32 bit 100000000\tUNKNOWN STEP\t2026-10-05T01:55:28.3916014Z ##[error]The operation was canceled.\n" + }, + { + "path": "ci-logs/37228604862.log", + "line": 1608, + "text": "csharp links 64 bit 100000000\tUNKNOWN STEP\t2026-10-05T01:55:27.8713679Z ##[error]The operation was canceled.\n" + }, + { + "path": "ci-logs/37247423335.log", + "line": 331, + "text": "auto-merge\tUNKNOWN STEP\t2026-10-05T00:24:59.1723003Z ##[warning]exiting early - expected PR by \"dependabot[bot]\", found \"konard\" instead\n" + }, + { + "path": "ci-logs/37247423335.log", + "line": 347, + "text": "auto-merge\tUNKNOWN STEP\t2026-10-05T00:24:59.4830503Z ##[warning]Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v2. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/\n" + }, + { + "path": "ci-logs/37247424781.log", + "line": 212, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T00:25:04.6320110Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37247424781.log", + "line": 431, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T00:25:47.9455080Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37247424781.log", + "line": 436, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T00:25:47.9579060Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37247424781.log", + "line": 441, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T00:25:48.0022250Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37247424781.log", + "line": 449, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T00:25:50.9420490Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.00s\n" + }, + { + "path": "ci-logs/37247424781.log", + "line": 455, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T00:25:51.0917290Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37247424781.log", + "line": 708, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T00:25:01.7111718Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37247424781.log", + "line": 924, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T00:26:09.1475178Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37247424781.log", + "line": 930, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T00:26:09.1606796Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37247424781.log", + "line": 935, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T00:26:09.1891172Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37247424781.log", + "line": 944, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T00:26:18.2903400Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 9.12s\n" + }, + { + "path": "ci-logs/37247424781.log", + "line": 950, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T00:26:18.3591382Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37247424781.log", + "line": 1215, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T00:24:57.4282873Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37247424781.log", + "line": 1431, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T00:25:20.0894311Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37247424781.log", + "line": 1436, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T00:25:20.0899965Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37247424781.log", + "line": 1441, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T00:25:20.0980058Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37247424781.log", + "line": 1450, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T00:25:26.2037171Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.11s\n" + }, + { + "path": "ci-logs/37247424781.log", + "line": 1456, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T00:25:26.2247671Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37247424792.log", + "line": 173, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T00:25:47.6118385Z failed: 0\n" + }, + { + "path": "ci-logs/37247424792.log", + "line": 400, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T00:25:16.3917734Z failed: 0\n" + }, + { + "path": "ci-logs/37247424792.log", + "line": 627, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T00:25:25.5701120Z failed: 0\n" + }, + { + "path": "ci-logs/37247424817.log", + "line": 512, + "text": "rust links 64 bit 1000\tUNKNOWN STEP\t2026-10-05T00:25:32.4022834Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37247424817.log", + "line": 1074, + "text": "rust links 32 bit 1000\tUNKNOWN STEP\t2026-10-05T00:24:56.5002217Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37247424817.log", + "line": 2278, + "text": "rust objects 64 bit 1000\tUNKNOWN STEP\t2026-10-05T00:24:58.7548546Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37247424817.log", + "line": 3602, + "text": "rust objects 32 bit 1000\tUNKNOWN STEP\t2026-10-05T00:24:58.9862534Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37247561524.log", + "line": 332, + "text": "auto-merge\tUNKNOWN STEP\t2026-10-05T00:27:07.9285289Z ##[warning]exiting early - expected PR by \"dependabot[bot]\", found \"konard\" instead\n" + }, + { + "path": "ci-logs/37247561524.log", + "line": 348, + "text": "auto-merge\tUNKNOWN STEP\t2026-10-05T00:27:08.2419589Z ##[warning]Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v2. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/\n" + }, + { + "path": "ci-logs/37247563255.log", + "line": 834, + "text": "rust links 32 bit 1000\tUNKNOWN STEP\t2026-10-05T00:27:05.1616585Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37247563255.log", + "line": 1396, + "text": "rust objects 64 bit 1000\tUNKNOWN STEP\t2026-10-05T00:27:04.0606575Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37247563255.log", + "line": 1998, + "text": "rust objects 32 bit 1000\tUNKNOWN STEP\t2026-10-05T00:27:07.3045085Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37247563255.log", + "line": 2601, + "text": "rust links 64 bit 1000\tUNKNOWN STEP\t2026-10-05T00:27:06.5573309Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37247563257.log", + "line": 173, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T00:27:45.8698343Z failed: 0\n" + }, + { + "path": "ci-logs/37247563257.log", + "line": 402, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T00:27:45.2428070Z failed: 0\n" + }, + { + "path": "ci-logs/37247563257.log", + "line": 627, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T00:27:24.5666997Z failed: 0\n" + }, + { + "path": "ci-logs/37247563272.log", + "line": 212, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T00:27:11.8015500Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37247563272.log", + "line": 429, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T00:28:02.1413970Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37247563272.log", + "line": 434, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T00:28:02.1516470Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37247563272.log", + "line": 440, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T00:28:02.2067570Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37247563272.log", + "line": 449, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T00:28:04.1958860Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.02s\n" + }, + { + "path": "ci-logs/37247563272.log", + "line": 454, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T00:28:04.4196530Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37247563272.log", + "line": 456, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T00:28:04.4494760Z ##[error]The operation was canceled.\n" + }, + { + "path": "ci-logs/37247563272.log", + "line": 718, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T00:27:05.6509074Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37247563272.log", + "line": 934, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T00:27:36.5364552Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37247563272.log", + "line": 939, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T00:27:36.5369779Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37247563272.log", + "line": 944, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T00:27:36.5476244Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37247563272.log", + "line": 953, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T00:27:39.7724414Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.23s\n" + }, + { + "path": "ci-logs/37247563272.log", + "line": 959, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T00:27:39.7997623Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37247563272.log", + "line": 1211, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T00:27:10.3327516Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37247563272.log", + "line": 1422, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T00:27:54.7859590Z ##[error]The operation was canceled.\n" + }, + { + "path": "ci-logs/37247619896.log", + "line": 332, + "text": "auto-merge\tUNKNOWN STEP\t2026-10-05T00:28:04.3755677Z ##[warning]exiting early - expected PR by \"dependabot[bot]\", found \"konard\" instead\n" + }, + { + "path": "ci-logs/37247619896.log", + "line": 348, + "text": "auto-merge\tUNKNOWN STEP\t2026-10-05T00:28:04.7084411Z ##[warning]Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v2. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/\n" + }, + { + "path": "ci-logs/37247621001.log", + "line": 513, + "text": "rust links 32 bit 1000\tUNKNOWN STEP\t2026-10-05T00:28:02.5982803Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37247621001.log", + "line": 1075, + "text": "rust objects 32 bit 1000\tUNKNOWN STEP\t2026-10-05T00:28:00.5007820Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37247621001.log", + "line": 2038, + "text": "rust links 64 bit 1000\tUNKNOWN STEP\t2026-10-05T00:28:02.1420531Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37247621001.log", + "line": 2601, + "text": "rust objects 64 bit 1000\tUNKNOWN STEP\t2026-10-05T00:28:01.2707751Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37247621053.log", + "line": 186, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T00:28:12.4094363Z failed: 0\n" + }, + { + "path": "ci-logs/37247621053.log", + "line": 398, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T00:28:54.6776326Z failed: 0\n" + }, + { + "path": "ci-logs/37247621053.log", + "line": 627, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T00:28:23.8171530Z failed: 0\n" + }, + { + "path": "ci-logs/37247621054.log", + "line": 212, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T00:28:20.3045060Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37247621054.log", + "line": 430, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T00:29:04.6418880Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37247621054.log", + "line": 436, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T00:29:04.6470070Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37247621054.log", + "line": 441, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T00:29:04.6941670Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37247621054.log", + "line": 450, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T00:29:06.7789870Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.11s\n" + }, + { + "path": "ci-logs/37247621054.log", + "line": 455, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T00:29:06.8525860Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37247621054.log", + "line": 720, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T00:28:15.5231228Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37247621054.log", + "line": 936, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T00:28:45.3320880Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37247621054.log", + "line": 941, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T00:28:45.3325747Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37247621054.log", + "line": 946, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T00:28:45.3406418Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37247621054.log", + "line": 955, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T00:28:54.7094662Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 9.38s\n" + }, + { + "path": "ci-logs/37247621054.log", + "line": 961, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T00:28:54.7332738Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37247621054.log", + "line": 1213, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T00:28:19.3367405Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37247621054.log", + "line": 1430, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T00:29:25.0734251Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37247621054.log", + "line": 1436, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T00:29:25.0840374Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37247621054.log", + "line": 1441, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T00:29:25.1076196Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37247621054.log", + "line": 1450, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T00:29:34.0187243Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 8.92s\n" + }, + { + "path": "ci-logs/37247621054.log", + "line": 1456, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T00:29:34.0876039Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37248525093.log", + "line": 332, + "text": "auto-merge\tUNKNOWN STEP\t2026-10-05T00:42:22.2503350Z ##[warning]exiting early - expected PR by \"dependabot[bot]\", found \"konard\" instead\n" + }, + { + "path": "ci-logs/37248525093.log", + "line": 348, + "text": "auto-merge\tUNKNOWN STEP\t2026-10-05T00:42:22.5063928Z ##[warning]Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v2. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/\n" + }, + { + "path": "ci-logs/37248526574.log", + "line": 186, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T00:42:31.7877715Z failed: 0\n" + }, + { + "path": "ci-logs/37248526574.log", + "line": 398, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T00:43:27.6391589Z failed: 0\n" + }, + { + "path": "ci-logs/37248526574.log", + "line": 627, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T00:43:00.3473580Z failed: 0\n" + }, + { + "path": "ci-logs/37248526582.log", + "line": 216, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T00:42:21.3856950Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37248526582.log", + "line": 432, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T00:43:31.0246938Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37248526582.log", + "line": 438, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T00:43:31.0315069Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37248526582.log", + "line": 443, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T00:43:31.0453823Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37248526582.log", + "line": 452, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T00:43:47.1349629Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 16.10s\n" + }, + { + "path": "ci-logs/37248526582.log", + "line": 458, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T00:43:47.1829162Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37248526582.log", + "line": 723, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T00:42:15.4069665Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37248526582.log", + "line": 939, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T00:42:47.9420729Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37248526582.log", + "line": 944, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T00:42:47.9427476Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37248526582.log", + "line": 949, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T00:42:47.9537158Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37248526582.log", + "line": 958, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T00:42:51.1030905Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.16s\n" + }, + { + "path": "ci-logs/37248526582.log", + "line": 964, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T00:42:51.1331811Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37248526582.log", + "line": 1212, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T00:42:21.8699390Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37248526582.log", + "line": 1430, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T00:43:00.3950110Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37248526582.log", + "line": 1435, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T00:43:00.3984550Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37248526582.log", + "line": 1441, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T00:43:00.4648460Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37248526582.log", + "line": 1449, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T00:43:02.8305590Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.43s\n" + }, + { + "path": "ci-logs/37248526582.log", + "line": 1455, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T00:43:03.0933260Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37248526603.log", + "line": 1168, + "text": "rust links 64 bit 1000\tUNKNOWN STEP\t2026-10-05T00:42:14.2114222Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37248526603.log", + "line": 1730, + "text": "rust objects 32 bit 1000\tUNKNOWN STEP\t2026-10-05T00:42:15.7669651Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37248526603.log", + "line": 2332, + "text": "rust objects 64 bit 1000\tUNKNOWN STEP\t2026-10-05T00:42:14.1790741Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37248526603.log", + "line": 2934, + "text": "rust links 32 bit 1000\tUNKNOWN STEP\t2026-10-05T00:42:16.6064430Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37250841289.log", + "line": 331, + "text": "auto-merge\tUNKNOWN STEP\t2026-10-05T01:17:33.0661517Z ##[warning]exiting early - expected PR by \"dependabot[bot]\", found \"konard\" instead\n" + }, + { + "path": "ci-logs/37250841289.log", + "line": 347, + "text": "auto-merge\tUNKNOWN STEP\t2026-10-05T01:17:33.4997002Z ##[warning]Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v2. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/\n" + }, + { + "path": "ci-logs/37250843914.log", + "line": 173, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T01:18:31.5886074Z failed: 0\n" + }, + { + "path": "ci-logs/37250843914.log", + "line": 400, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T01:18:23.9264647Z failed: 0\n" + }, + { + "path": "ci-logs/37250843914.log", + "line": 627, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T01:18:23.5689510Z failed: 0\n" + }, + { + "path": "ci-logs/37250844025.log", + "line": 212, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T01:17:32.7895790Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37250844025.log", + "line": 429, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T01:18:16.9673940Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37250844025.log", + "line": 434, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T01:18:16.9694720Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37250844025.log", + "line": 440, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T01:18:17.0189330Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37250844025.log", + "line": 448, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T01:18:37.4769060Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 20.50s\n" + }, + { + "path": "ci-logs/37250844025.log", + "line": 454, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T01:18:37.6125600Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37250844025.log", + "line": 719, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T01:17:27.8287636Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37250844025.log", + "line": 935, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T01:18:01.6434668Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37250844025.log", + "line": 940, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T01:18:01.6437452Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37250844025.log", + "line": 945, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T01:18:01.6565740Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37250844025.log", + "line": 954, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T01:18:24.1355388Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 22.49s\n" + }, + { + "path": "ci-logs/37250844025.log", + "line": 960, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T01:18:24.1633594Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37250844025.log", + "line": 1212, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T01:17:38.6121533Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37250844025.log", + "line": 1428, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T01:18:51.2012786Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37250844025.log", + "line": 1434, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T01:18:51.2129091Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37250844025.log", + "line": 1439, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T01:18:51.2388483Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37250844025.log", + "line": 1448, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T01:19:19.5597931Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 28.33s\n" + }, + { + "path": "ci-logs/37250844025.log", + "line": 1454, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T01:19:19.6266890Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37250844147.log", + "line": 1529, + "text": "rust objects 32 bit 1000\tUNKNOWN STEP\t2026-10-05T01:17:26.9922791Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37250844147.log", + "line": 2131, + "text": "rust objects 64 bit 1000\tUNKNOWN STEP\t2026-10-05T01:17:27.0050819Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37250844147.log", + "line": 2733, + "text": "rust links 64 bit 1000\tUNKNOWN STEP\t2026-10-05T01:17:29.0501067Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37250844147.log", + "line": 3296, + "text": "rust links 32 bit 1000\tUNKNOWN STEP\t2026-10-05T01:17:28.3383730Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37251039161.log", + "line": 330, + "text": "auto-merge\tUNKNOWN STEP\t2026-10-05T01:20:34.6229200Z ##[warning]exiting early - expected PR by \"dependabot[bot]\", found \"konard\" instead\n" + }, + { + "path": "ci-logs/37251039161.log", + "line": 346, + "text": "auto-merge\tUNKNOWN STEP\t2026-10-05T01:20:34.9512446Z ##[warning]Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v2. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/\n" + }, + { + "path": "ci-logs/37251040491.log", + "line": 216, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T01:20:33.6235518Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37251040491.log", + "line": 432, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T01:21:40.7252346Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37251040491.log", + "line": 438, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T01:21:40.7374040Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37251040491.log", + "line": 443, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T01:21:40.7626969Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37251040491.log", + "line": 452, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T01:22:07.5892640Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 26.84s\n" + }, + { + "path": "ci-logs/37251040491.log", + "line": 458, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T01:22:07.6632525Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37251040491.log", + "line": 707, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T01:20:39.6243870Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37251040491.log", + "line": 924, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T01:21:13.3996760Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37251040491.log", + "line": 929, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T01:21:13.4016120Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37251040491.log", + "line": 935, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T01:21:13.4434570Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37251040491.log", + "line": 943, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T01:21:33.9635580Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 20.55s\n" + }, + { + "path": "ci-logs/37251040491.log", + "line": 949, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T01:21:34.0547040Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37251040491.log", + "line": 1214, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T01:20:29.1873685Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37251040491.log", + "line": 1428, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T01:20:59.2618622Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37251040491.log", + "line": 1434, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T01:20:59.2625995Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37251040491.log", + "line": 1439, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T01:20:59.2751312Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37251040491.log", + "line": 1449, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T01:21:21.6440577Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 22.38s\n" + }, + { + "path": "ci-logs/37251040491.log", + "line": 1454, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T01:21:21.6721962Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37251040493.log", + "line": 1168, + "text": "rust objects 64 bit 1000\tUNKNOWN STEP\t2026-10-05T01:22:20.2684583Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37251040493.log", + "line": 2131, + "text": "rust objects 32 bit 1000\tUNKNOWN STEP\t2026-10-05T01:20:32.2539375Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37251040493.log", + "line": 3094, + "text": "rust links 32 bit 1000\tUNKNOWN STEP\t2026-10-05T01:20:31.7252673Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37251040493.log", + "line": 3657, + "text": "rust links 64 bit 1000\tUNKNOWN STEP\t2026-10-05T01:20:35.0930562Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37251040573.log", + "line": 186, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T01:21:24.8308705Z failed: 0\n" + }, + { + "path": "ci-logs/37251040573.log", + "line": 398, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T01:21:45.8940035Z failed: 0\n" + }, + { + "path": "ci-logs/37251040573.log", + "line": 627, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T01:21:36.7403100Z failed: 0\n" + }, + { + "path": "ci-logs/37253543708.log", + "line": 330, + "text": "auto-merge\tUNKNOWN STEP\t2026-10-05T01:59:06.0790824Z ##[warning]exiting early - expected PR by \"dependabot[bot]\", found \"konard\" instead\n" + }, + { + "path": "ci-logs/37253543708.log", + "line": 346, + "text": "auto-merge\tUNKNOWN STEP\t2026-10-05T01:59:06.3754986Z ##[warning]Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v2. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/\n" + }, + { + "path": "ci-logs/37253545576.log", + "line": 212, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T01:59:07.9296470Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37253545576.log", + "line": 431, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T01:59:45.3854760Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37253545576.log", + "line": 436, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T01:59:45.3908400Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37253545576.log", + "line": 441, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T01:59:45.4359880Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37253545576.log", + "line": 449, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T02:00:06.1616050Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 20.76s\n" + }, + { + "path": "ci-logs/37253545576.log", + "line": 455, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T02:00:06.3021370Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37253545576.log", + "line": 720, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T01:59:01.4764883Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37253545576.log", + "line": 935, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T01:59:32.7816256Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37253545576.log", + "line": 940, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T01:59:32.7823069Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37253545576.log", + "line": 945, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T01:59:32.7955528Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37253545576.log", + "line": 954, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T01:59:54.9655451Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 22.18s\n" + }, + { + "path": "ci-logs/37253545576.log", + "line": 960, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T01:59:54.9956945Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37253545576.log", + "line": 1212, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T01:59:07.1426088Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37253545576.log", + "line": 1428, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T02:00:17.6402670Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37253545576.log", + "line": 1434, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T02:00:17.6515115Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37253545576.log", + "line": 1439, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T02:00:17.6763973Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37253545576.log", + "line": 1448, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T02:00:43.2981968Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 25.64s\n" + }, + { + "path": "ci-logs/37253545576.log", + "line": 1454, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T02:00:43.3678257Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37253545605.log", + "line": 526, + "text": "rust objects 64 bit 1000\tUNKNOWN STEP\t2026-10-05T01:59:02.5435998Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37253545605.log", + "line": 1129, + "text": "rust objects 32 bit 1000\tUNKNOWN STEP\t2026-10-05T01:59:21.3475894Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37253545605.log", + "line": 2092, + "text": "rust links 32 bit 1000\tUNKNOWN STEP\t2026-10-05T01:59:02.2164692Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37253545605.log", + "line": 3015, + "text": "rust links 64 bit 1000\tUNKNOWN STEP\t2026-10-05T01:59:02.0047300Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37253545610.log", + "line": 186, + "text": "Test (ubuntu-latest)\tUNKNOWN STEP\t2026-10-05T01:59:44.9973749Z failed: 0\n" + }, + { + "path": "ci-logs/37253545610.log", + "line": 398, + "text": "Test (windows-latest)\tUNKNOWN STEP\t2026-10-05T02:00:05.6641999Z failed: 0\n" + }, + { + "path": "ci-logs/37253545610.log", + "line": 627, + "text": "Test (macos-latest)\tUNKNOWN STEP\t2026-10-05T01:59:57.8992710Z failed: 0\n" + }, + { + "path": "ci-logs/37293771766.log", + "line": 161, + "text": "Test (windows-latest)\tRun dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build\t2026-10-05T10:02:08.7858709Z failed: 0\n" + }, + { + "path": "ci-logs/37293771766.log", + "line": 376, + "text": "Test (ubuntu-latest)\tRun dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build\t2026-10-05T10:01:54.7454653Z failed: 0\n" + }, + { + "path": "ci-logs/37293771766.log", + "line": 608, + "text": "Test (macos-latest)\tRun dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build\t2026-10-05T10:01:39.2692830Z failed: 0\n" + }, + { + "path": "ci-logs/37293771868.log", + "line": 811, + "text": "rust objects 64 bit 1000000\tUNKNOWN STEP\t2026-10-05T10:00:47.5211358Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37293771868.log", + "line": 1183, + "text": "rust objects 64 bit 1000000\tUNKNOWN STEP\t2026-10-05T10:11:52.3224112Z Failed to save: Unable to reserve cache with key v0-rust-benchmark-Linux-x64-c7b3ef7d-061d0a07, another job may be creating this cache.\n" + }, + { + "path": "ci-logs/37293771868.log", + "line": 1949, + "text": "rust links 64 bit 100000\tUNKNOWN STEP\t2026-10-05T10:00:49.4039800Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37293771868.log", + "line": 2371, + "text": "rust links 64 bit 100000\tUNKNOWN STEP\t2026-10-05T10:03:04.9854886Z Failed to save: Unable to reserve cache with key v0-rust-benchmark-Linux-x64-c7b3ef7d-061d0a07, another job may be creating this cache.\n" + }, + { + "path": "ci-logs/37293771868.log", + "line": 2621, + "text": "rust links 32 bit 100000\tUNKNOWN STEP\t2026-10-05T10:00:47.9664887Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37293771868.log", + "line": 3293, + "text": "rust objects 32 bit 100000\tUNKNOWN STEP\t2026-10-05T10:00:49.5203780Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37293771868.log", + "line": 3705, + "text": "rust objects 32 bit 100000\tUNKNOWN STEP\t2026-10-05T10:05:07.2763607Z Failed to save: Unable to reserve cache with key v0-rust-benchmark-Linux-x64-c7b3ef7d-061d0a07, another job may be creating this cache.\n" + }, + { + "path": "ci-logs/37293771868.log", + "line": 3955, + "text": "rust links 32 bit 1000000\tUNKNOWN STEP\t2026-10-05T10:00:47.7302654Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37293771868.log", + "line": 4335, + "text": "rust links 32 bit 1000000\tUNKNOWN STEP\t2026-10-05T10:05:15.3396151Z Failed to save: Unable to reserve cache with key v0-rust-benchmark-Linux-x64-c7b3ef7d-061d0a07, another job may be creating this cache.\n" + }, + { + "path": "ci-logs/37293771868.log", + "line": 4585, + "text": "rust links 64 bit 1000000\tUNKNOWN STEP\t2026-10-05T10:02:08.8924357Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37293771868.log", + "line": 4965, + "text": "rust links 64 bit 1000000\tUNKNOWN STEP\t2026-10-05T10:07:56.7511312Z Failed to save: Unable to reserve cache with key v0-rust-benchmark-Linux-x64-c7b3ef7d-061d0a07, another job may be creating this cache.\n" + }, + { + "path": "ci-logs/37293771868.log", + "line": 5736, + "text": "rust links 32 bit 10000000\tRun dtolnay/rust-toolchain@stable\t2026-10-05T10:00:49.0466579Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37293771868.log", + "line": 6104, + "text": "rust links 32 bit 10000000\tPost Run Swatinem/rust-cache@v2\t2026-10-05T10:22:15.7555450Z Failed to save: Unable to reserve cache with key v0-rust-benchmark-Linux-x64-c7b3ef7d-061d0a07, another job may be creating this cache.\n" + }, + { + "path": "ci-logs/37293771868.log", + "line": 6621, + "text": "rust links 64 bit 10000000\tRun dtolnay/rust-toolchain@stable\t2026-10-05T10:01:13.3581541Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37293771868.log", + "line": 6989, + "text": "rust links 64 bit 10000000\tPost Run Swatinem/rust-cache@v2\t2026-10-05T10:26:25.4027972Z Failed to save: Unable to reserve cache with key v0-rust-benchmark-Linux-x64-c7b3ef7d-061d0a07, another job may be creating this cache.\n" + }, + { + "path": "ci-logs/37293771868.log", + "line": 7493, + "text": "rust objects 64 bit 100000\tUNKNOWN STEP\t2026-10-05T10:00:48.3514571Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37293771868.log", + "line": 7905, + "text": "rust objects 64 bit 100000\tUNKNOWN STEP\t2026-10-05T10:04:52.6400219Z Failed to save: Unable to reserve cache with key v0-rust-benchmark-Linux-x64-c7b3ef7d-061d0a07, another job may be creating this cache.\n" + }, + { + "path": "ci-logs/37293771868.log", + "line": 8751, + "text": "rust objects 32 bit 1000000\tUNKNOWN STEP\t2026-10-05T10:02:40.1292529Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37293771933.log", + "line": 216, + "text": "Test (ubuntu-latest)\tRun dtolnay/rust-toolchain@stable\t2026-10-05T10:00:46.3564205Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37293771933.log", + "line": 552, + "text": "Test (ubuntu-latest)\tRun cargo test --release\t2026-10-05T10:02:06.1652970Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37293771933.log", + "line": 557, + "text": "Test (ubuntu-latest)\tRun cargo test --release\t2026-10-05T10:02:06.1662001Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37293771933.log", + "line": 562, + "text": "Test (ubuntu-latest)\tRun cargo test --release\t2026-10-05T10:02:06.1798286Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37293771933.log", + "line": 571, + "text": "Test (ubuntu-latest)\tRun cargo test --release\t2026-10-05T10:02:28.1681777Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 22.00s\n" + }, + { + "path": "ci-logs/37293771933.log", + "line": 577, + "text": "Test (ubuntu-latest)\tRun cargo test --release\t2026-10-05T10:02:28.1964727Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37293771933.log", + "line": 866, + "text": "Test (macos-latest)\tRun dtolnay/rust-toolchain@stable\t2026-10-05T10:00:51.9650300Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37293771933.log", + "line": 1204, + "text": "Test (macos-latest)\tRun cargo test --release\t2026-10-05T10:02:05.0372920Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37293771933.log", + "line": 1209, + "text": "Test (macos-latest)\tRun cargo test --release\t2026-10-05T10:02:05.0374140Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37293771933.log", + "line": 1214, + "text": "Test (macos-latest)\tRun cargo test --release\t2026-10-05T10:02:05.0917000Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37293771933.log", + "line": 1222, + "text": "Test (macos-latest)\tRun cargo test --release\t2026-10-05T10:02:25.7336790Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 20.69s\n" + }, + { + "path": "ci-logs/37293771933.log", + "line": 1228, + "text": "Test (macos-latest)\tRun cargo test --release\t2026-10-05T10:02:25.9517280Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37293771933.log", + "line": 1504, + "text": "Test (windows-latest)\tRun dtolnay/rust-toolchain@stable\t2026-10-05T10:00:50.2772843Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37293771933.log", + "line": 1837, + "text": "Test (windows-latest)\tRun cargo test --release\t2026-10-05T10:02:35.8136346Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37293771933.log", + "line": 1843, + "text": "Test (windows-latest)\tRun cargo test --release\t2026-10-05T10:02:35.8252102Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37293771933.log", + "line": 1848, + "text": "Test (windows-latest)\tRun cargo test --release\t2026-10-05T10:02:35.8486941Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37293771933.log", + "line": 1857, + "text": "Test (windows-latest)\tRun cargo test --release\t2026-10-05T10:03:01.7597555Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 25.92s\n" + }, + { + "path": "ci-logs/37293771933.log", + "line": 1863, + "text": "Test (windows-latest)\tRun cargo test --release\t2026-10-05T10:03:01.8311928Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37293772008.log", + "line": 310, + "text": "test\tSetup clang\t2026-10-05T10:00:48.0103268Z Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).\n" + }, + { + "path": "ci-logs/37293772008.log", + "line": 372, + "text": "test\tSetup clang\t2026-10-05T10:00:57.1457473Z ##[error]Process completed with exit code 1.\n" + }, + { + "path": "ci-logs/37293778052.log", + "line": 63, + "text": "Dependabot\tRun Dependabot\t2026-10-05T10:02:39.7687534Z updater | rehash: warning: skipping ca-certificates.crt,it does not contain exactly one certificate or CRL\n" + }, + { + "path": "ci-logs/37293778906.log", + "line": 63, + "text": "Dependabot\tRun Dependabot\t2026-10-05T10:03:39.2596613Z updater | rehash: warning: skipping ca-certificates.crt,it does not contain exactly one certificate or CRL\n" + }, + { + "path": "ci-logs/37293779105.log", + "line": 64, + "text": "Dependabot\tRun Dependabot\t2026-10-05T10:04:19.9481269Z updater | rehash: warning: skipping ca-certificates.crt,it does not contain exactly one certificate or CRL\n" + }, + { + "path": "ci-logs/37294036931.log", + "line": 198, + "text": "auto-merge\tRun ahmadnassri/action-dependabot-auto-merge@v2\t2026-10-05T10:03:59.4647622Z ##[warning]failed to parse title: no recognizable versions\n" + }, + { + "path": "ci-logs/37294124568.log", + "line": 317, + "text": "test\tSetup clang\t2026-10-05T10:04:14.3422240Z Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).\n" + }, + { + "path": "ci-logs/37294124568.log", + "line": 377, + "text": "test\tSetup clang\t2026-10-05T10:04:26.9645385Z ##[error]Process completed with exit code 1.\n" + }, + { + "path": "ci-logs/37295743786.log", + "line": 191, + "text": "auto-merge\tRun ahmadnassri/action-dependabot-auto-merge@v2\t2026-10-05T10:18:40.5063556Z ##[warning]exiting early - expected PR by \"dependabot[bot]\", found \"konard\" instead\n" + }, + { + "path": "ci-logs/37295746040.log", + "line": 188, + "text": "Test (macos-latest)\tRun dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build\t2026-10-05T10:19:50.0236300Z failed: 0\n" + }, + { + "path": "ci-logs/37295746040.log", + "line": 459, + "text": "Test (windows-latest)\tRun dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build\t2026-10-05T10:19:52.2252210Z failed: 0\n" + }, + { + "path": "ci-logs/37295746040.log", + "line": 745, + "text": "Test (ubuntu-latest)\tRun dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build\t2026-10-05T10:19:44.5989385Z failed: 0\n" + }, + { + "path": "ci-logs/37295746192.log", + "line": 527, + "text": "rust links 64 bit 1000\tRun dtolnay/rust-toolchain@stable\t2026-10-05T10:18:40.0954880Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37295746192.log", + "line": 1430, + "text": "rust objects 32 bit 1000\tRun dtolnay/rust-toolchain@stable\t2026-10-05T10:18:40.2213844Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37295746192.log", + "line": 2413, + "text": "rust links 32 bit 1000\tRun dtolnay/rust-toolchain@stable\t2026-10-05T10:18:39.5925035Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37295746192.log", + "line": 3698, + "text": "rust objects 64 bit 1000\tRun dtolnay/rust-toolchain@stable\t2026-10-05T10:18:37.6121299Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37296408272.log", + "line": 191, + "text": "auto-merge\tRun ahmadnassri/action-dependabot-auto-merge@v2\t2026-10-05T10:24:58.2648751Z ##[warning]exiting early - expected PR by \"dependabot[bot]\", found \"konard\" instead\n" + }, + { + "path": "ci-logs/37296412630.log", + "line": 186, + "text": "Test (ubuntu-latest)\tRun dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build\t2026-10-05T10:25:50.1770474Z failed: 0\n" + }, + { + "path": "ci-logs/37296412630.log", + "line": 457, + "text": "Test (windows-latest)\tRun dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build\t2026-10-05T10:26:19.8808404Z failed: 0\n" + }, + { + "path": "ci-logs/37296412630.log", + "line": 745, + "text": "Test (macos-latest)\tRun dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build\t2026-10-05T10:26:11.1780430Z failed: 0\n" + }, + { + "path": "ci-logs/37296412634.log", + "line": 527, + "text": "rust links 64 bit 1000\tRun dtolnay/rust-toolchain@stable\t2026-10-05T10:24:56.0572914Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37296412634.log", + "line": 1089, + "text": "rust objects 32 bit 1000\tRun dtolnay/rust-toolchain@stable\t2026-10-05T10:24:57.0929092Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37296412634.log", + "line": 2794, + "text": "rust links 32 bit 1000\tRun dtolnay/rust-toolchain@stable\t2026-10-05T10:24:55.3916223Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37296412634.log", + "line": 3697, + "text": "rust objects 64 bit 1000\tRun dtolnay/rust-toolchain@stable\t2026-10-05T10:24:56.3662547Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37296459852.log", + "line": 188, + "text": "auto-merge\tRun ahmadnassri/action-dependabot-auto-merge@v2\t2026-10-05T10:25:29.9052486Z ##[warning]exiting early - expected PR by \"dependabot[bot]\", found \"konard\" instead\n" + }, + { + "path": "ci-logs/37297329559.log", + "line": 161, + "text": "Test (windows-latest)\tRun dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build\t2026-10-05T10:34:48.5938965Z failed: 0\n" + }, + { + "path": "ci-logs/37297329559.log", + "line": 435, + "text": "Test (ubuntu-latest)\tRun dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build\t2026-10-05T10:34:31.8060068Z failed: 0\n" + }, + { + "path": "ci-logs/37297329559.log", + "line": 726, + "text": "Test (macos-latest)\tRun dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build\t2026-10-05T10:34:51.7286650Z failed: 0\n" + }, + { + "path": "ci-logs/37297329698-job-111734629836.log", + "line": 217, + "text": "2026-10-05T11:11:55.6429127Z \u001b[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\\u001b[0m\n" + }, + { + "path": "ci-logs/37297329698-job-111734629916.log", + "line": 217, + "text": "2026-10-05T11:12:31.4269083Z \u001b[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\\u001b[0m\n" + }, + { + "path": "ci-logs/37297329698-job-111734629938.log", + "line": 217, + "text": "2026-10-05T11:11:55.8759811Z \u001b[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\\u001b[0m\n" + }, + { + "path": "ci-logs/37297329698-job-111734629989.log", + "line": 217, + "text": "2026-10-05T11:11:57.6976137Z \u001b[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\\u001b[0m\n" + }, + { + "path": "ci-logs/37297329698-job-111734630009.log", + "line": 217, + "text": "2026-10-05T11:11:56.5088952Z \u001b[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\\u001b[0m\n" + }, + { + "path": "ci-logs/37297329698-job-111734630069.log", + "line": 217, + "text": "2026-10-05T11:11:55.8641568Z \u001b[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\\u001b[0m\n" + }, + { + "path": "ci-logs/37297329698-job-111734630087.log", + "line": 217, + "text": "2026-10-05T11:11:55.6537104Z \u001b[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\\u001b[0m\n" + }, + { + "path": "ci-logs/37297329698-job-111734630101.log", + "line": 217, + "text": "2026-10-05T11:11:56.3656055Z \u001b[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\\u001b[0m\n" + }, + { + "path": "ci-logs/37297329698-job-111734630146.log", + "line": 217, + "text": "2026-10-05T11:11:56.5616387Z \u001b[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\\u001b[0m\n" + }, + { + "path": "ci-logs/37297329698-job-111734630160.log", + "line": 217, + "text": "2026-10-05T11:12:18.1638850Z \u001b[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\\u001b[0m\n" + }, + { + "path": "ci-logs/37297329698.log", + "line": 473, + "text": "rust objects 64 bit 1000000\tUNKNOWN STEP\t2026-10-05T11:11:55.6429127Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37297329698.log", + "line": 974, + "text": "rust objects 64 bit 100000\tUNKNOWN STEP\t2026-10-05T11:12:31.4269083Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37297329698.log", + "line": 1514, + "text": "rust links 32 bit 1000000\tUNKNOWN STEP\t2026-10-05T11:11:55.8759811Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37297329698.log", + "line": 2932, + "text": "rust objects 32 bit 1000000\tUNKNOWN STEP\t2026-10-05T11:11:57.6976137Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37297329698.log", + "line": 3719, + "text": "rust links 64 bit 10000000\tRun dtolnay/rust-toolchain@stable\t2026-10-05T11:11:56.5088946Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37297329698.log", + "line": 4215, + "text": "rust links 64 bit 100000\tUNKNOWN STEP\t2026-10-05T11:11:55.8641568Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37297329698.log", + "line": 4765, + "text": "rust links 64 bit 1000000\tUNKNOWN STEP\t2026-10-05T11:11:55.6537104Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37297329698.log", + "line": 5581, + "text": "rust objects 32 bit 100000\tUNKNOWN STEP\t2026-10-05T11:11:56.3656055Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37297329698.log", + "line": 6983, + "text": "rust links 32 bit 100000\tUNKNOWN STEP\t2026-10-05T11:11:56.5616387Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37297329698.log", + "line": 7793, + "text": "rust links 32 bit 10000000\tRun dtolnay/rust-toolchain@stable\t2026-10-05T11:12:18.1638846Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37302745606.log", + "line": 188, + "text": "auto-merge\tRun ahmadnassri/action-dependabot-auto-merge@v2\t2026-10-05T11:24:50.7814424Z ##[warning]exiting early - expected PR by \"dependabot[bot]\", found \"konard\" instead\n" + }, + { + "path": "ci-logs/37302748167.log", + "line": 725, + "text": "rust links 32 bit 1000\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T11:25:14.4601523Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37302748167.log", + "line": 1991, + "text": "rust links 64 bit 1000\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T11:25:17.2606328Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37302748167.log", + "line": 3257, + "text": "rust objects 64 bit 1000\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T11:25:50.3812317Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37302748167.log", + "line": 4103, + "text": "rust objects 32 bit 1000\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T11:25:49.1732019Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37302748240.log", + "line": 419, + "text": "audit\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T11:25:04.1270218Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37302748255.log", + "line": 233, + "text": "Test (windows-2025)\tRun dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build -- --timeout 10m\t2026-10-05T11:26:25.3045439Z failed: 0\n" + }, + { + "path": "ci-logs/37302748255.log", + "line": 562, + "text": "Test (ubuntu-24.04)\tRun dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build -- --timeout 10m\t2026-10-05T11:26:05.2835483Z failed: 0\n" + }, + { + "path": "ci-logs/37302748255.log", + "line": 891, + "text": "Test (macos-15)\tRun dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build -- --timeout 10m\t2026-10-05T11:26:14.5053420Z failed: 0\n" + }, + { + "path": "ci-logs/37302748264.log", + "line": 717, + "text": "python\tRun python scripts/ci_checks.py\t2026-10-05T11:25:30.9582617Z ##[error]Process completed with exit code 1.\n" + }, + { + "path": "ci-logs/37302748264.log", + "line": 945, + "text": "Pipeline Status\tCheck terminal status\t2026-10-05T11:26:21.2406856Z Pipeline failed: python: failure\n" + }, + { + "path": "ci-logs/37302748264.log", + "line": 946, + "text": "Pipeline Status\tCheck terminal status\t2026-10-05T11:26:21.2461667Z ##[error]Process completed with exit code 1.\n" + }, + { + "path": "ci-logs/37302748314.log", + "line": 261, + "text": "Test (macos-15)\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T11:24:56.9402840Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37302748314.log", + "line": 483, + "text": "Test (macos-15)\tRun cargo test --locked --release\t2026-10-05T11:25:43.1911120Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37302748314.log", + "line": 488, + "text": "Test (macos-15)\tRun cargo test --locked --release\t2026-10-05T11:25:43.2001420Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37302748314.log", + "line": 494, + "text": "Test (macos-15)\tRun cargo test --locked --release\t2026-10-05T11:25:43.2999320Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37302748314.log", + "line": 502, + "text": "Test (macos-15)\tRun cargo test --locked --release\t2026-10-05T11:26:03.9796150Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 20.78s\n" + }, + { + "path": "ci-logs/37302748314.log", + "line": 508, + "text": "Test (macos-15)\tRun cargo test --locked --release\t2026-10-05T11:26:04.2530720Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37302748314.log", + "line": 793, + "text": "Test (windows-2025)\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T11:24:58.3344013Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37302748314.log", + "line": 1013, + "text": "Test (windows-2025)\tRun cargo test --locked --release\t2026-10-05T11:26:05.3970680Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37302748314.log", + "line": 1019, + "text": "Test (windows-2025)\tRun cargo test --locked --release\t2026-10-05T11:26:05.4083913Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37302748314.log", + "line": 1024, + "text": "Test (windows-2025)\tRun cargo test --locked --release\t2026-10-05T11:26:05.4496191Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37302748314.log", + "line": 1033, + "text": "Test (windows-2025)\tRun cargo test --locked --release\t2026-10-05T11:26:32.6684357Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 27.25s\n" + }, + { + "path": "ci-logs/37302748314.log", + "line": 1039, + "text": "Test (windows-2025)\tRun cargo test --locked --release\t2026-10-05T11:26:32.7379243Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37302748314.log", + "line": 1336, + "text": "Test (ubuntu-24.04)\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T11:24:48.2875234Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37302748314.log", + "line": 1554, + "text": "Test (ubuntu-24.04)\tRun cargo test --locked --release\t2026-10-05T11:25:14.1349679Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37302748314.log", + "line": 1559, + "text": "Test (ubuntu-24.04)\tRun cargo test --locked --release\t2026-10-05T11:25:14.1355976Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37302748314.log", + "line": 1564, + "text": "Test (ubuntu-24.04)\tRun cargo test --locked --release\t2026-10-05T11:25:14.1447976Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37302748314.log", + "line": 1573, + "text": "Test (ubuntu-24.04)\tRun cargo test --locked --release\t2026-10-05T11:25:42.0487553Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 27.91s\n" + }, + { + "path": "ci-logs/37302748314.log", + "line": 1579, + "text": "Test (ubuntu-24.04)\tRun cargo test --locked --release\t2026-10-05T11:25:42.0731042Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37305439002.log", + "line": 191, + "text": "auto-merge\tRun ahmadnassri/action-dependabot-auto-merge@v2\t2026-10-05T11:49:55.2366134Z ##[warning]exiting early - expected PR by \"dependabot[bot]\", found \"konard\" instead\n" + }, + { + "path": "ci-logs/37305440922.log", + "line": 248, + "text": "Test (macos-15)\tRun dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build -- --timeout 10m\t2026-10-05T11:51:20.7838370Z failed: 0\n" + }, + { + "path": "ci-logs/37305440922.log", + "line": 575, + "text": "Test (ubuntu-24.04)\tRun dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build -- --timeout 10m\t2026-10-05T11:51:03.6522452Z failed: 0\n" + }, + { + "path": "ci-logs/37305440922.log", + "line": 889, + "text": "Test (windows-2025)\tRun dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build -- --timeout 10m\t2026-10-05T11:51:38.3318836Z failed: 0\n" + }, + { + "path": "ci-logs/37305440978.log", + "line": 734, + "text": "rust objects 32 bit 1000\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T11:50:20.6365676Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37305440978.log", + "line": 1580, + "text": "rust links 64 bit 1000\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T11:50:21.0091188Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37305440978.log", + "line": 2386, + "text": "rust links 32 bit 1000\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T11:50:27.9438890Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37305440978.log", + "line": 3192, + "text": "rust objects 64 bit 1000\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T11:50:20.8987347Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37305441024.log", + "line": 419, + "text": "audit\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T11:50:03.1202071Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37305441156.log", + "line": 277, + "text": "Test (ubuntu-24.04)\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T11:49:50.9803167Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37305441156.log", + "line": 496, + "text": "Test (ubuntu-24.04)\tRun cargo test --locked --release\t2026-10-05T11:50:16.2671810Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37305441156.log", + "line": 501, + "text": "Test (ubuntu-24.04)\tRun cargo test --locked --release\t2026-10-05T11:50:16.2677281Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37305441156.log", + "line": 506, + "text": "Test (ubuntu-24.04)\tRun cargo test --locked --release\t2026-10-05T11:50:16.2780460Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37305441156.log", + "line": 515, + "text": "Test (ubuntu-24.04)\tRun cargo test --locked --release\t2026-10-05T11:50:40.8051382Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 24.54s\n" + }, + { + "path": "ci-logs/37305441156.log", + "line": 521, + "text": "Test (ubuntu-24.04)\tRun cargo test --locked --release\t2026-10-05T11:50:40.8567384Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37305441156.log", + "line": 805, + "text": "Test (windows-2025)\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T11:49:58.1558593Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37305441156.log", + "line": 1024, + "text": "Test (windows-2025)\tRun cargo test --locked --release\t2026-10-05T11:51:03.1287534Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37305441156.log", + "line": 1030, + "text": "Test (windows-2025)\tRun cargo test --locked --release\t2026-10-05T11:51:03.1405516Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37305441156.log", + "line": 1035, + "text": "Test (windows-2025)\tRun cargo test --locked --release\t2026-10-05T11:51:03.1666042Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37305441156.log", + "line": 1044, + "text": "Test (windows-2025)\tRun cargo test --locked --release\t2026-10-05T11:51:28.9892672Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 25.84s\n" + }, + { + "path": "ci-logs/37305441156.log", + "line": 1050, + "text": "Test (windows-2025)\tRun cargo test --locked --release\t2026-10-05T11:51:29.0646874Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37305441156.log", + "line": 1331, + "text": "Test (macos-15)\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T11:50:02.7630700Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37305441156.log", + "line": 1551, + "text": "Test (macos-15)\tRun cargo test --locked --release\t2026-10-05T11:50:52.4701530Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37305441156.log", + "line": 1556, + "text": "Test (macos-15)\tRun cargo test --locked --release\t2026-10-05T11:50:52.4843450Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37305441156.log", + "line": 1562, + "text": "Test (macos-15)\tRun cargo test --locked --release\t2026-10-05T11:50:52.6389450Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37305441156.log", + "line": 1570, + "text": "Test (macos-15)\tRun cargo test --locked --release\t2026-10-05T11:51:13.1965830Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 20.71s\n" + }, + { + "path": "ci-logs/37305441156.log", + "line": 1576, + "text": "Test (macos-15)\tRun cargo test --locked --release\t2026-10-05T11:51:13.4088680Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37305441174.log", + "line": 771, + "text": "python\tRun bandit -r scripts experiments -q\t2026-10-05T11:50:27.9250690Z ##[error]Process completed with exit code 1.\n" + }, + { + "path": "ci-logs/37305441174.log", + "line": 999, + "text": "Pipeline Status\tCheck terminal status\t2026-10-05T11:50:38.5899201Z Pipeline failed: python: failure\n" + }, + { + "path": "ci-logs/37305441174.log", + "line": 1000, + "text": "Pipeline Status\tCheck terminal status\t2026-10-05T11:50:38.5973515Z ##[error]Process completed with exit code 1.\n" + }, + { + "path": "ci-logs/37306375540.log", + "line": 189, + "text": "auto-merge\tRun ahmadnassri/action-dependabot-auto-merge@v2\t2026-10-05T11:58:34.6689275Z ##[warning]exiting early - expected PR by \"dependabot[bot]\", found \"konard\" instead\n" + }, + { + "path": "ci-logs/37306378813-job-111750940509.log", + "line": 246, + "text": "2026-10-05T11:59:44.8029599Z failed: 0\n" + }, + { + "path": "ci-logs/37306378813-job-111750940706.log", + "line": 248, + "text": "2026-10-05T12:00:00.7124610Z failed: 0\n" + }, + { + "path": "ci-logs/37306378813.log", + "line": 246, + "text": "Test (ubuntu-24.04)\tRun dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build -- --timeout 10m\t2026-10-05T11:59:44.8029596Z failed: 0\n" + }, + { + "path": "ci-logs/37306378813.log", + "line": 575, + "text": "Test (macos-15)\tRun dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build -- --timeout 10m\t2026-10-05T12:00:00.7124600Z failed: 0\n" + }, + { + "path": "ci-logs/37306378813.log", + "line": 889, + "text": "Test (windows-2025)\tRun dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build -- --timeout 10m\t2026-10-05T12:00:17.2407797Z failed: 0\n" + }, + { + "path": "ci-logs/37306378835.log", + "line": 419, + "text": "audit\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T11:58:46.5391427Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37306378845-job-111751107613.log", + "line": 327, + "text": "2026-10-05T11:59:00.9348470Z \u001b[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\\u001b[0m\n" + }, + { + "path": "ci-logs/37306378845-job-111751107700.log", + "line": 327, + "text": "2026-10-05T11:59:01.7075464Z \u001b[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\\u001b[0m\n" + }, + { + "path": "ci-logs/37306378845-job-111751107920.log", + "line": 327, + "text": "2026-10-05T11:59:00.9885123Z \u001b[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\\u001b[0m\n" + }, + { + "path": "ci-logs/37306378845.log", + "line": 1154, + "text": "rust links 32 bit 1000\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T11:59:00.9348464Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37306378845.log", + "line": 2840, + "text": "rust links 64 bit 1000\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T11:59:01.7075462Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37306378845.log", + "line": 3646, + "text": "rust objects 64 bit 1000\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T11:59:02.0855242Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37306378845.log", + "line": 4952, + "text": "rust objects 32 bit 1000\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T11:59:00.9885115Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37306378854.log", + "line": 722, + "text": "python\tRun bandit -r scripts experiments -q\t2026-10-05T11:59:09.5276453Z [tester]\tWARNING\tnosec encountered (B603), but no failed test on file experiments/ci/run_smoke.py:19\n" + }, + { + "path": "ci-logs/37306378854.log", + "line": 723, + "text": "python\tRun bandit -r scripts experiments -q\t2026-10-05T11:59:09.5823421Z [tester]\tWARNING\tnosec encountered (B603), but no failed test on file scripts/check_pipeline_status.py:39\n" + }, + { + "path": "ci-logs/37306378905.log", + "line": 265, + "text": "Test (windows-2025)\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T11:58:38.5788217Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37306378905.log", + "line": 484, + "text": "Test (windows-2025)\tRun cargo test --locked --release\t2026-10-05T11:59:42.7711526Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37306378905.log", + "line": 490, + "text": "Test (windows-2025)\tRun cargo test --locked --release\t2026-10-05T11:59:42.7821290Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37306378905.log", + "line": 495, + "text": "Test (windows-2025)\tRun cargo test --locked --release\t2026-10-05T11:59:42.8070650Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37306378905.log", + "line": 504, + "text": "Test (windows-2025)\tRun cargo test --locked --release\t2026-10-05T12:00:08.4575018Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 25.66s\n" + }, + { + "path": "ci-logs/37306378905.log", + "line": 510, + "text": "Test (windows-2025)\tRun cargo test --locked --release\t2026-10-05T12:00:08.5258133Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37306378905.log", + "line": 807, + "text": "Test (ubuntu-24.04)\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T11:59:07.2712873Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37306378905.log", + "line": 1025, + "text": "Test (ubuntu-24.04)\tRun cargo test --locked --release\t2026-10-05T11:59:36.6945747Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37306378905.log", + "line": 1030, + "text": "Test (ubuntu-24.04)\tRun cargo test --locked --release\t2026-10-05T11:59:36.6951381Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37306378905.log", + "line": 1035, + "text": "Test (ubuntu-24.04)\tRun cargo test --locked --release\t2026-10-05T11:59:36.7076190Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37306378905.log", + "line": 1044, + "text": "Test (ubuntu-24.04)\tRun cargo test --locked --release\t2026-10-05T11:59:59.6340559Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 22.94s\n" + }, + { + "path": "ci-logs/37306378905.log", + "line": 1050, + "text": "Test (ubuntu-24.04)\tRun cargo test --locked --release\t2026-10-05T11:59:59.6613381Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37306378905.log", + "line": 1330, + "text": "Test (macos-15)\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T11:58:40.0934560Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37306378905.log", + "line": 1550, + "text": "Test (macos-15)\tRun cargo test --locked --release\t2026-10-05T11:59:14.0051840Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37306378905.log", + "line": 1555, + "text": "Test (macos-15)\tRun cargo test --locked --release\t2026-10-05T11:59:14.0139800Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37306378905.log", + "line": 1561, + "text": "Test (macos-15)\tRun cargo test --locked --release\t2026-10-05T11:59:14.0954780Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37306378905.log", + "line": 1569, + "text": "Test (macos-15)\tRun cargo test --locked --release\t2026-10-05T11:59:34.6760260Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 20.66s\n" + }, + { + "path": "ci-logs/37306378905.log", + "line": 1575, + "text": "Test (macos-15)\tRun cargo test --locked --release\t2026-10-05T11:59:35.7426990Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37307465334.log", + "line": 190, + "text": "auto-merge\tRun ahmadnassri/action-dependabot-auto-merge@v2\t2026-10-05T12:08:37.5182247Z ##[warning]exiting early - expected PR by \"dependabot[bot]\", found \"konard\" instead\n" + }, + { + "path": "ci-logs/37307467742.log", + "line": 734, + "text": "rust links 32 bit 1000\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T12:08:54.7503281Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37307467742.log", + "line": 2000, + "text": "rust objects 32 bit 1000\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T12:08:57.5148771Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37307467742.log", + "line": 3686, + "text": "rust links 64 bit 1000\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T12:08:53.7347051Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37307467742.log", + "line": 4492, + "text": "rust objects 64 bit 1000\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T12:08:53.7575413Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37307467851.log", + "line": 419, + "text": "audit\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T12:08:42.7707936Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37307467945.log", + "line": 261, + "text": "Test (macos-15)\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T12:08:36.9422950Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37307467945.log", + "line": 482, + "text": "Test (macos-15)\tRun cargo test --locked --release\t2026-10-05T12:09:20.2456390Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37307467945.log", + "line": 487, + "text": "Test (macos-15)\tRun cargo test --locked --release\t2026-10-05T12:09:20.2593920Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37307467945.log", + "line": 493, + "text": "Test (macos-15)\tRun cargo test --locked --release\t2026-10-05T12:09:20.3868420Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37307467945.log", + "line": 501, + "text": "Test (macos-15)\tRun cargo test --locked --release\t2026-10-05T12:09:40.8898880Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 20.62s\n" + }, + { + "path": "ci-logs/37307467945.log", + "line": 507, + "text": "Test (macos-15)\tRun cargo test --locked --release\t2026-10-05T12:09:41.0303420Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37307467945.log", + "line": 792, + "text": "Test (windows-2025)\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T12:08:39.2095365Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37307467945.log", + "line": 1011, + "text": "Test (windows-2025)\tRun cargo test --locked --release\t2026-10-05T12:09:43.8757187Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37307467945.log", + "line": 1017, + "text": "Test (windows-2025)\tRun cargo test --locked --release\t2026-10-05T12:09:43.8865056Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37307467945.log", + "line": 1022, + "text": "Test (windows-2025)\tRun cargo test --locked --release\t2026-10-05T12:09:43.9114514Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37307467945.log", + "line": 1031, + "text": "Test (windows-2025)\tRun cargo test --locked --release\t2026-10-05T12:10:10.5402082Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 26.64s\n" + }, + { + "path": "ci-logs/37307467945.log", + "line": 1037, + "text": "Test (windows-2025)\tRun cargo test --locked --release\t2026-10-05T12:10:10.6115943Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37307467945.log", + "line": 1334, + "text": "Test (ubuntu-24.04)\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T12:08:30.4225013Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37307467945.log", + "line": 1551, + "text": "Test (ubuntu-24.04)\tRun cargo test --locked --release\t2026-10-05T12:09:01.2559257Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37307467945.log", + "line": 1557, + "text": "Test (ubuntu-24.04)\tRun cargo test --locked --release\t2026-10-05T12:09:01.2564880Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37307467945.log", + "line": 1562, + "text": "Test (ubuntu-24.04)\tRun cargo test --locked --release\t2026-10-05T12:09:01.2682569Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37307467945.log", + "line": 1571, + "text": "Test (ubuntu-24.04)\tRun cargo test --locked --release\t2026-10-05T12:09:23.3629384Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 22.11s\n" + }, + { + "path": "ci-logs/37307467945.log", + "line": 1577, + "text": "Test (ubuntu-24.04)\tRun cargo test --locked --release\t2026-10-05T12:09:23.3908306Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37307467957.log", + "line": 246, + "text": "Test (ubuntu-24.04)\tRun dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build -- --timeout 10m\t2026-10-05T12:09:47.4531460Z failed: 0\n" + }, + { + "path": "ci-logs/37307467957.log", + "line": 560, + "text": "Test (windows-2025)\tRun dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build -- --timeout 10m\t2026-10-05T12:10:07.9592586Z failed: 0\n" + }, + { + "path": "ci-logs/37307467957.log", + "line": 891, + "text": "Test (macos-15)\tRun dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build -- --timeout 10m\t2026-10-05T12:09:56.4465070Z failed: 0\n" + }, + { + "path": "ci-logs/37308332534.log", + "line": 190, + "text": "auto-merge\tRun ahmadnassri/action-dependabot-auto-merge@v2\t2026-10-05T12:16:09.1659210Z ##[warning]exiting early - expected PR by \"dependabot[bot]\", found \"konard\" instead\n" + }, + { + "path": "ci-logs/37308336389.log", + "line": 419, + "text": "audit\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T12:16:25.0267108Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37308336462.log", + "line": 265, + "text": "Test (windows-2025)\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T12:16:17.7450007Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37308336462.log", + "line": 484, + "text": "Test (windows-2025)\tRun cargo test --locked --release\t2026-10-05T12:17:12.8776862Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37308336462.log", + "line": 490, + "text": "Test (windows-2025)\tRun cargo test --locked --release\t2026-10-05T12:17:12.8861738Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37308336462.log", + "line": 495, + "text": "Test (windows-2025)\tRun cargo test --locked --release\t2026-10-05T12:17:12.9688708Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37308336462.log", + "line": 504, + "text": "Test (windows-2025)\tRun cargo test --locked --release\t2026-10-05T12:17:40.3181278Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 27.42s\n" + }, + { + "path": "ci-logs/37308336462.log", + "line": 510, + "text": "Test (windows-2025)\tRun cargo test --locked --release\t2026-10-05T12:17:40.3735218Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37308336462.log", + "line": 807, + "text": "Test (ubuntu-24.04)\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T12:16:07.8656633Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37308336462.log", + "line": 1025, + "text": "Test (ubuntu-24.04)\tRun cargo test --locked --release\t2026-10-05T12:16:38.4518834Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37308336462.log", + "line": 1030, + "text": "Test (ubuntu-24.04)\tRun cargo test --locked --release\t2026-10-05T12:16:38.4524682Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37308336462.log", + "line": 1035, + "text": "Test (ubuntu-24.04)\tRun cargo test --locked --release\t2026-10-05T12:16:38.4657891Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37308336462.log", + "line": 1044, + "text": "Test (ubuntu-24.04)\tRun cargo test --locked --release\t2026-10-05T12:17:00.9306857Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 22.48s\n" + }, + { + "path": "ci-logs/37308336462.log", + "line": 1050, + "text": "Test (ubuntu-24.04)\tRun cargo test --locked --release\t2026-10-05T12:17:00.9595181Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37308336462.log", + "line": 1330, + "text": "Test (macos-15)\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T12:16:16.9005120Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37308336462.log", + "line": 1550, + "text": "Test (macos-15)\tRun cargo test --locked --release\t2026-10-05T12:16:58.3040410Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37308336462.log", + "line": 1556, + "text": "Test (macos-15)\tRun cargo test --locked --release\t2026-10-05T12:16:58.3149880Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37308336462.log", + "line": 1561, + "text": "Test (macos-15)\tRun cargo test --locked --release\t2026-10-05T12:16:58.4160910Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37308336462.log", + "line": 1569, + "text": "Test (macos-15)\tRun cargo test --locked --release\t2026-10-05T12:17:19.0508300Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 20.73s\n" + }, + { + "path": "ci-logs/37308336462.log", + "line": 1575, + "text": "Test (macos-15)\tRun cargo test --locked --release\t2026-10-05T12:17:19.4140490Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37308336521.log", + "line": 248, + "text": "Test (macos-15)\tRun dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build -- --timeout 10m\t2026-10-05T12:17:35.6540620Z failed: 0\n" + }, + { + "path": "ci-logs/37308336521.log", + "line": 562, + "text": "Test (windows-2025)\tRun dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build -- --timeout 10m\t2026-10-05T12:17:39.7663701Z failed: 0\n" + }, + { + "path": "ci-logs/37308336521.log", + "line": 889, + "text": "Test (ubuntu-24.04)\tRun dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build -- --timeout 10m\t2026-10-05T12:17:28.9930529Z failed: 0\n" + }, + { + "path": "ci-logs/37308336637.log", + "line": 734, + "text": "rust links 32 bit 1000\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T12:16:36.5548580Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37308336637.log", + "line": 1540, + "text": "rust objects 32 bit 1000\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T12:16:34.8066943Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37308336637.log", + "line": 2806, + "text": "rust links 64 bit 1000\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T12:16:35.3013533Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37308336637.log", + "line": 4492, + "text": "rust objects 64 bit 1000\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T12:16:35.7965001Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37309451401.log", + "line": 1194, + "text": "rust objects 64 bit 1000\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T12:26:15.3790611Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37309451401.log", + "line": 2040, + "text": "rust objects 32 bit 1000\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T12:26:15.3538520Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37309451401.log", + "line": 2886, + "text": "rust links 64 bit 1000\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T12:26:13.9091183Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37309451401.log", + "line": 3692, + "text": "rust links 32 bit 1000\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T12:26:14.6023650Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37309451448.log", + "line": 265, + "text": "Test (windows-2025)\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T12:25:56.9988556Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37309451448.log", + "line": 485, + "text": "Test (windows-2025)\tRun cargo test --locked --release\t2026-10-05T12:27:07.9494587Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37309451448.log", + "line": 491, + "text": "Test (windows-2025)\tRun cargo test --locked --release\t2026-10-05T12:27:07.9622091Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37309451448.log", + "line": 496, + "text": "Test (windows-2025)\tRun cargo test --locked --release\t2026-10-05T12:27:07.9888355Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37309451448.log", + "line": 505, + "text": "Test (windows-2025)\tRun cargo test --locked --release\t2026-10-05T12:27:33.9087369Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 25.93s\n" + }, + { + "path": "ci-logs/37309451448.log", + "line": 511, + "text": "Test (windows-2025)\tRun cargo test --locked --release\t2026-10-05T12:27:33.9795983Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37309451448.log", + "line": 808, + "text": "Test (ubuntu-24.04)\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T12:25:48.5334496Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37309451448.log", + "line": 1026, + "text": "Test (ubuntu-24.04)\tRun cargo test --locked --release\t2026-10-05T12:26:18.0524725Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37309451448.log", + "line": 1031, + "text": "Test (ubuntu-24.04)\tRun cargo test --locked --release\t2026-10-05T12:26:18.0530230Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37309451448.log", + "line": 1036, + "text": "Test (ubuntu-24.04)\tRun cargo test --locked --release\t2026-10-05T12:26:18.0661595Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37309451448.log", + "line": 1045, + "text": "Test (ubuntu-24.04)\tRun cargo test --locked --release\t2026-10-05T12:26:40.0848372Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 22.03s\n" + }, + { + "path": "ci-logs/37309451448.log", + "line": 1051, + "text": "Test (ubuntu-24.04)\tRun cargo test --locked --release\t2026-10-05T12:26:40.1128665Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37309451448.log", + "line": 1331, + "text": "Test (macos-15)\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T12:25:57.5874660Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37309451448.log", + "line": 1552, + "text": "Test (macos-15)\tRun cargo test --locked --release\t2026-10-05T12:26:40.5049450Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37309451448.log", + "line": 1558, + "text": "Test (macos-15)\tRun cargo test --locked --release\t2026-10-05T12:26:40.5069890Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37309451448.log", + "line": 1563, + "text": "Test (macos-15)\tRun cargo test --locked --release\t2026-10-05T12:26:40.5944630Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37309451448.log", + "line": 1571, + "text": "Test (macos-15)\tRun cargo test --locked --release\t2026-10-05T12:27:01.3285200Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 20.82s\n" + }, + { + "path": "ci-logs/37309451448.log", + "line": 1577, + "text": "Test (macos-15)\tRun cargo test --locked --release\t2026-10-05T12:27:01.7989460Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37309451530.log", + "line": 233, + "text": "Test (windows-2025)\tRun dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build -- --timeout 10m\t2026-10-05T12:27:28.5176926Z failed: 0\n" + }, + { + "path": "ci-logs/37309451530.log", + "line": 564, + "text": "Test (macos-15)\tRun dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build -- --timeout 10m\t2026-10-05T12:27:36.4924850Z failed: 0\n" + }, + { + "path": "ci-logs/37309451530.log", + "line": 891, + "text": "Test (ubuntu-24.04)\tRun dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build -- --timeout 10m\t2026-10-05T12:26:50.2760676Z failed: 0\n" + }, + { + "path": "ci-logs/37309451621.log", + "line": 419, + "text": "audit\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T12:26:02.4160901Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37311813175.log", + "line": 734, + "text": "rust links 32 bit 1000\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T12:46:40.3008342Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37311813175.log", + "line": 1540, + "text": "rust links 64 bit 1000\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T12:46:38.7078404Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37311813175.log", + "line": 3186, + "text": "rust objects 32 bit 1000\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T12:46:37.5741114Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37311813175.log", + "line": 4492, + "text": "rust objects 64 bit 1000\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T12:46:38.7413036Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37311813182.log", + "line": 246, + "text": "Test (ubuntu-24.04)\tRun dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build -- --timeout 10m\t2026-10-05T12:47:23.6634421Z failed: 0\n" + }, + { + "path": "ci-logs/37311813182.log", + "line": 575, + "text": "Test (macos-15)\tRun dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build -- --timeout 10m\t2026-10-05T12:47:45.8426620Z failed: 0\n" + }, + { + "path": "ci-logs/37311813182.log", + "line": 889, + "text": "Test (windows-2025)\tRun dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build -- --timeout 10m\t2026-10-05T12:47:50.8015665Z failed: 0\n" + }, + { + "path": "ci-logs/37311813265.log", + "line": 265, + "text": "Test (windows-2025)\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T12:46:22.7184345Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37311813265.log", + "line": 484, + "text": "Test (windows-2025)\tRun cargo test --locked --release\t2026-10-05T12:47:43.0955363Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37311813265.log", + "line": 490, + "text": "Test (windows-2025)\tRun cargo test --locked --release\t2026-10-05T12:47:43.1051309Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37311813265.log", + "line": 495, + "text": "Test (windows-2025)\tRun cargo test --locked --release\t2026-10-05T12:47:43.1245314Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37311813265.log", + "line": 504, + "text": "Test (windows-2025)\tRun cargo test --locked --release\t2026-10-05T12:48:12.4448970Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 29.33s\n" + }, + { + "path": "ci-logs/37311813265.log", + "line": 510, + "text": "Test (windows-2025)\tRun cargo test --locked --release\t2026-10-05T12:48:12.5021795Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37311813265.log", + "line": 791, + "text": "Test (macos-15)\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T12:46:14.7284330Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37311813265.log", + "line": 1013, + "text": "Test (macos-15)\tRun cargo test --locked --release\t2026-10-05T12:46:46.2743420Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37311813265.log", + "line": 1018, + "text": "Test (macos-15)\tRun cargo test --locked --release\t2026-10-05T12:46:46.3252260Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37311813265.log", + "line": 1023, + "text": "Test (macos-15)\tRun cargo test --locked --release\t2026-10-05T12:46:46.3768810Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37311813265.log", + "line": 1031, + "text": "Test (macos-15)\tRun cargo test --locked --release\t2026-10-05T12:47:06.8155760Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 20.57s\n" + }, + { + "path": "ci-logs/37311813265.log", + "line": 1037, + "text": "Test (macos-15)\tRun cargo test --locked --release\t2026-10-05T12:47:06.9581840Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37311813265.log", + "line": 1334, + "text": "Test (ubuntu-24.04)\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T12:46:10.0462313Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/37311813265.log", + "line": 1553, + "text": "Test (ubuntu-24.04)\tRun cargo test --locked --release\t2026-10-05T12:46:41.5908687Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37311813265.log", + "line": 1558, + "text": "Test (ubuntu-24.04)\tRun cargo test --locked --release\t2026-10-05T12:46:41.5913225Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37311813265.log", + "line": 1563, + "text": "Test (ubuntu-24.04)\tRun cargo test --locked --release\t2026-10-05T12:46:41.6064955Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/37311813265.log", + "line": 1572, + "text": "Test (ubuntu-24.04)\tRun cargo test --locked --release\t2026-10-05T12:47:03.6759920Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 22.08s\n" + }, + { + "path": "ci-logs/37311813265.log", + "line": 1578, + "text": "Test (ubuntu-24.04)\tRun cargo test --locked --release\t2026-10-05T12:47:03.7032349Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/37311813457.log", + "line": 419, + "text": "audit\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T12:46:26.3183348Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/benchmarks-37302748167.log", + "line": 725, + "text": "rust links 32 bit 1000\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T11:25:14.4601523Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/benchmarks-37302748167.log", + "line": 1991, + "text": "rust links 64 bit 1000\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T11:25:17.2606328Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/benchmarks-37302748167.log", + "line": 3257, + "text": "rust objects 64 bit 1000\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T11:25:50.3812317Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/benchmarks-37302748167.log", + "line": 4103, + "text": "rust objects 32 bit 1000\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T11:25:49.1732019Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/csharp-37302748255.log", + "line": 233, + "text": "Test (windows-2025)\tRun dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build -- --timeout 10m\t2026-10-05T11:26:25.3045439Z failed: 0\n" + }, + { + "path": "ci-logs/csharp-37302748255.log", + "line": 562, + "text": "Test (ubuntu-24.04)\tRun dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build -- --timeout 10m\t2026-10-05T11:26:05.2835483Z failed: 0\n" + }, + { + "path": "ci-logs/csharp-37302748255.log", + "line": 891, + "text": "Test (macos-15)\tRun dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build -- --timeout 10m\t2026-10-05T11:26:14.5053420Z failed: 0\n" + }, + { + "path": "ci-logs/dependencies-37302748240.log", + "line": 419, + "text": "audit\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T11:25:04.1270218Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/quality-37302748264.log", + "line": 717, + "text": "python\tRun python scripts/ci_checks.py\t2026-10-05T11:25:30.9582617Z ##[error]Process completed with exit code 1.\n" + }, + { + "path": "ci-logs/quality-37302748264.log", + "line": 945, + "text": "Pipeline Status\tCheck terminal status\t2026-10-05T11:26:21.2406856Z Pipeline failed: python: failure\n" + }, + { + "path": "ci-logs/quality-37302748264.log", + "line": 946, + "text": "Pipeline Status\tCheck terminal status\t2026-10-05T11:26:21.2461667Z ##[error]Process completed with exit code 1.\n" + }, + { + "path": "ci-logs/quality-37305441174.log", + "line": 771, + "text": "python\tRun bandit -r scripts experiments -q\t2026-10-05T11:50:27.9250690Z ##[error]Process completed with exit code 1.\n" + }, + { + "path": "ci-logs/quality-37305441174.log", + "line": 999, + "text": "Pipeline Status\tCheck terminal status\t2026-10-05T11:50:38.5899201Z Pipeline failed: python: failure\n" + }, + { + "path": "ci-logs/quality-37305441174.log", + "line": 1000, + "text": "Pipeline Status\tCheck terminal status\t2026-10-05T11:50:38.5973515Z ##[error]Process completed with exit code 1.\n" + }, + { + "path": "ci-logs/rust-37302748314.log", + "line": 261, + "text": "Test (macos-15)\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T11:24:56.9402840Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/rust-37302748314.log", + "line": 483, + "text": "Test (macos-15)\tRun cargo test --locked --release\t2026-10-05T11:25:43.1911120Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/rust-37302748314.log", + "line": 488, + "text": "Test (macos-15)\tRun cargo test --locked --release\t2026-10-05T11:25:43.2001420Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/rust-37302748314.log", + "line": 494, + "text": "Test (macos-15)\tRun cargo test --locked --release\t2026-10-05T11:25:43.2999320Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/rust-37302748314.log", + "line": 502, + "text": "Test (macos-15)\tRun cargo test --locked --release\t2026-10-05T11:26:03.9796150Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 20.78s\n" + }, + { + "path": "ci-logs/rust-37302748314.log", + "line": 508, + "text": "Test (macos-15)\tRun cargo test --locked --release\t2026-10-05T11:26:04.2530720Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/rust-37302748314.log", + "line": 793, + "text": "Test (windows-2025)\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T11:24:58.3344013Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/rust-37302748314.log", + "line": 1013, + "text": "Test (windows-2025)\tRun cargo test --locked --release\t2026-10-05T11:26:05.3970680Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/rust-37302748314.log", + "line": 1019, + "text": "Test (windows-2025)\tRun cargo test --locked --release\t2026-10-05T11:26:05.4083913Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/rust-37302748314.log", + "line": 1024, + "text": "Test (windows-2025)\tRun cargo test --locked --release\t2026-10-05T11:26:05.4496191Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/rust-37302748314.log", + "line": 1033, + "text": "Test (windows-2025)\tRun cargo test --locked --release\t2026-10-05T11:26:32.6684357Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 27.25s\n" + }, + { + "path": "ci-logs/rust-37302748314.log", + "line": 1039, + "text": "Test (windows-2025)\tRun cargo test --locked --release\t2026-10-05T11:26:32.7379243Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/rust-37302748314.log", + "line": 1336, + "text": "Test (ubuntu-24.04)\tRun dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d\t2026-10-05T11:24:48.2875234Z ^[[36;1m if [[ $attempt == 5 ]] || ! grep -Fq 'checksum failed for ' \"$log\" \\^[[0m\n" + }, + { + "path": "ci-logs/rust-37302748314.log", + "line": 1554, + "text": "Test (ubuntu-24.04)\tRun cargo test --locked --release\t2026-10-05T11:25:14.1349679Z test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/rust-37302748314.log", + "line": 1559, + "text": "Test (ubuntu-24.04)\tRun cargo test --locked --release\t2026-10-05T11:25:14.1355976Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "ci-logs/rust-37302748314.log", + "line": 1564, + "text": "Test (ubuntu-24.04)\tRun cargo test --locked --release\t2026-10-05T11:25:14.1447976Z test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "ci-logs/rust-37302748314.log", + "line": 1573, + "text": "Test (ubuntu-24.04)\tRun cargo test --locked --release\t2026-10-05T11:25:42.0487553Z test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 27.91s\n" + }, + { + "path": "ci-logs/rust-37302748314.log", + "line": 1579, + "text": "Test (ubuntu-24.04)\tRun cargo test --locked --release\t2026-10-05T11:25:42.0731042Z test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 20, + "text": "[2026-10-04T16:27:29.537Z] [WARNING] \u26a0\ufe0f SECURITY WARNING: --attach-logs is ENABLED\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 44, + "text": "[2026-10-04T16:27:53.909Z] [INFO] [VERBOSE] agentic-cli-updater: 1 updated, 0 current, 0 failed\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 45, + "text": "[2026-10-04T16:27:53.911Z] [VERBOSE] [VERBOSE] agentic-cli-updater: 1 updated, 0 current, 0 failed\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 103, + "text": "[2026-10-04T16:28:08.826Z] [INFO] \u2139\ufe0f gh auth setup-git could not write the global gitconfig: failed to set up git credential helper: failed to run git: error: could not write config file /home/box/.gitconfig: Device or resource busy\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 333, + "text": "[2026-10-04T16:28:35.282Z] [INFO] - When the user mentions CI failures or asks to investigate logs, consider adding these todos to track the investigation: (1) list recent CI runs with timestamps, (2) download logs from failed runs to the ci-logs/ directory, (3) analyze error messages and identify the root cause, (4) implement a fix, (5) verify that the fix resolves the specific errors found in the logs.\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 335, + "text": "[2026-10-04T16:28:35.282Z] [INFO] - When you see screenshots or images in issue descriptions, pull request descriptions, comments, or discussions, download the image to a local file first, then use the Read tool to view and analyze it. Before reading downloaded images with the Read tool, verify that the file is a valid image rather than HTML by using a CLI tool such as the 'file' command. When corrupted or non-image files, such as GitHub \\\"Not Found\\\" pages saved as `.png`, are read, they can" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 482, + "text": "[2026-10-04T16:28:35.311Z] [INFO] - When the user mentions CI failures or asks to investigate logs, consider adding these todos to track the investigation: (1) list recent CI runs with timestamps, (2) download logs from failed runs to the ci-logs/ directory, (3) analyze error messages and identify the root cause, (4) implement a fix, (5) verify that the fix resolves the specific errors found in the logs.\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 484, + "text": "[2026-10-04T16:28:35.311Z] [INFO] - When you see screenshots or images in issue descriptions, pull request descriptions, comments, or discussions, download the image to a local file first, then use the Read tool to view and analyze it. Before reading downloaded images with the Read tool, verify that the file is a valid image rather than HTML by using a CLI tool such as the 'file' command. When corrupted or non-image files, such as GitHub \"Not Found\" pages saved as `.png`, are read, they can c" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 2044, + "text": "[2026-10-04T16:29:03.509Z] [INFO] \"content\": \"\\nOutput too large (32.7KB). Full output saved to: /home/box/.claude/projects/-tmp-gh-issue-solver-1791131286882/78aa02d9-2054-4be5-9990-31ae739e08df/tool-results/bh6kj2052.txt\\n\\nPreview (first 2KB):\\n//! SQLite implementation for links storage\\n\\nuse crate::{BlogPost, Link, Links, Objects};\\nuse rusqlite::{params, Connection};\\nuse std::path::Path;\\n\\n/// SQLite-based links storage\\npub struct SqliteLinks {\\n conn: Conn" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 2054, + "text": "[2026-10-04T16:29:03.509Z] [INFO] \"stdout\": \"//! SQLite implementation for links storage\\n\\nuse crate::{BlogPost, Link, Links, Objects};\\nuse rusqlite::{params, Connection};\\nuse std::path::Path;\\n\\n/// SQLite-based links storage\\npub struct SqliteLinks {\\n conn: Connection,\\n next_id: u64,\\n}\\n\\nimpl SqliteLinks {\\n /// Create a new SQLite links storage with in-memory database\\n pub fn new_memory() -> Self {\\n let conn = Connection::open_in_memory().expect(\\\"Failed to ope" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 2140, + "text": "[2026-10-04T16:29:04.827Z] [INFO] \"content\": \"#!/usr/bin/env python3\\n\\\"\\\"\\\"Shared benchmark reporting helpers for the SQLite vs Doublets comparison.\\\"\\\"\\\"\\n\\n# The language-specific pipelines parse their own benchmark formats, then use\\n# this module for consistent Markdown tables, speedup annotations, linear and\\n# logarithmic charts, and in-place result-section updates. The report format\\n# follows the sibling LinksPlatform database comparisons.\\n\\nimport os\\nimport re\\nimport shutil\\" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 2150, + "text": "[2026-10-04T16:29:04.827Z] [INFO] \"stdout\": \"#!/usr/bin/env python3\\n\\\"\\\"\\\"Shared benchmark reporting helpers for the SQLite vs Doublets comparison.\\\"\\\"\\\"\\n\\n# The language-specific pipelines parse their own benchmark formats, then use\\n# this module for consistent Markdown tables, speedup annotations, linear and\\n# logarithmic charts, and in-place result-section updates. The report format\\n# follows the sibling LinksPlatform database comparisons.\\n\\nimport os\\nimport re\\nimport shutil\\nfrom" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 2421, + "text": "[2026-10-04T16:29:06.866Z] [INFO] \"content\": \"1\\t//! SQLite implementation for links storage\\n2\\t\\n3\\tuse crate::{BlogPost, Link, Links, Objects};\\n4\\tuse rusqlite::{params, Connection};\\n5\\tuse std::path::Path;\\n6\\t\\n7\\t/// SQLite-based links storage\\n8\\tpub struct SqliteLinks {\\n9\\t conn: Connection,\\n10\\t next_id: u64,\\n11\\t}\\n12\\t\\n13\\timpl SqliteLinks {\\n14\\t /// Create a new SQLite links storage with in-memory database\\n15\\t pub fn new_memory() -> Self {\\n16\\t le" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 2433, + "text": "[2026-10-04T16:29:06.866Z] [INFO] \"content\": \"//! SQLite implementation for links storage\\n\\nuse crate::{BlogPost, Link, Links, Objects};\\nuse rusqlite::{params, Connection};\\nuse std::path::Path;\\n\\n/// SQLite-based links storage\\npub struct SqliteLinks {\\n conn: Connection,\\n next_id: u64,\\n}\\n\\nimpl SqliteLinks {\\n /// Create a new SQLite links storage with in-memory database\\n pub fn new_memory() -> Self {\\n let conn = Connection::open_in_memory().expect(\\\"Failed to " + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 2733, + "text": "[2026-10-04T16:29:10.457Z] [INFO] \"content\": \"\\n\\n \\n Exe\\n net8.0\\n enable\\n /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rusqlite-0.40.2/src/row.rs:285:32\\n |\\n285 | pub fn get(&self, idx: I) -> Result {\\n | " + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 23705, + "text": "[2026-10-04T16:52:15.728Z] [INFO] \"stdout\": \" f32\\n f64\\n i16\\n i32\\n i64\\n i8\\n isize\\n u16\\n and 2 others\\nnote: required by a bound in `Row::<'_>::get`\\n --> /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rusqlite-0.40.2/src/row.rs:285:32\\n |\\n285 | pub fn get(&self, idx: I) -> Result {\\n | " + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 23769, + "text": "[2026-10-04T16:52:15.728Z] [INFO] \"+ _ => panic!(\\\"bits must be 32 or 64\\\"),\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 23800, + "text": "[2026-10-04T16:52:15.728Z] [INFO] \"+ _ => panic!(\\\"category must be links or objects\\\"),\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 24085, + "text": "[2026-10-04T16:52:22.915Z] [INFO] \"content\": \"error[E0119]: conflicting implementations of trait `LinksStorage<_>` for type `SqliteLinks<_>`\\n --> src/links.rs:133:1\\n |\\n 75 | impl LinksStorage for SqliteLinks {\\n | --------------------------------------------------------- first implementation here\\n...\\n133 | impl> LinksStorage for D {\\n--\\nerror[E0308]: mismatched types\\n --> src/harness.rs:317:61\\n |\\n317 | " + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 24095, + "text": "[2026-10-04T16:52:22.915Z] [INFO] \"stdout\": \"error[E0119]: conflicting implementations of trait `LinksStorage<_>` for type `SqliteLinks<_>`\\n --> src/links.rs:133:1\\n |\\n 75 | impl LinksStorage for SqliteLinks {\\n | --------------------------------------------------------- first implementation here\\n...\\n133 | impl> LinksStorage for D {\\n--\\nerror[E0308]: mismatched types\\n --> src/harness.rs:317:61\\n |\\n317 | " + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 24987, + "text": "[2026-10-04T16:53:35.800Z] [INFO] \" _ => panic!(\\\"unknown links variant {variant}\\\"),\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 25065, + "text": "[2026-10-04T16:53:35.800Z] [INFO] \" _ => panic!(\\\"unknown objects variant {variant}\\\"),\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 25520, + "text": "[2026-10-04T16:53:57.386Z] [INFO] \"content\": \" Finished `release` profile [optimized] target(s) in 0.12s\\nthread 'main' (24160) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/split/generic/internal_sources_recursion_less_tree.rs:153:19:\\nindex out of bounds: the len is 1040384 but the index is 1048575\\nnote: run with `RUST_BACKTRACE=1` environment variable to display a backtrace\\nthread 'main' (24163) panicked at /home/box/.cargo/regi" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 25530, + "text": "[2026-10-04T16:53:57.386Z] [INFO] \"stdout\": \" Finished `release` profile [optimized] target(s) in 0.12s\\nthread 'main' (24160) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/split/generic/internal_sources_recursion_less_tree.rs:153:19:\\nindex out of bounds: the len is 1040384 but the index is 1048575\\nnote: run with `RUST_BACKTRACE=1` environment variable to display a backtrace\\nthread 'main' (24163) panicked at /home/box/.cargo/registry/" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 25803, + "text": "[2026-10-04T16:54:04.269Z] [INFO] \"description\": \"Backtrace for split store panic\"\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 25838, + "text": "[2026-10-04T16:54:04.269Z] [INFO] \"description\": \"Backtrace for split store panic\"\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 25850, + "text": "[2026-10-04T16:54:05.712Z] [INFO] \"content\": \"thread 'main' (24457) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/split/generic/internal_sources_recursion_less_tree.rs:153:19:\\nindex out of bounds: the len is 1040384 but the index is 1048575\\nstack backtrace:\\n 0: __rustc::rust_begin_unwind\\n 1: core::panicking::panic_fmt\\n 2: core::panicking::panic_bounds_check\\n 3: &1 | grep -E \\\"ok|panicked|index out\\\" | head -2; done\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 27864, + "text": "[2026-10-04T16:55:43.052Z] [INFO] \"command\": \"cd /tmp/gh-issue-solver-1791131286882/experiments/split_store_delete; for n in 1 2 3 4; do RUST_BACKTRACE=1 ./target/release/split_store_delete split $n swap forward 2>&1 | grep -E \\\"ok|panicked|index out\\\" | head -2; done\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 27877, + "text": "[2026-10-04T16:55:44.689Z] [INFO] \"content\": \"thread 'main' (26083) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/split/generic/internal_sources_recursion_less_tree.rs:153:19:\\nindex out of bounds: the len is 1040384 but the index is 1048575\\nthread 'main' (26087) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/split/generic/internal_sources_recursion_less_tree.rs:153:19:\\nindex out of b" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 27887, + "text": "[2026-10-04T16:55:44.689Z] [INFO] \"stdout\": \"thread 'main' (26083) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/split/generic/internal_sources_recursion_less_tree.rs:153:19:\\nindex out of bounds: the len is 1040384 but the index is 1048575\\nthread 'main' (26087) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/split/generic/internal_sources_recursion_less_tree.rs:153:19:\\nindex out of bounds" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 28787, + "text": "[2026-10-04T16:56:16.153Z] [INFO] \"command\": \"cat > src/main.rs <<'EOF'\\n//! Minimal reproductions of a `doublets` 0.5.0 split store bug: deleting a link panics\\n//! with \\\"index out of bounds\\\" in `InternalSourcesRecursionlessTree` after some updates.\\nuse doublets::{Doublets, mem::Global, split, unit};\\n\\ntype Step = (&'static str, u32, u32, u32);\\n\\nfn run>(mut store: D, steps: &[Step]) -> u32 {\\n for &(operation, id, from, to) in steps {\\n match operation" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 28822, + "text": "[2026-10-04T16:56:16.153Z] [INFO] \"command\": \"cd /tmp/gh-issue-solver-1791131286882/experiments/split_store_delete && cat > src/main.rs <<'EOF'\\n//! Minimal reproductions of a `doublets` 0.5.0 split store bug: deleting a link panics\\n//! with \\\"index out of bounds\\\" in `InternalSourcesRecursionlessTree` after some updates.\\nuse doublets::{Doublets, mem::Global, split, unit};\\n\\ntype Step = (&'static str, u32, u32, u32);\\n\\nfn run>(mut store: D, steps: &[Step]) -> u32 {\\n " + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 29459, + "text": "[2026-10-04T16:58:22.145Z] [INFO] \"content\": \"{\\\"message\\\":\\\"Successfully stopped task: b0h6yvwvf (cat > src/main.rs <<'EOF'\\\\n//! Minimal reproductions of a `doublets` 0.5.0 split store bug: deleting a link panics\\\\n//! with \\\\\\\"index out of bounds\\\\\\\" in `InternalSourcesRecursionlessTree` after some updates.\\\\nuse doublets::{Doublets, mem::Global, split, unit};\\\\n\\\\ntype Step = (&'static str, u32, u32, u32);\\\\n\\\\nfn run>(mut store: D, steps: &[Step]) -> u32 {\\\\n for" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 29468, + "text": "[2026-10-04T16:58:22.145Z] [INFO] \"message\": \"Successfully stopped task: b0h6yvwvf (cat > src/main.rs <<'EOF'\\n//! Minimal reproductions of a `doublets` 0.5.0 split store bug: deleting a link panics\\n//! with \\\"index out of bounds\\\" in `InternalSourcesRecursionlessTree` after some updates.\\nuse doublets::{Doublets, mem::Global, split, unit};\\n\\ntype Step = (&'static str, u32, u32, u32);\\n\\nfn run>(mut store: D, steps: &[Step]) -> u32 {\\n for &(operation, id, from, to) in " + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 29471, + "text": "[2026-10-04T16:58:22.145Z] [INFO] \"command\": \"cat > src/main.rs <<'EOF'\\n//! Minimal reproductions of a `doublets` 0.5.0 split store bug: deleting a link panics\\n//! with \\\"index out of bounds\\\" in `InternalSourcesRecursionlessTree` after some updates.\\nuse doublets::{Doublets, mem::Global, split, unit};\\n\\ntype Step = (&'static str, u32, u32, u32);\\n\\nfn run>(mut store: D, steps: &[Step]) -> u32 {\\n for &(operation, id, from, to) in steps {\\n match operation {\\n " + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 29668, + "text": "[2026-10-04T16:58:27.804Z] [INFO] \"command\": \"python3 - <<'EOF'\\np='src/main.rs'\\ns=open(p).read()\\ns=s.replace(\\\"\\\"\\\" let kind = std::env::args().nth(1).unwrap_or_default();\\n std::panic::set_hook(Box::new(|_| {}));\\n for (name, steps) in scenarios {\\n let result = std::panic::catch_unwind(|| match kind.as_str() {\\n \\\"unit\\\" => run(unit::Store::::new(Global::new()).unwrap(), &steps),\\n _ => run(split::Store::::new(Global::new()," + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 29703, + "text": "[2026-10-04T16:58:27.804Z] [INFO] \"command\": \"cd /tmp/gh-issue-solver-1791131286882/experiments/split_store_delete && python3 - <<'EOF'\\np='src/main.rs'\\ns=open(p).read()\\ns=s.replace(\\\"\\\"\\\" let kind = std::env::args().nth(1).unwrap_or_default();\\n std::panic::set_hook(Box::new(|_| {}));\\n for (name, steps) in scenarios {\\n let result = std::panic::catch_unwind(|| match kind.as_str() {\\n \\\"unit\\\" => run(unit::Store::::new(Global::new()).unwrap(), &steps)," + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 29983, + "text": "[2026-10-04T16:58:47.995Z] [INFO] \"command\": \"sed -i 's| for &(operation, id, from, to) in steps {| for \\\\&(operation, id, from, to) in steps {\\\\n eprintln!(\\\"{operation} {id} {from} {to}\\\");|' src/main.rs && cargo build --release -q && for s in \\\"split 0\\\" \\\"split 3\\\" \\\"split 4\\\" \\\"unit 4\\\"; do echo \\\"== $s\\\"; RUST_BACKTRACE=1 timeout 5 ./target/release/split_store_delete $s 2>&1 | grep -v \\\"at /rustc\\\" | grep -E \\\"^(create|update|delete)|panicked|index| [0-9]+:\\\" | head" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 30018, + "text": "[2026-10-04T16:58:47.995Z] [INFO] \"command\": \"cd /tmp/gh-issue-solver-1791131286882/experiments/split_store_delete && sed -i 's| for &(operation, id, from, to) in steps {| for \\\\&(operation, id, from, to) in steps {\\\\n eprintln!(\\\"{operation} {id} {from} {to}\\\");|' src/main.rs && cargo build --release -q && for s in \\\"split 0\\\" \\\"split 3\\\" \\\"split 4\\\" \\\"unit 4\\\"; do echo \\\"== $s\\\"; RUST_BACKTRACE=1 timeout 5 ./target/release/split_store_delete $s 2>&1 | grep -v \\\"at /rustc\\\" |" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 30044, + "text": "[2026-10-04T16:58:57.805Z] [INFO] \"status\": \"failed\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 30057, + "text": "[2026-10-04T16:58:57.834Z] [INFO] \"content\": \"Exit code 143\\n== split 0\\ncreate 1 1 1\\nupdate 1 1 1\\ndelete 1 0 0\\nthread 'main' (28179) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/split/generic/internal_sources_recursion_less_tree.rs:153:19:\\nindex out of bounds: the len is 1040384 but the index is 1048575\\n 0: __rustc::rust_begin_unwind\\n 1: core::panicking::panic_fmt\\n 2: core::panicking::panic_bounds_check\\n 3: `, exit code 101 is the panic.\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 35171, + "text": "[2026-10-04T17:02:45.446Z] [INFO] \"content\": \"//! Runs every storage through the same lifecycle on a fresh store per repetition:\\n//! a timed batch per operation, each validated against the expected count and checksum.\\n\\nuse crate::{\\n dataset::{self, blog_post, link, mix, scattered},\\n links::{DoubletsLinks, Link, LinksStorage, SqliteLinks},\\n objects::{BlogPostsStorage, DoubletsBlogPosts, SqliteBlogPosts},\\n};\\nuse doublets::{\\n data::LinkReference,\\n mem::{FileMapped, " + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 35181, + "text": "[2026-10-04T17:02:45.446Z] [INFO] \"stdout\": \"//! Runs every storage through the same lifecycle on a fresh store per repetition:\\n//! a timed batch per operation, each validated against the expected count and checksum.\\n\\nuse crate::{\\n dataset::{self, blog_post, link, mix, scattered},\\n links::{DoubletsLinks, Link, LinksStorage, SqliteLinks},\\n objects::{BlogPostsStorage, DoubletsBlogPosts, SqliteBlogPosts},\\n};\\nuse doublets::{\\n data::LinkReference,\\n mem::{FileMapped, Globa" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 35617, + "text": "[2026-10-04T17:04:09.666Z] [INFO] \"content\": \" Compiling sqlite-vs-doublets v0.2.0 (/tmp/gh-issue-solver-1791131286882/rust)\\n Finished `release` profile [optimized] target(s) in 43.59s\\n Running unittests src/lib.rs (target/release/deps/sqlite_vs_doublets-229a1de9b520ac5d)\\n\\nrunning 0 tests\\n\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\n\\n Running unittests src/main.rs (target/release/deps/sqlite_vs_doublets-9e5bf01001ab79" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 35627, + "text": "[2026-10-04T17:04:09.666Z] [INFO] \"stdout\": \" Compiling sqlite-vs-doublets v0.2.0 (/tmp/gh-issue-solver-1791131286882/rust)\\n Finished `release` profile [optimized] target(s) in 43.59s\\n Running unittests src/lib.rs (target/release/deps/sqlite_vs_doublets-229a1de9b520ac5d)\\n\\nrunning 0 tests\\n\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\n\\n Running unittests src/main.rs (target/release/deps/sqlite_vs_doublets-9e5bf01001ab7934)\\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 36505, + "text": "[2026-10-04T17:05:24.405Z] [INFO] \"content\": \"151- }\\n152-\\n153: fn balanced_variant(&mut self, mut layer: Vec) -> T {\\n154- while layer.len() > 1 {\\n155- layer = layer\\n156- .chunks(2)\\n157- .map(|pair| match *pair {\\n158- [source, target] => self.links.get_or_create(source, target).unwrap(),\\n159- [last] => last,\\n160- _ => unreachable!(),\\n161- })\\n162- " + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 36515, + "text": "[2026-10-04T17:05:24.405Z] [INFO] \"stdout\": \"151- }\\n152-\\n153: fn balanced_variant(&mut self, mut layer: Vec) -> T {\\n154- while layer.len() > 1 {\\n155- layer = layer\\n156- .chunks(2)\\n157- .map(|pair| match *pair {\\n158- [source, target] => self.links.get_or_create(source, target).unwrap(),\\n159- [last] => last,\\n160- _ => unreachable!(),\\n161- })\\n162- " + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 37344, + "text": "[2026-10-04T17:05:38.147Z] [INFO] \" _ => panic!(\\\"unknown links variant {variant}\\\"),\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 39136, + "text": "[2026-10-04T17:05:58.929Z] [INFO] \"status\": \"failed\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 39147, + "text": "[2026-10-04T17:05:58.936Z] [INFO] \"status\": \"failed\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 39149, + "text": "[2026-10-04T17:05:58.936Z] [INFO] \"summary\": \"Background command \\\"Time links benchmarks at 100k and 1M\\\" failed with exit code 1\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 39411, + "text": "[2026-10-04T17:06:01.371Z] [INFO] \"status\": \"failed\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 39422, + "text": "[2026-10-04T17:06:01.384Z] [INFO] \"status\": \"failed\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 39424, + "text": "[2026-10-04T17:06:01.384Z] [INFO] \"summary\": \"Background command \\\"Time objects benchmarks at 10k\\\" failed with exit code 1\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 39442, + "text": "[2026-10-04T17:06:01.690Z] [INFO] \"description\": \"Inspect failed sizing run\"\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 39477, + "text": "[2026-10-04T17:06:01.690Z] [INFO] \"description\": \"Inspect failed sizing run\"\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 41858, + "text": "[2026-10-04T17:08:19.677Z] [INFO] \"text\": \"This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.\\n\\nSummary:\\n1. **Primary request and intent**\\n - Solve GitHub issue https://github.com/linksplatform/Comparisons.SQLiteVSDoublets/issues/107.\\n - Working directory: /tmp/gh-issue-solver-1791131286882. Branch: issue-107-bce58c21006b.\\n - Draft PR #108 already exists: update it with `gh pr " + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 42671, + "text": "[2026-10-04T17:08:29.512Z] [INFO] \"content\": \"//! Deterministic data shared by every storage and by the C# implementation.\\n\\nconst GOLDEN_GAMMA: u64 = 0x9E37_79B9_7F4A_7C15;\\n\\npub fn splitmix64(x: u64) -> u64 {\\n let mut z = x.wrapping_add(GOLDEN_GAMMA);\\n z = (z ^ (z >> 30)).wrapping_mul(0xBF58_476D_1CE4_E5B9);\\n z = (z ^ (z >> 27)).wrapping_mul(0x94D0_49BB_1331_11EB);\\n z ^ (z >> 31)\\n}\\n\\n/// The `(from, to)` pair of the link with id `i`: both reference already created i" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 42681, + "text": "[2026-10-04T17:08:29.512Z] [INFO] \"stdout\": \"//! Deterministic data shared by every storage and by the C# implementation.\\n\\nconst GOLDEN_GAMMA: u64 = 0x9E37_79B9_7F4A_7C15;\\n\\npub fn splitmix64(x: u64) -> u64 {\\n let mut z = x.wrapping_add(GOLDEN_GAMMA);\\n z = (z ^ (z >> 30)).wrapping_mul(0xBF58_476D_1CE4_E5B9);\\n z = (z ^ (z >> 27)).wrapping_mul(0x94D0_49BB_1331_11EB);\\n z ^ (z >> 31)\\n}\\n\\n/// The `(from, to)` pair of the link with id `i`: both reference already created ids\\n/" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 47108, + "text": "[2026-10-04T17:12:05.774Z] [INFO] \"content\": \"Exit code 2\\nTraceback (most recent call last):\\n File \\\"\\\", line 3, in \\nTypeError: %i format: a real number is required, not str\\nugrep: warning: Dataset.cs: No such file or directory\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 47118, + "text": "[2026-10-04T17:12:05.774Z] [INFO] \"tool_use_result\": \"Error: Exit code 2\\nTraceback (most recent call last):\\n File \\\"\\\", line 3, in \\nTypeError: %i format: a real number is required, not str\\nugrep: warning: Dataset.cs: No such file or directory\"\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 47124, + "text": "[2026-10-04T17:12:05.782Z] [INFO] ugrep: warning: Dataset.cs: No such file or directory\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 53682, + "text": "[2026-10-04T17:17:47.737Z] [INFO] \"text\": \"This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.\\n\\nSummary:\\n1. **Primary Request and Intent**\\n - Solve GitHub issue https://github.com/linksplatform/Comparisons.SQLiteVSDoublets/issues/107.\\n - Working directory: /tmp/gh-issue-solver-1791131286882.\\n - Branch: issue-107-bce58c21006b.\\n - Draft PR #108 already exists. Update it wi" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 55600, + "text": "[2026-10-04T17:18:51.642Z] [INFO] \"content\": \"Running tests from /tmp/gh-issue-solver-1791131286882/csharp/SQLiteVSDoublets.Tests/bin/Debug/net10.0/SQLiteVSDoublets.Tests.dll (net10.0|x64)\\nfailed Comparisons.SQLiteVSDoublets.Tests.StoragesTests.EveryObjectsVariantPassesTheLifecycle(variant: \\\"Doublets_United_Volatile_Cached\\\") (396ms)\\n from /tmp/gh-issue-solver-1791131286882/csharp/SQLiteVSDoublets.Tests/bin/Debug/net10.0/SQLiteVSDoublets.Tests.dll (net10.0|x64)\\n Xunit.MicrosoftTest" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 55610, + "text": "[2026-10-04T17:18:51.642Z] [INFO] \"stdout\": \"Running tests from /tmp/gh-issue-solver-1791131286882/csharp/SQLiteVSDoublets.Tests/bin/Debug/net10.0/SQLiteVSDoublets.Tests.dll (net10.0|x64)\\nfailed Comparisons.SQLiteVSDoublets.Tests.StoragesTests.EveryObjectsVariantPassesTheLifecycle(variant: \\\"Doublets_United_Volatile_Cached\\\") (396ms)\\n from /tmp/gh-issue-solver-1791131286882/csharp/SQLiteVSDoublets.Tests/bin/Debug/net10.0/SQLiteVSDoublets.Tests.dll (net10.0|x64)\\n Xunit.MicrosoftTestingPl" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 61345, + "text": "[2026-10-04T17:34:15.732Z] [STDOUT] [log_8fa259, anthropic-workspace-id: \"wrkspc_0117gBnPr68DBsCrmom3Bxq6\", request-id: \"req_011CfhbhiRiz9cL8fTgW9TDS\"] post https://api.anthropic.com/v1/messages?beta=true failed with status 404 in 5305ms - error; not retryable\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 62013, + "text": "[2026-10-04T17:34:49.418Z] [INFO] \"content\": \"SQLiteVSDoublets/Links.cs:111: public void Delete(T id) => links.Delete(id, handler: null);\\nSQLiteVSDoublets/Objects.cs:180: _links.Delete(_links.SingleOrDefault([_any, objectProperty, _any])![0], handler: null);\\nSQLiteVSDoublets/Objects.cs:181: _links.Delete(objectProperty, handler: null);\\nSQLiteVSDoublets/Objects.cs:183: _links.Delete(id, handler: null);\\nRunning tests from /tmp/gh-issue-solver-17911312868" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 62023, + "text": "[2026-10-04T17:34:49.418Z] [INFO] \"stdout\": \"SQLiteVSDoublets/Links.cs:111: public void Delete(T id) => links.Delete(id, handler: null);\\nSQLiteVSDoublets/Objects.cs:180: _links.Delete(_links.SingleOrDefault([_any, objectProperty, _any])![0], handler: null);\\nSQLiteVSDoublets/Objects.cs:181: _links.Delete(objectProperty, handler: null);\\nSQLiteVSDoublets/Objects.cs:183: _links.Delete(id, handler: null);\\nRunning tests from /tmp/gh-issue-solver-1791131286882/cs" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 64387, + "text": "[2026-10-04T17:36:37.108Z] [INFO] \"content\": \"Running tests from /tmp/gh-issue-solver-1791131286882/csharp/SQLiteVSDoublets.Tests/bin/Debug/net10.0/SQLiteVSDoublets.Tests.dll (net10.0|x64)\\n[+0/x0/?0] SQLiteVSDoublets.Tests.dll (net10.0|x64)(2s)\\n\\n[+2/x0/?0] SQLiteVSDoublets.Tests.dll (net10.0|x64)(5s)\\n\\n[+2/x0/?0] SQLiteVSDoublets.Tests.dll (net10.0|x64)(8s)\\n\\n[+3/x0/?0] SQLiteVSDoublets.Tests.dll (net10.0|x64)(11s)\\n\\n[+7/x0/?0] SQLiteVSDoublets.Tests.dll (net10.0|x64)(14s)\\n\\n[+13/" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 64397, + "text": "[2026-10-04T17:36:37.108Z] [INFO] \"stdout\": \"Running tests from /tmp/gh-issue-solver-1791131286882/csharp/SQLiteVSDoublets.Tests/bin/Debug/net10.0/SQLiteVSDoublets.Tests.dll (net10.0|x64)\\n[+0/x0/?0] SQLiteVSDoublets.Tests.dll (net10.0|x64)(2s)\\n\\n[+2/x0/?0] SQLiteVSDoublets.Tests.dll (net10.0|x64)(5s)\\n\\n[+2/x0/?0] SQLiteVSDoublets.Tests.dll (net10.0|x64)(8s)\\n\\n[+3/x0/?0] SQLiteVSDoublets.Tests.dll (net10.0|x64)(11s)\\n\\n[+7/x0/?0] SQLiteVSDoublets.Tests.dll (net10.0|x64)(14s)\\n\\n[+13/x0/?0" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 65288, + "text": "[2026-10-04T17:36:55.992Z] [INFO] \"content\": \"60228\\n |_| SqliteBlogPosts::::in_memory(),\\n objects_lifecycle,\\n ),\\n \\\"SQLite_File\\\" => measure(\\n variant,\\n n,\\n repetitions,\\n directory,\\n |dir| SqliteBlogPosts::::open(file(dir, \\\"blog_posts.db\\\")),\\n objects_lifecycle,\\n ),\\n \\\"Doublets_United_Volatile\\\" => measure(\\n variant,\\n n,\\n " + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 65298, + "text": "[2026-10-04T17:36:55.992Z] [INFO] \"stdout\": \"60228\\n |_| SqliteBlogPosts::::in_memory(),\\n objects_lifecycle,\\n ),\\n \\\"SQLite_File\\\" => measure(\\n variant,\\n n,\\n repetitions,\\n directory,\\n |dir| SqliteBlogPosts::::open(file(dir, \\\"blog_posts.db\\\")),\\n objects_lifecycle,\\n ),\\n \\\"Doublets_United_Volatile\\\" => measure(\\n variant,\\n n,\\n re" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 65590, + "text": "[2026-10-04T17:37:06.890Z] [INFO] \"content\": \"//! Runs every storage through the same lifecycle on a fresh store per repetition:\\n//! a timed batch per operation, each validated against the expected count and checksum.\\n\\nuse crate::{\\n dataset::{self, blog_post, link, mix, scattered},\\n links::{DoubletsLinks, Link, LinksStorage, SqliteLinks},\\n objects::{BlogPostsStorage, DoubletsBlogPosts, SqliteBlogPosts},\\n};\\nuse doublets::{\\n data::LinkReference,\\n mem::{FileMapped, " + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 65600, + "text": "[2026-10-04T17:37:06.890Z] [INFO] \"stdout\": \"//! Runs every storage through the same lifecycle on a fresh store per repetition:\\n//! a timed batch per operation, each validated against the expected count and checksum.\\n\\nuse crate::{\\n dataset::{self, blog_post, link, mix, scattered},\\n links::{DoubletsLinks, Link, LinksStorage, SqliteLinks},\\n objects::{BlogPostsStorage, DoubletsBlogPosts, SqliteBlogPosts},\\n};\\nuse doublets::{\\n data::LinkReference,\\n mem::{FileMapped, Globa" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 65833, + "text": "[2026-10-04T17:37:20.018Z] [INFO] \"command\": \"python3 - <<'EOF'\\nimport re\\np='src/harness.rs'\\ns=open(p).read()\\ni=s.index(\\\"pub fn measure_objects\\\")\\nhead,tail=s[:i],s[i:]\\ntail=tail.replace(\\\"unit::Store::::new(Global::new()).unwrap()\\\",\\\"unit::Store::::with_constants(Global::new(), LinksConstants::external()).unwrap()\\\")\\ntail=tail.replace('unit::Store::::new(mapped(dir, \\\"links.links\\\")).unwrap()','unit::Store::::with_constants(mapped(dir, \\\"links.links\\\")" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 65869, + "text": "[2026-10-04T17:37:20.018Z] [INFO] \"command\": \"cd /tmp/gh-issue-solver-1791131286882/rust && python3 - <<'EOF'\\nimport re\\np='src/harness.rs'\\ns=open(p).read()\\ni=s.index(\\\"pub fn measure_objects\\\")\\nhead,tail=s[:i],s[i:]\\ntail=tail.replace(\\\"unit::Store::::new(Global::new()).unwrap()\\\",\\\"unit::Store::::with_constants(Global::new(), LinksConstants::external()).unwrap()\\\")\\ntail=tail.replace('unit::Store::::new(mapped(dir, \\\"links.links\\\")).unwrap()','unit::Store::::w" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 65940, + "text": "[2026-10-04T17:38:52.171Z] [INFO] \"content\": \" Checking rusqlite v0.40.2\\n Checking sqlite-vs-doublets v0.2.0 (/tmp/gh-issue-solver-1791131286882/rust)\\n Finished `dev` profile [unoptimized + debuginfo] target(s) in 28.84s\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\ntest result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtere" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 65950, + "text": "[2026-10-04T17:38:52.171Z] [INFO] \"stdout\": \" Checking rusqlite v0.40.2\\n Checking sqlite-vs-doublets v0.2.0 (/tmp/gh-issue-solver-1791131286882/rust)\\n Finished `dev` profile [unoptimized + debuginfo] target(s) in 28.84s\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\ntest result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 68736, + "text": "[2026-10-04T17:40:10.163Z] [INFO] \"content\": \"//! Minimal reproductions of a `doublets` 0.5.0 split store bug.\\n//!\\n//! `split::Store::update_links` detaches the link and only then asks `is_virtual(new_source)`,\\n//! which is `is_unused`: `size_as_target == 0 && source != 0`. Right after the detach that is true\\n//! for the link itself, so updating a link to reference itself attaches it to the external\\n//! (header) trees. A later delete looks for it in its own internal trees and panics" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 68746, + "text": "[2026-10-04T17:40:10.163Z] [INFO] \"stdout\": \"//! Minimal reproductions of a `doublets` 0.5.0 split store bug.\\n//!\\n//! `split::Store::update_links` detaches the link and only then asks `is_virtual(new_source)`,\\n//! which is `is_unused`: `size_as_target == 0 && source != 0`. Right after the detach that is true\\n//! for the link itself, so updating a link to reference itself attaches it to the external\\n//! (header) trees. A later delete looks for it in its own internal trees and panics with" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 71434, + "text": "[2026-10-04T17:52:12.811Z] [STDOUT] [log_2fa23f, anthropic-workspace-id: \"wrkspc_0117gBnPr68DBsCrmom3Bxq6\", request-id: \"req_011Cfhd57GrKjxzxrtrGJQLC\"] post https://api.anthropic.com/v1/messages?beta=true failed with status 404 in 325ms - error; not retryable\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 72686, + "text": "[2026-10-04T17:52:39.071Z] [INFO] \"content\": \" 318 scripts/benchmark_report.py\\n 96 scripts/test_benchmark_report.py\\n 414 total\\n#!/usr/bin/env python3\\n\\\"\\\"\\\"Shared benchmark reporting helpers for the SQLite vs Doublets comparison.\\\"\\\"\\\"\\n\\n# The language-specific pipelines parse their own benchmark formats, then use\\n# this module for consistent Markdown tables, speedup annotations, linear and\\n# logarithmic charts, and in-place result-section updates. The report format\\n# follows" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 72696, + "text": "[2026-10-04T17:52:39.071Z] [INFO] \"stdout\": \" 318 scripts/benchmark_report.py\\n 96 scripts/test_benchmark_report.py\\n 414 total\\n#!/usr/bin/env python3\\n\\\"\\\"\\\"Shared benchmark reporting helpers for the SQLite vs Doublets comparison.\\\"\\\"\\\"\\n\\n# The language-specific pipelines parse their own benchmark formats, then use\\n# this module for consistent Markdown tables, speedup annotations, linear and\\n# logarithmic charts, and in-place result-section updates. The report format\\n# follows the " + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 75284, + "text": "[2026-10-04T17:54:56.492Z] [INFO] \"- print(\\\"Warning: matplotlib/numpy not installed, skipping chart generation\\\")\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 75817, + "text": "[2026-10-04T17:54:56.492Z] [INFO] \"originalFile\": \"#!/usr/bin/env python3\\n\\\"\\\"\\\"Shared benchmark reporting helpers for the SQLite vs Doublets comparison.\\\"\\\"\\\"\\n\\n# The language-specific pipelines parse their own benchmark formats, then use\\n# this module for consistent Markdown tables, speedup annotations, linear and\\n# logarithmic charts, and in-place result-section updates. The report format\\n# follows the sibling LinksPlatform database comparisons.\\n\\nimport os\\nimport re\\nimport shutil" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 81767, + "text": "[2026-10-04T18:01:29.691Z] [INFO] \"status\": \"failed\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 86346, + "text": "[2026-10-04T18:08:15.338Z] [INFO] \"status\": \"failed\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 92485, + "text": "[2026-10-04T18:13:40.720Z] [INFO] \"content\": \"Test run summary: Passed!\\n total: 28\\n failed: 0\\n succeeded: 28\\n skipped: 0\\n duration: 27s 753ms\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 92495, + "text": "[2026-10-04T18:13:40.720Z] [INFO] \"stdout\": \"Test run summary: Passed!\\n total: 28\\n failed: 0\\n succeeded: 28\\n skipped: 0\\n duration: 27s 753ms\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 94816, + "text": "[2026-10-04T18:14:56.062Z] [INFO] \"content\": \"//! Usage: sqlite-vs-doublets <32|64> [--work N | --repetitions N]\\n//! [--variants A,B] [--directory DIR] [--output FILE]\\n//!\\n//! Repetitions default to `work / size` clamped to `1..=MAX_REPETITIONS`, so smaller sizes get more,\\n//! but not endless, repetitions.\\n\\nuse doublets::data::LinkReference;\\nuse serde_json::json;\\nuse sqlite_vs_doublets::harness::{self, LINKS_VARIANTS, Measurement, OBJECTS_VARIANTS};\\" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 94826, + "text": "[2026-10-04T18:14:56.062Z] [INFO] \"stdout\": \"//! Usage: sqlite-vs-doublets <32|64> [--work N | --repetitions N]\\n//! [--variants A,B] [--directory DIR] [--output FILE]\\n//!\\n//! Repetitions default to `work / size` clamped to `1..=MAX_REPETITIONS`, so smaller sizes get more,\\n//! but not endless, repetitions.\\n\\nuse doublets::data::LinkReference;\\nuse serde_json::json;\\nuse sqlite_vs_doublets::harness::{self, LINKS_VARIANTS, Measurement, OBJECTS_VARIANTS};\\nuse " + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 101156, + "text": "[2026-10-04T18:19:35.912Z] [INFO] \"content\": \"name: Benchmarks\\n\\n# Every job measures one README table (language, category, bits, size) with all its variants on one runner,\\n# so that the variants of a table are compared on the same machine. Pull requests run the whole pipeline\\n# on small sizes; pushes to main publish the results to README.md and README.ru.md.\\non:\\n push:\\n branches: [main]\\n paths: ['rust/**', 'csharp/**', 'scripts/**', '.github/workflows/benchmarks.yml']\\n " + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 101191, + "text": "[2026-10-04T18:19:35.912Z] [INFO] \"content\": \"name: Benchmarks\\n\\n# Every job measures one README table (language, category, bits, size) with all its variants on one runner,\\n# so that the variants of a table are compared on the same machine. Pull requests run the whole pipeline\\n# on small sizes; pushes to main publish the results to README.md and README.ru.md.\\non:\\n push:\\n branches: [main]\\n paths: ['rust/**', 'csharp/**', 'scripts/**', '.github/workflows/benchmarks.yml']\\n pul" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 101214, + "text": "[2026-10-04T18:19:36.019Z] [INFO] \"content\": \"name: Benchmarks\\n\\n# Every job measures one README table (language, category, bits, size) with all its variants on one runner,\\n# so that the variants of a table are compared on the same machine. Pull requests run the whole pipeline\\n# on small sizes; pushes to main publish the results to README.md and README.ru.md.\\non:\\n push:\\n branches: [main]\\n paths: ['rust/**', 'csharp/**', 'scripts/**', '.github/workflows/benchmarks.yml']\\n pull_" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 110866, + "text": "[2026-10-04T18:26:42.678Z] [INFO] \"content\": \"rust=0\\n\\nrunning 0 tests\\n\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\n\\ncs=0\\n/tmp/gh-issue-solver-1791131286882/csharp/SQLiteVSDoublets.Tests/bin/Release/net10.0/SQLiteVSDoublets.Tests.dll (net10.0|x64) passed (22s 846ms)\\n\\nTest run summary: Passed!\\n total: 28\\n failed: 0\\n succeeded: 28\\n skipped: 0\\n duration: 24s 747ms\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 110876, + "text": "[2026-10-04T18:26:42.678Z] [INFO] \"stdout\": \"rust=0\\n\\nrunning 0 tests\\n\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\n\\ncs=0\\n/tmp/gh-issue-solver-1791131286882/csharp/SQLiteVSDoublets.Tests/bin/Release/net10.0/SQLiteVSDoublets.Tests.dll (net10.0|x64) passed (22s 846ms)\\n\\nTest run summary: Passed!\\n total: 28\\n failed: 0\\n succeeded: 28\\n skipped: 0\\n duration: 24s 747ms\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 111137, + "text": "[2026-10-04T18:26:48.458Z] [INFO] \"content\": \"test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\ntest result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 7.29s\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\nremote: https://github.com/linksplatform/Comparisons.SQLiteVS" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 111147, + "text": "[2026-10-04T18:26:48.458Z] [INFO] \"stdout\": \"test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\ntest result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 7.29s\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\nremote: https://github.com/linksplatform/Comparisons.SQLiteVSDoubl" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 119260, + "text": "[2026-10-04T18:37:20.347Z] [INFO] \"text\": \"Rust objects at 1M failed within two minutes. I'll download the logs:\"\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 119302, + "text": "[2026-10-04T18:37:22.329Z] [INFO] \"command\": \"mkdir -p ci-logs && gh run view 37224809082 --repo linksplatform/Comparisons.SQLiteVSDoublets --json jobs --jq '.jobs[] | select(.conclusion==\\\"failure\\\") | .databaseId' | while read j; do gh run view --repo linksplatform/Comparisons.SQLiteVSDoublets --job $j --log > ci-logs/benchmarks-$j.log; done; ls -la ci-logs; grep -h -i -B2 -A12 \\\"panicked\\\\|error\\\" ci-logs/benchmarks-*.log | head -60\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 119303, + "text": "[2026-10-04T18:37:22.329Z] [INFO] \"description\": \"Download failed job logs and find errors\"\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 119337, + "text": "[2026-10-04T18:37:22.329Z] [INFO] \"command\": \"cd /tmp/gh-issue-solver-1791131286882 && mkdir -p ci-logs && gh run view 37224809082 --repo linksplatform/Comparisons.SQLiteVSDoublets --json jobs --jq '.jobs[] | select(.conclusion==\\\"failure\\\") | .databaseId' | while read j; do gh run view --repo linksplatform/Comparisons.SQLiteVSDoublets --job $j --log > ci-logs/benchmarks-$j.log; done; ls -la ci-logs; grep -h -i -B2 -A12 \\\"panicked\\\\|error\\\" ci-logs/benchmarks-*.log | head -60\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 119338, + "text": "[2026-10-04T18:37:22.329Z] [INFO] \"description\": \"Download failed job logs and find errors\"\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 119352, + "text": "[2026-10-04T18:37:25.458Z] [INFO] \"description\": \"Download failed job logs and find errors\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 119365, + "text": "[2026-10-04T18:37:27.245Z] [INFO] \"summary\": \"Download failed job logs and find errors\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 119547, + "text": "[2026-10-04T18:37:29.771Z] [INFO] \"command\": \"for j in 111502160295 111502160318; do gh api repos/linksplatform/Comparisons.SQLiteVSDoublets/actions/jobs/$j/logs > ci-logs/benchmarks-$j.log 2>&1; done; wc -l ci-logs/*; grep -h -i -B3 -A12 \\\"panicked\\\\|##\\\\[error\\\\]\\\" ci-logs/benchmarks-111502160295.log | head -50\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 119582, + "text": "[2026-10-04T18:37:29.771Z] [INFO] \"command\": \"cd /tmp/gh-issue-solver-1791131286882 && for j in 111502160295 111502160318; do gh api repos/linksplatform/Comparisons.SQLiteVSDoublets/actions/jobs/$j/logs > ci-logs/benchmarks-$j.log 2>&1; done; wc -l ci-logs/*; grep -h -i -B3 -A12 \\\"panicked\\\\|##\\\\[error\\\\]\\\" ci-logs/benchmarks-111502160295.log | head -50\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 120069, + "text": "[2026-10-04T18:37:39.415Z] [INFO] \"text\": \"Exit code 101 means a Rust panic. I'll fetch the raw log:\"\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 120111, + "text": "[2026-10-04T18:37:41.370Z] [INFO] \"command\": \"url=$(curl -sI -H \\\"Authorization: [REDACTED] $(gh auth token)\\\" https://api.github.com/repos/linksplatform/Comparisons.SQLiteVSDoublets/actions/jobs/111502160295/logs | grep -i '^location' | cut -d' ' -f2 | tr -d '\\\\r'); curl -s \\\"$url\\\" > ci-logs/benchmarks-111502160295.log; wc -l ci-logs/benchmarks-111502160295.log; grep -n -i -A10 \\\"panicked\\\" ci-logs/benchmarks-111502160295.log | head -30\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 120112, + "text": "[2026-10-04T18:37:41.370Z] [INFO] \"description\": \"Download raw job log and find panic\"\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 120146, + "text": "[2026-10-04T18:37:41.370Z] [INFO] \"command\": \"cd /tmp/gh-issue-solver-1791131286882 && url=$(curl -sI -H \\\"Authorization: [REDACTED] $(gh auth token)\\\" https://api.github.com/repos/linksplatform/Comparisons.SQLiteVSDoublets/actions/jobs/111502160295/logs | grep -i '^location' | cut -d' ' -f2 | tr -d '\\\\r'); curl -s \\\"$url\\\" > ci-logs/benchmarks-111502160295.log; wc -l ci-logs/benchmarks-111502160295.log; grep -n -i -A10 \\\"panicked\\\" ci-logs/benchmarks-111502160295.log | head -30\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 120147, + "text": "[2026-10-04T18:37:41.370Z] [INFO] \"description\": \"Download raw job log and find panic\"\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 120164, + "text": "[2026-10-04T18:37:44.015Z] [INFO] \"content\": \"553 ci-logs/benchmarks-111502160295.log\\n517:2026-10-04T18:33:49.2134804Z thread 'main' (3151) panicked at /home/runner/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/unit/generic/sources_recursionless_size_balanced_tree.rs:231:19:\\n518-2026-10-04T18:33:49.2136098Z index out of bounds: the len is 1040384 but the index is 1040384\\n519-2026-10-04T18:33:49.2136783Z note: run with `RUST_BACKTRACE=1` environment variab" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 120174, + "text": "[2026-10-04T18:37:44.015Z] [INFO] \"stdout\": \"553 ci-logs/benchmarks-111502160295.log\\n517:2026-10-04T18:33:49.2134804Z thread 'main' (3151) panicked at /home/runner/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/unit/generic/sources_recursionless_size_balanced_tree.rs:231:19:\\n518-2026-10-04T18:33:49.2136098Z index out of bounds: the len is 1040384 but the index is 1040384\\n519-2026-10-04T18:33:49.2136783Z note: run with `RUST_BACKTRACE=1` environment variable to" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 120335, + "text": "[2026-10-04T18:37:45.769Z] [INFO] \"description\": \"Show log lines before panic\"\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 120370, + "text": "[2026-10-04T18:37:45.769Z] [INFO] \"description\": \"Show log lines before panic\"\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 120387, + "text": "[2026-10-04T18:37:46.809Z] [INFO] \"content\": \"\\u001b[36;1mname=objects-rust-32-1000000\\u001b[0m\\n\\u001b[36;1mecho \\\"NAME=$name\\\" >> \\\"$GITHUB_ENV\\\"\\u001b[0m\\n\\u001b[36;1m$BENCHMARK objects 32 1000000 \\\\\\u001b[0m\\n\\u001b[36;1m --directory \\\"$RUNNER_TEMP/storage\\\" --output \\\"$RUNNER_TEMP/measured.json\\\"\\u001b[0m\\n\\u001b[36;1mmachine=\\\"$(. /etc/os-release && echo \\\"$PRETTY_NAME\\\"), $(lscpu | sed -n 's/^Model name: *//p' | head -1)\\\"\\u001b[0m\\n\\u001b[36;1mmachine=\\\"$machine, $(nproc) cores," + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 120397, + "text": "[2026-10-04T18:37:46.809Z] [INFO] \"stdout\": \"\\u001b[36;1mname=objects-rust-32-1000000\\u001b[0m\\n\\u001b[36;1mecho \\\"NAME=$name\\\" >> \\\"$GITHUB_ENV\\\"\\u001b[0m\\n\\u001b[36;1m$BENCHMARK objects 32 1000000 \\\\\\u001b[0m\\n\\u001b[36;1m --directory \\\"$RUNNER_TEMP/storage\\\" --output \\\"$RUNNER_TEMP/measured.json\\\"\\u001b[0m\\n\\u001b[36;1mmachine=\\\"$(. /etc/os-release && echo \\\"$PRETTY_NAME\\\"), $(lscpu | sed -n 's/^Model name: *//p' | head -1)\\\"\\u001b[0m\\n\\u001b[36;1mmachine=\\\"$machine, $(nproc) cores, $(aw" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 120811, + "text": "[2026-10-04T18:37:57.948Z] [INFO] \"thinking\": \"Found a real panic in doublets 0.5.0: the united store crashes partway through creating 1M blog posts with an index-out-of-bounds error in `sources_recursionless_size_balanced_tree.rs:231`. I'll check the 64-bit job and try to reproduce it locally with a backtrace.\\n\\n\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 120858, + "text": "[2026-10-04T18:37:59.078Z] [INFO] \"command\": \"url=$(curl -sI -H \\\"Authorization: [REDACTED] $(gh auth token)\\\" https://api.github.com/repos/linksplatform/Comparisons.SQLiteVSDoublets/actions/jobs/111502160318/logs | grep -i '^location' | cut -d' ' -f2 | tr -d '\\\\r'); curl -s \\\"$url\\\" > ci-logs/benchmarks-111502160318.log; grep -A2 \\\"SQLite_File #1\\\\|panicked\\\" ci-logs/benchmarks-111502160318.log | cut -c 30- | head; sed -n '/pub fn \\\\|^fn /p' ~/.cargo/registry/src/*/doublets-0.5.0/src/" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 120859, + "text": "[2026-10-04T18:37:59.078Z] [INFO] \"description\": \"Check 64-bit log and library source at panic\"\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 120893, + "text": "[2026-10-04T18:37:59.078Z] [INFO] \"command\": \"cd /tmp/gh-issue-solver-1791131286882 && url=$(curl -sI -H \\\"Authorization: [REDACTED] $(gh auth token)\\\" https://api.github.com/repos/linksplatform/Comparisons.SQLiteVSDoublets/actions/jobs/111502160318/logs | grep -i '^location' | cut -d' ' -f2 | tr -d '\\\\r'); curl -s \\\"$url\\\" > ci-logs/benchmarks-111502160318.log; grep -A2 \\\"SQLite_File #1\\\\|panicked\\\" ci-logs/benchmarks-111502160318.log | cut -c 30- | head; sed -n '/pub fn \\\\|^fn /p' ~/.car" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 120894, + "text": "[2026-10-04T18:37:59.078Z] [INFO] \"description\": \"Check 64-bit log and library source at panic\"\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 120911, + "text": "[2026-10-04T18:38:02.167Z] [INFO] \"content\": \"SQLite_File #1: create 5432 ns/op, read_all 526 ns/op, read_by_id 3348 ns/op, delete 13652 ns/op\\n\\nthread 'main' (2959) panicked at /home/runner/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/unit/generic/sources_recursionless_size_balanced_tree.rs:231:19:\\nindex out of bounds: the len is 1040384 but the index is 1040384\\nnote: run with `RUST_BACKTRACE=1` environment variable to display a backtrace\\n pub fn ne" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 120921, + "text": "[2026-10-04T18:38:02.167Z] [INFO] \"stdout\": \"SQLite_File #1: create 5432 ns/op, read_all 526 ns/op, read_by_id 3348 ns/op, delete 13652 ns/op\\n\\nthread 'main' (2959) panicked at /home/runner/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/unit/generic/sources_recursionless_size_balanced_tree.rs:231:19:\\nindex out of bounds: the len is 1040384 but the index is 1040384\\nnote: run with `RUST_BACKTRACE=1` environment variable to display a backtrace\\n pub fn new(con" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 121399, + "text": "[2026-10-04T18:38:23.408Z] [INFO] \"description\": \"Reproduce united objects panic at 1M posts\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 121435, + "text": "[2026-10-04T18:38:23.408Z] [INFO] \"description\": \"Reproduce united objects panic at 1M posts\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 121450, + "text": "[2026-10-04T18:38:26.386Z] [INFO] \"description\": \"Reproduce united objects panic at 1M posts\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 121463, + "text": "[2026-10-04T18:38:26.567Z] [INFO] \"summary\": \"Reproduce united objects panic at 1M posts\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 121475, + "text": "[2026-10-04T18:38:26.584Z] [INFO] \"content\": \"thread 'main' (111708) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/unit/store.rs:153:55:\\nData part should be in data memory\\nstack backtrace:\\n 0: __rustc::rust_begin_unwind\\n 1: core::panicking::panic_fmt\\n 2: core::option::expect_failed\\n 3: >> as doublets::data::traits::Link" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 121485, + "text": "[2026-10-04T18:38:26.584Z] [INFO] \"stdout\": \"thread 'main' (111708) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/unit/store.rs:153:55:\\nData part should be in data memory\\nstack backtrace:\\n 0: __rustc::rust_begin_unwind\\n 1: core::panicking::panic_fmt\\n 2: core::option::expect_failed\\n 3: >> as doublets::data::traits::Links(\\n variant: &'static str,\\n n: u64,\\n repetitions: usize,\\n directory: &Path,\\n) -> Measurement {\\n let cached = variant.ends_with(\\\"_Cached\\\");\\n match variant\\n .trim_end_matches(\\\"_Cached\\\")\\n .trim_end_matches(\\\"_Uncached\\\")\\n {\\n \\\"SQLite_Memory\\\" => measure(\\n variant,\\n n,\\n repetitions,\\n directory,\\n " + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 121828, + "text": "[2026-10-04T18:38:34.719Z] [INFO] \"stdout\": \"pub fn measure_objects(\\n variant: &'static str,\\n n: u64,\\n repetitions: usize,\\n directory: &Path,\\n) -> Measurement {\\n let cached = variant.ends_with(\\\"_Cached\\\");\\n match variant\\n .trim_end_matches(\\\"_Cached\\\")\\n .trim_end_matches(\\\"_Uncached\\\")\\n {\\n \\\"SQLite_Memory\\\" => measure(\\n variant,\\n n,\\n repetitions,\\n directory,\\n |_" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 122516, + "text": "[2026-10-04T18:39:35.094Z] [INFO] \"text\": \"This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.\\n\\nSummary:\\n1. **Primary Request and Intent**\\n - Solve GitHub issue https://github.com/linksplatform/Comparisons.SQLiteVSDoublets/issues/107.\\n - Working directory: /tmp/gh-issue-solver-1791131286882.\\n - Branch: issue-107-bce58c21006b.\\n - Draft PR #108 already exists. Update it wi" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 123341, + "text": "[2026-10-04T18:39:50.690Z] [INFO] \"content\": \"439:pub fn measure_objects(\\n440: variant: &'static str,\\n441: n: u64,\\n442: repetitions: usize,\\n443: directory: &Path,\\n444:) -> Measurement {\\n445: let cached = variant.ends_with(\\\"_Cached\\\");\\n446: match variant\\n447: .trim_end_matches(\\\"_Cached\\\")\\n448: .trim_end_matches(\\\"_Uncached\\\")\\n449: {\\n450: \\\"SQLite_Memory\\\" => measure(\\n451: variant,\\n452: n,\\n453" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 123351, + "text": "[2026-10-04T18:39:50.690Z] [INFO] \"stdout\": \"439:pub fn measure_objects(\\n440: variant: &'static str,\\n441: n: u64,\\n442: repetitions: usize,\\n443: directory: &Path,\\n444:) -> Measurement {\\n445: let cached = variant.ends_with(\\\"_Cached\\\");\\n446: match variant\\n447: .trim_end_matches(\\\"_Cached\\\")\\n448: .trim_end_matches(\\\"_Uncached\\\")\\n449: {\\n450: \\\"SQLite_Memory\\\" => measure(\\n451: variant,\\n452: n,\\n453: " + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 123887, + "text": "[2026-10-04T18:40:00.758Z] [INFO] \"command\": \"mkdir -p /tmp/repro && for n in 20000 50000 100000 150000 200000 500000; do echo \\\"== $n\\\"; timeout 300 rust/target/release/sqlite-vs-doublets objects 64 $n --repetitions 1 --variants Doublets_United_Volatile_Cached --directory /tmp/repro --output /tmp/repro/out.json 2>&1 | grep -m2 \\\"panicked\\\\|Data\\\\|index\\\" ; echo \\\"exit ${PIPESTATUS[0]}\\\"; done\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 123922, + "text": "[2026-10-04T18:40:00.758Z] [INFO] \"command\": \"cd /tmp/gh-issue-solver-1791131286882 && mkdir -p /tmp/repro && for n in 20000 50000 100000 150000 200000 500000; do echo \\\"== $n\\\"; timeout 300 rust/target/release/sqlite-vs-doublets objects 64 $n --repetitions 1 --variants Doublets_United_Volatile_Cached --directory /tmp/repro --output /tmp/repro/out.json 2>&1 | grep -m2 \\\"panicked\\\\|Data\\\\|index\\\" ; echo \\\"exit ${PIPESTATUS[0]}\\\"; done\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 123962, + "text": "[2026-10-04T18:40:17.878Z] [INFO] \"content\": \"== 20000\\nexit 0\\n== 50000\\nexit 0\\n== 100000\\nexit 0\\n== 150000\\nthread 'main' (113804) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/unit/store.rs:153:55:\\nData part should be in data memory\\nexit 101\\n== 200000\\nthread 'main' (113808) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/unit/store.rs:153:55:\\nData part should be in data memory\\" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 123972, + "text": "[2026-10-04T18:40:17.878Z] [INFO] \"stdout\": \"== 20000\\nexit 0\\n== 50000\\nexit 0\\n== 100000\\nexit 0\\n== 150000\\nthread 'main' (113804) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/unit/store.rs:153:55:\\nData part should be in data memory\\nexit 101\\n== 200000\\nthread 'main' (113808) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/unit/store.rs:153:55:\\nData part should be in data memory\\nexit" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 124496, + "text": "[2026-10-04T18:40:26.858Z] [INFO] \"content\": \"Cargo.lock\\nCargo.toml\\nsrc\\ntarget\\n[package]\\nname = \\\"split_store_delete\\\"\\nversion = \\\"0.1.0\\\"\\nedition = \\\"2024\\\"\\npublish = false\\n\\n[dependencies]\\ndoublets = \\\"0.5.0\\\"\\n\\n[workspace]\\n\\n//! Minimal reproductions of a `doublets` 0.5.0 split store bug.\\n//!\\n//! `split::Store::update_links` detaches the link and only then asks `is_virtual(new_source)`,\\n//! which is `is_unused`: `size_as_target == 0 && source != 0`. Right after the deta" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 124506, + "text": "[2026-10-04T18:40:26.858Z] [INFO] \"stdout\": \"Cargo.lock\\nCargo.toml\\nsrc\\ntarget\\n[package]\\nname = \\\"split_store_delete\\\"\\nversion = \\\"0.1.0\\\"\\nedition = \\\"2024\\\"\\npublish = false\\n\\n[dependencies]\\ndoublets = \\\"0.5.0\\\"\\n\\n[workspace]\\n\\n//! Minimal reproductions of a `doublets` 0.5.0 split store bug.\\n//!\\n//! `split::Store::update_links` detaches the link and only then asks `is_virtual(new_source)`,\\n//! which is `is_unused`: `size_as_target == 0 && source != 0`. Right after the detach th" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 125043, + "text": "[2026-10-04T18:40:43.218Z] [INFO] \"command\": \"mkdir -p /tmp/gh-issue-solver-1791131286882/experiments/unit_store_growth/src && cd /tmp/gh-issue-solver-1791131286882/experiments/unit_store_growth && cat > Cargo.toml <<'EOF'\\n[package]\\nname = \\\"unit_store_growth\\\"\\nversion = \\\"0.1.0\\\"\\nedition = \\\"2024\\\"\\npublish = false\\n\\n[dependencies]\\ndoublets = \\\"0.5.0\\\"\\nsqlite-vs-doublets = { path = \\\"../../rust\\\" }\\n\\n[workspace]\\nEOF\\ncat > src/main.rs <<'EOF'\\nuse doublets::{Doublets, data::L" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 125078, + "text": "[2026-10-04T18:40:43.218Z] [INFO] \"command\": \"mkdir -p /tmp/gh-issue-solver-1791131286882/experiments/unit_store_growth/src && cd /tmp/gh-issue-solver-1791131286882/experiments/unit_store_growth && cat > Cargo.toml <<'EOF'\\n[package]\\nname = \\\"unit_store_growth\\\"\\nversion = \\\"0.1.0\\\"\\nedition = \\\"2024\\\"\\npublish = false\\n\\n[dependencies]\\ndoublets = \\\"0.5.0\\\"\\nsqlite-vs-doublets = { path = \\\"../../rust\\\" }\\n\\n[workspace]\\nEOF\\ncat > src/main.rs <<'EOF'\\nuse doublets::{Doublets, data::Links" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 125143, + "text": "[2026-10-04T18:42:35.540Z] [INFO] \"content\": \"warning: `unit_store_growth` (bin \\\"unit_store_growth\\\") generated 1 warning\\n Finished `release` profile [optimized] target(s) in 1m 49s\\nData part should be in data memory\\nnote: run with `RUST_BACKTRACE=1` environment variable to display a backtrace\\nstopped at post 103399: true\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 125153, + "text": "[2026-10-04T18:42:35.540Z] [INFO] \"stdout\": \"warning: `unit_store_growth` (bin \\\"unit_store_growth\\\") generated 1 warning\\n Finished `release` profile [optimized] target(s) in 1m 49s\\nData part should be in data memory\\nnote: run with `RUST_BACKTRACE=1` environment variable to display a backtrace\\nstopped at post 103399: true\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 125196, + "text": "[2026-10-04T18:42:35.540Z] [INFO] \"+use std::panic;\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 125204, + "text": "[2026-10-04T18:42:35.540Z] [INFO] \"+ let result = panic::catch_unwind(panic::AssertUnwindSafe(|| {\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 125493, + "text": "[2026-10-04T18:42:40.848Z] [INFO] \"content\": \"ugrep: warning: data/constants.rs: No such file or directory\\nShell cwd was reset to /tmp/gh-issue-solver-1791131286882\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 125503, + "text": "[2026-10-04T18:42:40.848Z] [INFO] \"stdout\": \"ugrep: warning: data/constants.rs: No such file or directory\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 127010, + "text": "[2026-10-04T18:43:11.356Z] [INFO] \"content\": \"52: pub unsafe fn handle_fill(\\n53- &mut self,\\n54- (ptr, cap): (NonNull, usize),\\n55- inited: usize,\\n56- fill: impl FnOnce(usize, (&mut [T], &mut [MaybeUninit])),\\n57- ) -> &mut [T] {\\n58- unsafe {\\n59- // fixme: ZST correctness isn't checked now,\\n60- // it forbid growing, but allow `RawPlace::::dangling` and thus `Alloc::::new`'s\\n61- const { assert!" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 127020, + "text": "[2026-10-04T18:43:11.356Z] [INFO] \"stdout\": \"52: pub unsafe fn handle_fill(\\n53- &mut self,\\n54- (ptr, cap): (NonNull, usize),\\n55- inited: usize,\\n56- fill: impl FnOnce(usize, (&mut [T], &mut [MaybeUninit])),\\n57- ) -> &mut [T] {\\n58- unsafe {\\n59- // fixme: ZST correctness isn't checked now,\\n60- // it forbid growing, but allow `RawPlace::::dangling` and thus `Alloc::::new`'s\\n61- const { assert!(mem:" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 128764, + "text": "[2026-10-04T18:44:06.486Z] [INFO] \"command\": \"gh api \\\"repos/linksplatform/doublets-rs/contents/doublets/src/mem/mod.rs\\\" -H \\\"Accept: application/vnd.github.raw\\\" | grep -n \\\"resize_mem\\\" -A16; gh api \\\"repos/linksplatform/doublets-rs/issues?state=all&per_page=100\\\" --jq '.[] | \\\"\\\\(.number) \\\\(.state) \\\\(.title)\\\"' | grep -i \\\"grow\\\\|mem\\\\|resize\\\\|out of bounds\\\\|panic\\\" | head\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 128799, + "text": "[2026-10-04T18:44:06.486Z] [INFO] \"command\": \"gh api \\\"repos/linksplatform/doublets-rs/contents/doublets/src/mem/mod.rs\\\" -H \\\"Accept: application/vnd.github.raw\\\" | grep -n \\\"resize_mem\\\" -A16; gh api \\\"repos/linksplatform/doublets-rs/issues?state=all&per_page=100\\\" --jq '.[] | \\\"\\\\(.number) \\\\(.state) \\\\(.title)\\\"' | grep -i \\\"grow\\\\|mem\\\\|resize\\\\|out of bounds\\\\|panic\\\" | head\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 129430, + "text": "[2026-10-04T18:44:22.802Z] [INFO] \"content\": \"//! Runs every storage through the same lifecycle on a fresh store per repetition:\\n//! a timed batch per operation, each validated against the expected count and checksum.\\n\\nuse crate::{\\n dataset::{self, blog_post, link, mix, scattered},\\n links::{DoubletsLinks, Link, LinksStorage, SqliteLinks},\\n objects::{BlogPostsStorage, DoubletsBlogPosts, SqliteBlogPosts},\\n};\\nuse doublets::{\\n data::{LinkReference, LinksConstants},\\n " + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 129440, + "text": "[2026-10-04T18:44:22.802Z] [INFO] \"stdout\": \"//! Runs every storage through the same lifecycle on a fresh store per repetition:\\n//! a timed batch per operation, each validated against the expected count and checksum.\\n\\nuse crate::{\\n dataset::{self, blog_post, link, mix, scattered},\\n links::{DoubletsLinks, Link, LinksStorage, SqliteLinks},\\n objects::{BlogPostsStorage, DoubletsBlogPosts, SqliteBlogPosts},\\n};\\nuse doublets::{\\n data::{LinkReference, LinksConstants},\\n mem::" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 132142, + "text": "[2026-10-04T18:48:42.794Z] [INFO] \"content\": \" Finished `test` profile [unoptimized + debuginfo] target(s) in 15.79s\\n Running tests/storages.rs (target/debug/deps/storages-e2b2affc16894bcc)\\n\\nrunning 2 tests\\n\\nthread 'doublets_lose_the_memory_they_grow' (123499) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/unit/store.rs:149:55:\\nunsafe precondition(s) violated: hint::unreachable_unchecked must never be reached\\n\\nThis indicat" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 132152, + "text": "[2026-10-04T18:48:42.794Z] [INFO] \"stdout\": \" Finished `test` profile [unoptimized + debuginfo] target(s) in 15.79s\\n Running tests/storages.rs (target/debug/deps/storages-e2b2affc16894bcc)\\n\\nrunning 2 tests\\n\\nthread 'doublets_lose_the_memory_they_grow' (123499) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/unit/store.rs:149:55:\\nunsafe precondition(s) violated: hint::unreachable_unchecked must never be reached\\n\\nThis indicates a " + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 132796, + "text": "[2026-10-04T18:49:25.469Z] [INFO] \"content\": \"test memory::tests::grow_returns_the_whole_memory ... ok\\ntest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\ntest stores_keep_their_links_when_their_memory_grows ... ok\\ntest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 7 filtered out; finished in 29.39s\\n\\nreal\\t0m32.023s\\nuser\\t0m31.650s\\nsys\\t" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 132806, + "text": "[2026-10-04T18:49:25.469Z] [INFO] \"stdout\": \"test memory::tests::grow_returns_the_whole_memory ... ok\\ntest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\ntest stores_keep_their_links_when_their_memory_grows ... ok\\ntest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 7 filtered out; finished in 29.39s\\n\\nreal\\t0m32.023s\\nuser\\t0m31.650s\\nsys\\t0m3.1" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 134007, + "text": "[2026-10-04T18:49:53.076Z] [INFO] \"command\": \"cd /tmp/gh-issue-solver-1791131286882/experiments/unit_store_growth && cat > src/main.rs <<'EOF'\\n//! Minimal reproduction of a `doublets` 0.5.0 and `platform-mem` 0.3.0 mismatch.\\n//!\\n//! `doublets::mem::resize_mem` returns what `RawMem::grow_filled` returns, and the stores use it as\\n//! their whole memory. `platform-mem` returns only the grown part. `Store::init` grows the memory\\n//! from 8,192 to 2^20 links, so a fresh store sees 1,04" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 134042, + "text": "[2026-10-04T18:49:53.076Z] [INFO] \"command\": \"cd /tmp/gh-issue-solver-1791131286882/experiments/unit_store_growth && cat > src/main.rs <<'EOF'\\n//! Minimal reproduction of a `doublets` 0.5.0 and `platform-mem` 0.3.0 mismatch.\\n//!\\n//! `doublets::mem::resize_mem` returns what `RawMem::grow_filled` returns, and the stores use it as\\n//! their whole memory. `platform-mem` returns only the grown part. `Store::init` grows the memory\\n//! from 8,192 to 2^20 links, so a fresh store sees 1,040,38" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 134077, + "text": "[2026-10-04T18:50:01.625Z] [INFO] \"content\": \"thread 'main' (125681) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/unit/store.rs:153:55:\\nData part should be in data memory\\nnote: run with `RUST_BACKTRACE=1` environment variable to display a backtrace\\nErr(Any { .. })\\ncreating link 1800000\\ncreating link 1900000\\ncreating link 2000000\\nOk(Ok(2097153))\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 134087, + "text": "[2026-10-04T18:50:01.625Z] [INFO] \"stdout\": \"thread 'main' (125681) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/unit/store.rs:153:55:\\nData part should be in data memory\\nnote: run with `RUST_BACKTRACE=1` environment variable to display a backtrace\\nErr(Any { .. })\\ncreating link 1800000\\ncreating link 1900000\\ncreating link 2000000\\nOk(Ok(2097153))\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 134105, + "text": "[2026-10-04T18:50:01.625Z] [INFO] \"-use std::panic;\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 134118, + "text": "[2026-10-04T18:50:01.625Z] [INFO] \"+use std::{env, panic};\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 134126, + "text": "[2026-10-04T18:50:01.625Z] [INFO] \"- let result = panic::catch_unwind(panic::AssertUnwindSafe(|| {\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 134146, + "text": "[2026-10-04T18:50:01.625Z] [INFO] \"+ let result = panic::catch_unwind(|| match env::args().nth(1).as_deref() {\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 134149, + "text": "[2026-10-04T18:50:01.625Z] [INFO] \"+ _ => panic!(\\\"usage: unit_store_growth \\\"),\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 134372, + "text": "[2026-10-04T18:50:07.192Z] [INFO] \"content\": \"Exit code 128\\ncreating link 1040380\\ncreating link 1040381\\ncreating link 1040382\\ncreating link 1040383\\ncreating link 1040384\\n\\nthread 'main' (125974) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/unit/store.rs:153:55:\\nData part should be in data memory\\nnote: run with `RUST_BACKTRACE=1` environment variable to display a backtrace\\nErr(Any { .. })\\n# Root level gitignore for the reposit" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 134382, + "text": "[2026-10-04T18:50:07.192Z] [INFO] \"tool_use_result\": \"Error: Exit code 128\\ncreating link 1040380\\ncreating link 1040381\\ncreating link 1040382\\ncreating link 1040383\\ncreating link 1040384\\n\\nthread 'main' (125974) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/unit/store.rs:153:55:\\nData part should be in data memory\\nnote: run with `RUST_BACKTRACE=1` environment variable to display a backtrace\\nErr(Any { .. })\\n# Root level gitignore for th" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 134391, + "text": "[2026-10-04T18:50:07.202Z] [INFO] thread 'main' (125974) panicked at /home/box/.cargo/registry/src/index.crat\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 135307, + "text": "[2026-10-04T18:51:50.649Z] [INFO] \"content\": \" Checking sqlite-vs-doublets v0.2.0 (/tmp/gh-issue-solver-1791131286882/rust)\\n Finished `release` profile [optimized] target(s) in 1.84s\\ntest memory::tests::grow_returns_the_whole_memory ... ok\\ntest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\ntest links_are_unique_and_reference_created_ids ... o" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 135317, + "text": "[2026-10-04T18:51:50.649Z] [INFO] \"stdout\": \" Checking sqlite-vs-doublets v0.2.0 (/tmp/gh-issue-solver-1791131286882/rust)\\n Finished `release` profile [optimized] target(s) in 1.84s\\ntest memory::tests::grow_returns_the_whole_memory ... ok\\ntest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\ntest links_are_unique_and_reference_created_ids ... ok\\nte" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 136102, + "text": "[2026-10-04T18:52:10.842Z] [INFO] \"command\": \"mkdir -p ci-logs && for j in 111502160163 111502160340; do url=$(curl -sI -H \\\"Authorization: [REDACTED] $(gh auth token)\\\" https://api.github.com/repos/linksplatform/Comparisons.SQLiteVSDoublets/actions/jobs/$j/logs | grep -i '^location:' | cut -d' ' -f2 | tr -d '\\\\r'); curl -s \\\"$url\\\" > ci-logs/benchmarks-rust-links-10M-$j.log; grep -E \\\"#1:|panicked|Data part|index out\\\" ci-logs/benchmarks-rust-links-10M-$j.log | head -6; done\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 136137, + "text": "[2026-10-04T18:52:10.842Z] [INFO] \"command\": \"cd /tmp/gh-issue-solver-1791131286882 && mkdir -p ci-logs && for j in 111502160163 111502160340; do url=$(curl -sI -H \\\"Authorization: [REDACTED] $(gh auth token)\\\" https://api.github.com/repos/linksplatform/Comparisons.SQLiteVSDoublets/actions/jobs/$j/logs | grep -i '^location:' | cut -d' ' -f2 | tr -d '\\\\r'); curl -s \\\"$url\\\" > ci-logs/benchmarks-rust-links-10M-$j.log; grep -E \\\"#1:|panicked|Data part|index out\\\" ci-logs/benchmarks-rust-links" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 136177, + "text": "[2026-10-04T18:52:14.376Z] [INFO] \"content\": \"2026-10-04T18:37:38.4103813Z SQLite_Memory #1: create 3661 ns/op, query_all 123 ns/op, query_by_id 1561 ns/op, query_by_from_to 1604 ns/op, query_by_from 1658 ns/op, query_by_to 1629 ns/op, update 9040 ns/op, delete 5955 ns/op\\n2026-10-04T18:47:15.1154762Z SQLite_File #1: create 9298 ns/op, query_all 127 ns/op, query_by_id 2292 ns/op, query_by_from_to 2603 ns/op, query_by_from 2565 ns/op, query_by_to 2556 ns/op, update 23826 ns/op, delete 142" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 136187, + "text": "[2026-10-04T18:52:14.376Z] [INFO] \"stdout\": \"2026-10-04T18:37:38.4103813Z SQLite_Memory #1: create 3661 ns/op, query_all 123 ns/op, query_by_id 1561 ns/op, query_by_from_to 1604 ns/op, query_by_from 1658 ns/op, query_by_to 1629 ns/op, update 9040 ns/op, delete 5955 ns/op\\n2026-10-04T18:47:15.1154762Z SQLite_File #1: create 9298 ns/op, query_all 127 ns/op, query_by_id 2292 ns/op, query_by_from_to 2603 ns/op, query_by_from 2565 ns/op, query_by_to 2556 ns/op, update 23826 ns/op, delete 14254 ns" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 136698, + "text": "[2026-10-04T18:52:32.570Z] [INFO] \"command\": \"gh run cancel 37224809082 --repo linksplatform/Comparisons.SQLiteVSDoublets && git add rust/src/memory.rs rust/src/lib.rs rust/src/harness.rs rust/tests/storages.rs README.md README.ru.md experiments/unit_store_growth/Cargo.toml experiments/unit_store_growth/Cargo.lock experiments/unit_store_growth/src && git status --short && git commit -q -m \\\"Rust: keep the whole memory after doublets grow it\\n\\ndoublets 0.5.0 takes the slice returned by" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 136733, + "text": "[2026-10-04T18:52:32.570Z] [INFO] \"command\": \"cd /tmp/gh-issue-solver-1791131286882 && gh run cancel 37224809082 --repo linksplatform/Comparisons.SQLiteVSDoublets && git add rust/src/memory.rs rust/src/lib.rs rust/src/harness.rs rust/tests/storages.rs README.md README.ru.md experiments/unit_store_growth/Cargo.toml experiments/unit_store_growth/Cargo.lock experiments/unit_store_growth/src && git status --short && git commit -q -m \\\"Rust: keep the whole memory after doublets grow it\\n\\ndoubl" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 140339, + "text": "[2026-10-04T19:03:48.157Z] [STDOUT] [log_691881, anthropic-workspace-id: \"wrkspc_0117gBnPr68DBsCrmom3Bxq6\", request-id: \"req_011CfhiXjpMNzuPJF6eNQzER\"] post https://api.anthropic.com/v1/messages?beta=true failed with status 404 in 252ms - error; not retryable\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 141392, + "text": "[2026-10-04T19:04:56.229Z] [INFO] \"text\": \"This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.\\n\\nSummary:\\n1. **Primary Request and Intent**\\n - Solve GitHub issue https://github.com/linksplatform/Comparisons.SQLiteVSDoublets/issues/107.\\n - Working directory: /tmp/gh-issue-solver-1791131286882.\\n - Branch: issue-107-bce58c21006b.\\n - PR #108 already exists. Update it with `gh" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 142196, + "text": "[2026-10-04T19:14:37.893Z] [STDOUT] [log_c9f59a, anthropic-workspace-id: \"wrkspc_0117gBnPr68DBsCrmom3Bxq6\", request-id: \"req_011CfhjMdmp3sghDo5JxrgNv\"] post https://api.anthropic.com/v1/messages?beta=true failed with status 404 in 248ms - error; not retryable\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 148073, + "text": "[2026-10-04T19:30:49.653Z] [STDOUT] [log_8c977f, anthropic-workspace-id: \"wrkspc_0117gBnPr68DBsCrmom3Bxq6\", request-id: \"req_011CfhkbGTAcKDc3D4eCtUHv\"] post https://api.anthropic.com/v1/messages?beta=true failed with status 404 in 236ms - error; not retryable\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 150157, + "text": "[2026-10-04T19:32:16.252Z] [INFO] \"content\": \"rust=0\\nrunning 1 test\\ntest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\nrunning 0 tests\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\nrunning 8 tests\\ntest result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 10.62s\\nrunning 0 tests\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished " + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 150167, + "text": "[2026-10-04T19:32:16.252Z] [INFO] \"stdout\": \"rust=0\\nrunning 1 test\\ntest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\nrunning 0 tests\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\nrunning 8 tests\\ntest result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 10.62s\\nrunning 0 tests\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0." + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 150650, + "text": "[2026-10-04T19:33:09.672Z] [INFO] \"content\": \" total: 28\\n failed: 0\\n succeeded: 28\\n skipped: 0\\n duration: 23s 464ms\\n15: run:\\n29: - uses: actions/setup-dotnet@v6\\n32: - run: dotnet build -c Release -warnaserror\\n33: - run: dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 150660, + "text": "[2026-10-04T19:33:09.672Z] [INFO] \"stdout\": \" total: 28\\n failed: 0\\n succeeded: 28\\n skipped: 0\\n duration: 23s 464ms\\n15: run:\\n29: - uses: actions/setup-dotnet@v6\\n32: - run: dotnet build -c Release -warnaserror\\n33: - run: dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 151838, + "text": "[2026-10-04T19:43:17.503Z] [INFO] \"text\": \"Failed to authenticate: OAuth session expired and could not be refreshed\"\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 151922, + "text": "[2026-10-04T19:43:17.553Z] [INFO] \"failed\": 0,\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 151939, + "text": "[2026-10-04T19:43:17.553Z] [INFO] \"result\": \"Failed to authenticate: OAuth session expired and could not be refreshed\",\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 151954, + "text": "[2026-10-04T19:43:18.829Z] [ERROR] \u274c Claude command failed with exit code 1\n" + }, + { + "path": "research/pr-108-auth-failure.log", + "line": 151995, + "text": "[2026-10-04T19:43:19.775Z] [ERROR] Provider said: Failed to authenticate: OAuth session expired and could not be refreshed\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 20, + "text": "[2026-10-05T00:18:48.689Z] [WARNING] \u26a0\ufe0f SECURITY WARNING: --attach-logs is ENABLED\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 44, + "text": "[2026-10-05T00:19:10.563Z] [INFO] [VERBOSE] agentic-cli-updater: 1 updated, 0 current, 0 failed\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 45, + "text": "[2026-10-05T00:19:10.566Z] [VERBOSE] [VERBOSE] agentic-cli-updater: 1 updated, 0 current, 0 failed\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 98, + "text": "[2026-10-05T00:19:20.918Z] [INFO] \u2139\ufe0f gh auth setup-git could not write the global gitconfig: failed to set up git credential helper: failed to run git: error: could not write config file /home/box/.gitconfig: Device or resource busy\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 158, + "text": "[2026-10-05T00:19:31.545Z] [INFO] - Failed pull request checks: 1\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 202, + "text": "[2026-10-05T00:19:33.622Z] [INFO] Failed pull request checks: 1\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 230, + "text": "[2026-10-05T00:19:33.622Z] [INFO] - When the user mentions CI failures or asks to investigate logs, consider adding these todos to track the investigation: (1) list recent CI runs with timestamps, (2) download logs from failed runs to the ci-logs/ directory, (3) analyze error messages and identify the root cause, (4) implement a fix, (5) verify that the fix resolves the specific errors found in the logs.\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 232, + "text": "[2026-10-05T00:19:33.622Z] [INFO] - When you see screenshots or images in issue descriptions, pull request descriptions, comments, or discussions, download the image to a local file first, then use the Read tool to view and analyze it. Before reading downloaded images with the Read tool, verify that the file is a valid image rather than HTML by using a CLI tool such as the 'file' command. When corrupted or non-image files, such as GitHub \\\"Not Found\\\" pages saved as `.png`, are read, they can" + }, + { + "path": "research/pr-108-final-session.log", + "line": 352, + "text": "[2026-10-05T00:19:33.644Z] [INFO] Failed pull request checks: 1\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 384, + "text": "[2026-10-05T00:19:33.659Z] [INFO] - When the user mentions CI failures or asks to investigate logs, consider adding these todos to track the investigation: (1) list recent CI runs with timestamps, (2) download logs from failed runs to the ci-logs/ directory, (3) analyze error messages and identify the root cause, (4) implement a fix, (5) verify that the fix resolves the specific errors found in the logs.\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 386, + "text": "[2026-10-05T00:19:33.659Z] [INFO] - When you see screenshots or images in issue descriptions, pull request descriptions, comments, or discussions, download the image to a local file first, then use the Read tool to view and analyze it. Before reading downloaded images with the Read tool, verify that the file is a valid image rather than HTML by using a CLI tool such as the 'file' command. When corrupted or non-image files, such as GitHub \"Not Found\" pages saved as `.png`, are read, they can c" + }, + { + "path": "research/pr-108-final-session.log", + "line": 1302, + "text": "[2026-10-05T00:19:53.822Z] [INFO] \"content\": \"---\\nkonard 2026-10-04T19:43:41Z\\n## \ud83d\udea8 Solution Draft Failed\\nThe automated solution draft encountered an error:\\n```\\nCLAUDE stopped: Authentication expired \u2014 re-login required [authentication_failed] \u2014 Failed to authenticate: OAuth session expired and could not be refreshed\\n\\n- Re-authenticate the tool: claude /login (or set ANTHROPIC_API_KEY for API-key billing)\\n- Once access is restored, resume with the session ID printed above \u2014 no wo" + }, + { + "path": "research/pr-108-final-session.log", + "line": 1312, + "text": "[2026-10-05T00:19:53.822Z] [INFO] \"stdout\": \"---\\nkonard 2026-10-04T19:43:41Z\\n## \ud83d\udea8 Solution Draft Failed\\nThe automated solution draft encountered an error:\\n```\\nCLAUDE stopped: Authentication expired \u2014 re-login required [authentication_failed] \u2014 Failed to authenticate: OAuth session expired and could not be refreshed\\n\\n- Re-authenticate the tool: claude /login (or set ANTHROPIC_API_KEY for API-key billing)\\n- Once access is restored, resume with the session ID printed above \u2014 no work is" + }, + { + "path": "research/pr-108-final-session.log", + "line": 2289, + "text": "[2026-10-05T00:20:14.183Z] [INFO] \"text\": \"The previous session failed (auth expired); CodeFactor reports 5 issues on PR #108. I'm pulling those issue details now, then I'll check the recovery log.\"\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 3661, + "text": "[2026-10-05T00:20:42.324Z] [INFO] \"content\": \"112961:[2026-10-04T18:27:22.861Z] [INFO] \\\"text\\\": \\\"The `.gitkeep` is a leftover from the solver's initial commit, so I'll remove it:\\\"\\n114765:[2026-10-04T18:29:10.612Z] [INFO] \\\"text\\\": \\\"Benchmarks and C# passed, and Rust (3 OSes) is still running. I'll compare the CI runner's speed with this machine using the size-1000 jobs:\\\"\\n116923:[2026-10-04T18:32:32.978Z] [INFO] \\\"text\\\": \\\"The full run (37224809082) has sta" + }, + { + "path": "research/pr-108-final-session.log", + "line": 3671, + "text": "[2026-10-05T00:20:42.324Z] [INFO] \"stdout\": \"112961:[2026-10-04T18:27:22.861Z] [INFO] \\\"text\\\": \\\"The `.gitkeep` is a leftover from the solver's initial commit, so I'll remove it:\\\"\\n114765:[2026-10-04T18:29:10.612Z] [INFO] \\\"text\\\": \\\"Benchmarks and C# passed, and Rust (3 OSes) is still running. I'll compare the CI runner's speed with this machine using the size-1000 jobs:\\\"\\n116923:[2026-10-04T18:32:32.978Z] [INFO] \\\"text\\\": \\\"The full run (37224809082) has started." + }, + { + "path": "research/pr-108-final-session.log", + "line": 4100, + "text": "[2026-10-05T00:20:47.451Z] [INFO] \"content\": \"This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.\\n\\nSummary:\\n1. **Primary Request and Intent**\\n - Solve GitHub issue https://github.com/linksplatform/Comparisons.SQLiteVSDoublets/issues/107.\\n - Working directory: /tmp/gh-issue-solver-1791131286882.\\n - Branch: issue-107-bce58c21006b.\\n - PR #108 already exists. Update it with " + }, + { + "path": "research/pr-108-final-session.log", + "line": 4110, + "text": "[2026-10-05T00:20:47.451Z] [INFO] \"stdout\": \"This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.\\n\\nSummary:\\n1. **Primary Request and Intent**\\n - Solve GitHub issue https://github.com/linksplatform/Comparisons.SQLiteVSDoublets/issues/107.\\n - Working directory: /tmp/gh-issue-solver-1791131286882.\\n - Branch: issue-107-bce58c21006b.\\n - PR #108 already exists. Update it with `gh p" + }, + { + "path": "research/pr-108-final-session.log", + "line": 4414, + "text": "[2026-10-05T00:20:51.924Z] [INFO] \"content\": \"// Shows why the C# benchmarks delete links with `Platform.Data.Doublets.ILinksExtensions.Delete(links, id, handler)`.\\n// The `links.Delete(id)` overload from Platform.Data frees the link without detaching it from the source and\\n// target trees, so the trees keep a stale entry that soon hides other links from `SearchOrDefault`.\\n// The Platform.Data.Doublets overload resets the link to (0, 0) first, which detaches it.\\n// Usage: dotnet run " + }, + { + "path": "research/pr-108-final-session.log", + "line": 4424, + "text": "[2026-10-05T00:20:51.924Z] [INFO] \"stdout\": \"// Shows why the C# benchmarks delete links with `Platform.Data.Doublets.ILinksExtensions.Delete(links, id, handler)`.\\n// The `links.Delete(id)` overload from Platform.Data frees the link without detaching it from the source and\\n// target trees, so the trees keep a stale entry that soon hides other links from `SearchOrDefault`.\\n// The Platform.Data.Doublets overload resets the link to (0, 0) first, which detaches it.\\n// Usage: dotnet run -c Re" + }, + { + "path": "research/pr-108-final-session.log", + "line": 7479, + "text": "[2026-10-05T00:24:39.667Z] [INFO] \"content\": \" M csharp/SQLiteVSDoublets/Dataset.cs\\n M experiments/csharp_tree_delete/Program.cs\\n 0 Error(s)\\n\\nTime Elapsed 00:00:06.74\\n failed: 0\\n succeeded: 28\\n skipped: 0\\n duration: 15s 693ms\",\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 7489, + "text": "[2026-10-05T00:24:39.667Z] [INFO] \"stdout\": \" M csharp/SQLiteVSDoublets/Dataset.cs\\n M experiments/csharp_tree_delete/Program.cs\\n 0 Error(s)\\n\\nTime Elapsed 00:00:06.74\\n failed: 0\\n succeeded: 28\\n skipped: 0\\n duration: 15s 693ms\",\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 11968, + "text": "[2026-10-05T00:27:06.652Z] [INFO] \"status\": \"failed\",\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 14919, + "text": "[2026-10-05T00:28:08.571Z] [INFO] \"content\": \" 1\\t//! Runs every storage through the same lifecycle on a fresh store per repetition:\\n 2\\t//! a timed batch per operation, each validated against the expected count and checksum.\\n 3\\t\\n 4\\tuse crate::{\\n 5\\t dataset::{self, blog_post, link, mix, scattered},\\n 6\\t links::{DoubletsLinks, Link, LinksStorage, SqliteLinks},\\n 7\\t memory::{Whole, volatile},\\n 8\\t objects::{BlogPostsStorage, DoubletsBlo" + }, + { + "path": "research/pr-108-final-session.log", + "line": 15110, + "text": "[2026-10-05T00:28:10.141Z] [INFO] \"content\": \" 1\\tuse doublets::{\\n 2\\t Doublets,\\n 3\\t data::{Flow, LinkReference},\\n 4\\t};\\n 5\\tuse rusqlite::{Connection, OptionalExtension, params};\\n 6\\tuse std::{marker::PhantomData, path::Path};\\n 7\\t\\n 8\\t#[derive(Clone, Copy, Debug, PartialEq, Eq)]\\n 9\\tpub struct Link {\\n 10\\t pub id: T,\\n 11\\t pub from: T,\\n 12\\t pub to: T,\\n 13\\t}\\n 14\\t\\n 15\\tpub trait LinksStorage {\\n " + }, + { + "path": "research/pr-108-final-session.log", + "line": 17026, + "text": "[2026-10-05T00:29:18.428Z] [INFO] \"content\": \"name: Benchmarks\\n\\n# Every job measures one README table (language, category, bits, size) with all its variants on one runner,\\n# so that the variants of a table are compared on the same machine. Pull requests run the whole pipeline\\n# on small sizes; pushes to main publish the results to README.md and README.ru.md.\\non:\\n push:\\n branches: [main]\\n paths: ['rust/**', 'csharp/**', 'scripts/**', '.github/workflows/benchmarks.yml']\\n p" + }, + { + "path": "research/pr-108-final-session.log", + "line": 23632, + "text": "[2026-10-05T00:31:35.095Z] [INFO] \"text\": \"This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.\\n\\nSummary:\\n1. Primary Request and Intent:\\n - Solve GitHub issue https://github.com/linksplatform/Comparisons.SQLiteVSDoublets/issues/107.\\n - Working directory: /tmp/gh-issue-solver-1791159559061.\\n - Branch: issue-107-bce58c21006b.\\n - Push only to this branch.\\n - PR #108 a" + }, + { + "path": "research/pr-108-final-session.log", + "line": 33330, + "text": "[2026-10-05T00:35:12.214Z] [INFO] \"content\": \" uses: Swatinem/rust-cache@v2\\n with:\\n workspaces: rust\\n - if: matrix.language == 'rust'\\n run: |\\n cargo build --release --manifest-path rust/Cargo.toml\\n echo \\\"BENCHMARK=rust/target/release/sqlite-vs-doublets\\\" >> \\\"$GITHUB_ENV\\\"\\n - if: matrix.language == 'csharp'\\n uses: actions/setup-dotnet@v6\\n with:\\n global-json-file: csharp/global.json\\n - if: ma" + }, + { + "path": "research/pr-108-final-session.log", + "line": 33340, + "text": "[2026-10-05T00:35:12.214Z] [INFO] \"stdout\": \" uses: Swatinem/rust-cache@v2\\n with:\\n workspaces: rust\\n - if: matrix.language == 'rust'\\n run: |\\n cargo build --release --manifest-path rust/Cargo.toml\\n echo \\\"BENCHMARK=rust/target/release/sqlite-vs-doublets\\\" >> \\\"$GITHUB_ENV\\\"\\n - if: matrix.language == 'csharp'\\n uses: actions/setup-dotnet@v6\\n with:\\n global-json-file: csharp/global.json\\n - if: matrix." + }, + { + "path": "research/pr-108-final-session.log", + "line": 34758, + "text": "[2026-10-05T00:35:48.566Z] [INFO] \"content\": \"FAILED (failures=1)\\nOK\\n308: parser = argparse.ArgumentParser(description=__doc__.strip().splitlines()[0])\",\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 34768, + "text": "[2026-10-05T00:35:48.566Z] [INFO] \"stdout\": \"FAILED (failures=1)\\nOK\\n308: parser = argparse.ArgumentParser(description=__doc__.strip().splitlines()[0])\",\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 37092, + "text": "[2026-10-05T00:37:06.762Z] [INFO] \"content\": \"SQLiteVSDoublets\\nSQLiteVSDoublets.Tests\\nSQLiteVSDoublets.slnx\\nglobal.json\\n 0 Error(s)\\n\\nTime Elapsed 00:00:05.26\\n total: 28\\n failed: 0\\n succeeded: 28\\n skipped: 0\\n duration: 17s 849ms\",\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 37102, + "text": "[2026-10-05T00:37:06.762Z] [INFO] \"stdout\": \"SQLiteVSDoublets\\nSQLiteVSDoublets.Tests\\nSQLiteVSDoublets.slnx\\nglobal.json\\n 0 Error(s)\\n\\nTime Elapsed 00:00:05.26\\n total: 28\\n failed: 0\\n succeeded: 28\\n skipped: 0\\n duration: 17s 849ms\",\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 37998, + "text": "[2026-10-05T00:37:35.052Z] [INFO] \"status\": \"failed\",\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 38544, + "text": "[2026-10-05T00:38:14.384Z] [INFO] \"content\": \" 0 Warning(s)\\n 0 Error(s)\\n total: 28\\n failed: 0\\n succeeded: 28\\n skipped: 0\\n duration: 17s 246ms\",\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 38554, + "text": "[2026-10-05T00:38:14.384Z] [INFO] \"stdout\": \" 0 Warning(s)\\n 0 Error(s)\\n total: 28\\n failed: 0\\n succeeded: 28\\n skipped: 0\\n duration: 17s 246ms\",\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 38923, + "text": "[2026-10-05T00:38:36.355Z] [INFO] \"status\": \"failed\",\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 39013, + "text": "[2026-10-05T00:38:36.692Z] [STDOUT] [log_3e6223, anthropic-workspace-id: \"wrkspc_0117gBnPr68DBsCrmom3Bxq6\", request-id: \"req_011CfiA4Z5i855EbxJKXNH3b\"] post https://api.anthropic.com/v1/messages?beta=true failed with status 404 in 204ms - error; not retryable\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 43894, + "text": "[2026-10-05T00:39:46.715Z] [INFO] \"command\": \"{ (cd csharp && dotnet build -c Release -warnaserror 2>&1 | grep -E \\\"Warn|Error\\\\(s\\\\)\\\" && dotnet test -c Release 2>&1 | tail -5); (cd rust && cargo fmt --check && echo FMT_OK && cargo clippy --release --all-targets -- -D warnings 2>&1 | tail -2 && cargo test --release 2>&1 | grep -E \\\"^test result|FAILED|panicked\\\"); (cd scripts && /tmp/venv/bin/python -m unittest discover -s . 2>&1 | tail -2); } > /tmp/local_checks.log 2>&1; cat /tmp/lo" + }, + { + "path": "research/pr-108-final-session.log", + "line": 43928, + "text": "[2026-10-05T00:39:46.715Z] [INFO] \"command\": \"cd /tmp/gh-issue-solver-1791159559061 && { (cd csharp && dotnet build -c Release -warnaserror 2>&1 | grep -E \\\"Warn|Error\\\\(s\\\\)\\\" && dotnet test -c Release 2>&1 | tail -5); (cd rust && cargo fmt --check && echo FMT_OK && cargo clippy --release --all-targets -- -D warnings 2>&1 | tail -2 && cargo test --release 2>&1 | grep -E \\\"^test result|FAILED|panicked\\\"); (cd scripts && /tmp/venv/bin/python -m unittest discover -s . 2>&1 | tail -2); } > /t" + }, + { + "path": "research/pr-108-final-session.log", + "line": 43942, + "text": "[2026-10-05T00:39:49.768Z] [INFO] \"description\": \"{ (cd csharp && dotnet build -c Release -warnaserror 2>&1 | grep -E \\\"Warn|Error\\\\(s\\\\)\\\" && dotnet test -c Release 2>&1 | tail -5); (cd rust && cargo fmt --check && echo FMT_OK && cargo clippy --release --all-targets -- -D warnings 2>&1 | tail -2 && cargo test --release 2>&1 | grep -E \\\"^test result|FAILED|panicked\\\"); (cd scripts && /tmp/venv/bin/python -m unittest discover -s . 2>&1 | tail -2); } > /tmp/local_checks.log 2>&1; cat /tmp/local_" + }, + { + "path": "research/pr-108-final-session.log", + "line": 44051, + "text": "[2026-10-05T00:41:16.551Z] [INFO] \"summary\": \"{ (cd csharp && dotnet build -c Release -warnaserror 2>&1 | grep -E \\\"Warn|Error\\\\(s\\\\)\\\" && dotnet test -c Release 2>&1 | tail -5); (cd rust && cargo fmt --check && echo FMT_OK && cargo clippy --release --all-targets -- -D warnings 2>&1 | tail -2 && cargo test --release 2>&1 | grep -E \\\"^test result|FAILED|panicked\\\"); (cd scripts && /tmp/venv/bin/python -m unittest discover -s . 2>&1 | tail -2); } > /tmp/local_checks.log 2>&1; cat /tmp/local_chec" + }, + { + "path": "research/pr-108-final-session.log", + "line": 44063, + "text": "[2026-10-05T00:41:16.576Z] [INFO] \"content\": \" 0 Warning(s)\\n 0 Error(s)\\n total: 28\\n failed: 0\\n succeeded: 28\\n skipped: 0\\n duration: 17s 431ms\\nFMT_OK\\n Checking sqlite-vs-doublets v0.2.0 (/tmp/gh-issue-solver-1791159559061/rust)\\n Finished `release` profile [optimized] target(s) in 7.20s\\ntest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished" + }, + { + "path": "research/pr-108-final-session.log", + "line": 44073, + "text": "[2026-10-05T00:41:16.576Z] [INFO] \"stdout\": \" 0 Warning(s)\\n 0 Error(s)\\n total: 28\\n failed: 0\\n succeeded: 28\\n skipped: 0\\n duration: 17s 431ms\\nFMT_OK\\n Checking sqlite-vs-doublets v0.2.0 (/tmp/gh-issue-solver-1791159559061/rust)\\n Finished `release` profile [optimized] target(s) in 7.20s\\ntest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0" + }, + { + "path": "research/pr-108-final-session.log", + "line": 45224, + "text": "[2026-10-05T00:43:03.760Z] [INFO] \"text\": \"This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.\\n\\nSummary:\\n1. Primary Request and Intent:\\n - Solve GitHub issue https://github.com/linksplatform/Comparisons.SQLiteVSDoublets/issues/107.\\n - Working directory: /tmp/gh-issue-solver-1791159559061.\\n - Branch: issue-107-bce58c21006b. Push only to this branch.\\n - PR #108 already e" + }, + { + "path": "research/pr-108-final-session.log", + "line": 50261, + "text": "[2026-10-05T00:47:11.940Z] [INFO] \"command\": \"cd /tmp/gh-issue-solver-1791159559061/rust && cargo fmt --check && cargo test --release 2>&1 | grep -E \\\"test result|FAILED|panicked\\\" \"\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 50295, + "text": "[2026-10-05T00:47:11.940Z] [INFO] \"command\": \"cd /tmp/gh-issue-solver-1791159559061/rust && cargo fmt --check && cargo test --release 2>&1 | grep -E \\\"test result|FAILED|panicked\\\" \"\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 50304, + "text": "[2026-10-05T00:47:15.209Z] [INFO] \"description\": \"cd /tmp/gh-issue-solver-1791159559061/rust && cargo fmt --check && cargo test --release 2>&1 | grep -E \\\"test result|FAILED|panicked\\\" \",\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 50327, + "text": "[2026-10-05T00:48:06.112Z] [INFO] \"summary\": \"cd /tmp/gh-issue-solver-1791159559061/rust && cargo fmt --check && cargo test --release 2>&1 | grep -E \\\"test result|FAILED|panicked\\\" \",\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 50339, + "text": "[2026-10-05T00:48:06.164Z] [INFO] \"content\": \"test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\ntest result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 8.08s\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\",\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 50349, + "text": "[2026-10-05T00:48:06.164Z] [INFO] \"stdout\": \"test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\ntest result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 8.08s\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\",\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 53772, + "text": "[2026-10-05T00:53:43.184Z] [INFO] \"content\": \" \\\"64\\\" => measure::(category, &variants, size, repetitions, &directory),\\n _ => panic!(\\\"bits must be 32 or 64\\\"),\\n };\\n let report = json!({\\n \\\"language\\\": \\\"Rust\\\",\\n \\\"category\\\": category,\\n \\\"bits\\\": bits.parse::().unwrap(),\\n \\\"size\\\": size,\\n \\\"repetitions\\\": repetitions,\\n \\\"warm_up_size\\\": size.min(harness::WARM_UP_SIZE),\\n \\\"sqlite_version\\\": rusqlite:" + }, + { + "path": "research/pr-108-final-session.log", + "line": 53782, + "text": "[2026-10-05T00:53:43.184Z] [INFO] \"stdout\": \" \\\"64\\\" => measure::(category, &variants, size, repetitions, &directory),\\n _ => panic!(\\\"bits must be 32 or 64\\\"),\\n };\\n let report = json!({\\n \\\"language\\\": \\\"Rust\\\",\\n \\\"category\\\": category,\\n \\\"bits\\\": bits.parse::().unwrap(),\\n \\\"size\\\": size,\\n \\\"repetitions\\\": repetitions,\\n \\\"warm_up_size\\\": size.min(harness::WARM_UP_SIZE),\\n \\\"sqlite_version\\\": rusqlite::vers" + }, + { + "path": "research/pr-108-final-session.log", + "line": 54167, + "text": "[2026-10-05T00:53:53.073Z] [INFO] \"command\": \"python3 - <<'E'\\np='README.md'; s=open(p).read()\\nold=\\\"\\\"\\\"Every repetition runs on a fresh store in an empty directory, after one\\ndiscarded warm-up repetition on up to 10,000 records. Each operation is one\\\"\\\"\\\"\\nnew=\\\"\\\"\\\"Every repetition runs on a fresh store in an empty directory, after discarded\\nwarm-up repetitions on up to 10,000 records that run for at least a second, so\\nthe .NET JIT has already optimized the code. Each operation" + }, + { + "path": "research/pr-108-final-session.log", + "line": 54201, + "text": "[2026-10-05T00:53:53.073Z] [INFO] \"command\": \"cd /tmp/gh-issue-solver-1791159559061 && python3 - <<'E'\\np='README.md'; s=open(p).read()\\nold=\\\"\\\"\\\"Every repetition runs on a fresh store in an empty directory, after one\\ndiscarded warm-up repetition on up to 10,000 records. Each operation is one\\\"\\\"\\\"\\nnew=\\\"\\\"\\\"Every repetition runs on a fresh store in an empty directory, after discarded\\nwarm-up repetitions on up to 10,000 records that run for at least a second, so\\nthe .NET JIT has alrea" + }, + { + "path": "research/pr-108-final-session.log", + "line": 54215, + "text": "[2026-10-05T00:53:56.153Z] [INFO] \"description\": \"python3 - <<'E'\\np='README.md'; s=open(p).read()\\nold=\\\"\\\"\\\"Every repetition runs on a fresh store in an empty directory, after one\\ndiscarded warm-up repetition on up to 10,000 records. Each operation is one\\\"\\\"\\\"\\nnew=\\\"\\\"\\\"Every repetition runs on a fresh store in an empty directory, after discarded\\nwarm-up repetitions on up to 10,000 records that run for at least a second, so\\nthe .NET JIT has already optimized the code. Each operation is " + }, + { + "path": "research/pr-108-final-session.log", + "line": 54248, + "text": "[2026-10-05T00:54:59.173Z] [INFO] \"summary\": \"python3 - <<'E'\\np='README.md'; s=open(p).read()\\nold=\\\"\\\"\\\"Every repetition runs on a fresh store in an empty directory, after one\\ndiscarded warm-up repetition on up to 10,000 records. Each operation is one\\\"\\\"\\\"\\nnew=\\\"\\\"\\\"Every repetition runs on a fresh store in an empty directory, after discarded\\nwarm-up repetitions on up to 10,000 records that run for at least a second, so\\nthe .NET JIT has already optimized the code. Each operation is one\\" + }, + { + "path": "research/pr-108-final-session.log", + "line": 54260, + "text": "[2026-10-05T00:54:59.296Z] [INFO] \"content\": \"md-ok\\n Checking sqlite-vs-doublets v0.2.0 (/tmp/gh-issue-solver-1791159559061/rust)\\n Finished `release` profile [optimized] target(s) in 0.98s\\ntest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\ntest result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 24.83s\\n[This command modified 2 files you've previously read: ../README.ru.md, ../README.md. Call Read before " + }, + { + "path": "research/pr-108-final-session.log", + "line": 54270, + "text": "[2026-10-05T00:54:59.296Z] [INFO] \"stdout\": \"md-ok\\n Checking sqlite-vs-doublets v0.2.0 (/tmp/gh-issue-solver-1791159559061/rust)\\n Finished `release` profile [optimized] target(s) in 0.98s\\ntest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\ntest result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 24.83s\",\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 55169, + "text": "[2026-10-05T00:56:04.819Z] [INFO] \"content\": \" 0 Warning(s)\\n total: 28\\n failed: 0\\n succeeded: 28\\n skipped: 0\\n duration: 39s 178ms\",\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 55179, + "text": "[2026-10-05T00:56:04.819Z] [INFO] \"stdout\": \" 0 Warning(s)\\n total: 28\\n failed: 0\\n succeeded: 28\\n skipped: 0\\n duration: 39s 178ms\",\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 63653, + "text": "[2026-10-05T01:11:28.160Z] [INFO] \"command\": \"python3 - <<'E'\\np='README.ru.md'; s=open(p).read()\\nold=\\\"- \u0425\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u0434\u043b\u044f \u0447\u0438\u0441\u0435\u043b \u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u042e\u043d\u0438\u043a\u043e\u0434\u0430,\\\"\\nnew=\\\"\\\"\\\"- \u0420\u0430\u0437\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u043d\u0430 C# \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u0432\u044f\u0437\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043d\u0430\u0447\u0430\u043b,\\n \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043a\u043b\u044e\u0447\u0451\u043d \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435\u0442 \u0432 doublets 0.5.0 (Rust); \u0441 \u043d\u0438\u043c\\n \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430 C# \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f\\n ([experiments/csharp_split_linked_list](experiments/csharp_spl" + }, + { + "path": "research/pr-108-final-session.log", + "line": 63688, + "text": "[2026-10-05T01:11:28.160Z] [INFO] \"command\": \"cd /tmp/gh-issue-solver-1791159559061 && python3 - <<'E'\\np='README.ru.md'; s=open(p).read()\\nold=\\\"- \u0425\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u0434\u043b\u044f \u0447\u0438\u0441\u0435\u043b \u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u042e\u043d\u0438\u043a\u043e\u0434\u0430,\\\"\\nnew=\\\"\\\"\\\"- \u0420\u0430\u0437\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u043d\u0430 C# \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u0432\u044f\u0437\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043d\u0430\u0447\u0430\u043b,\\n \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043a\u043b\u044e\u0447\u0451\u043d \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435\u0442 \u0432 doublets 0.5.0 (Rust); \u0441 \u043d\u0438\u043c\\n \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430 C# \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f\\n ([experiments/csharp_spli" + }, + { + "path": "research/pr-108-final-session.log", + "line": 63703, + "text": "[2026-10-05T01:11:31.230Z] [INFO] \"description\": \"python3 - <<'E'\\np='README.ru.md'; s=open(p).read()\\nold=\\\"- \u0425\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u0434\u043b\u044f \u0447\u0438\u0441\u0435\u043b \u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u042e\u043d\u0438\u043a\u043e\u0434\u0430,\\\"\\nnew=\\\"\\\"\\\"- \u0420\u0430\u0437\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u043d\u0430 C# \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u0432\u044f\u0437\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043d\u0430\u0447\u0430\u043b,\\n \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043a\u043b\u044e\u0447\u0451\u043d \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435\u0442 \u0432 doublets 0.5.0 (Rust); \u0441 \u043d\u0438\u043c\\n \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430 C# \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f\\n ([experiments/csharp_split_linked_list](experiments/csharp_split_l" + }, + { + "path": "research/pr-108-final-session.log", + "line": 63756, + "text": "[2026-10-05T01:13:42.692Z] [INFO] \"summary\": \"python3 - <<'E'\\np='README.ru.md'; s=open(p).read()\\nold=\\\"- \u0425\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u0434\u043b\u044f \u0447\u0438\u0441\u0435\u043b \u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u042e\u043d\u0438\u043a\u043e\u0434\u0430,\\\"\\nnew=\\\"\\\"\\\"- \u0420\u0430\u0437\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u043d\u0430 C# \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u0432\u044f\u0437\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043d\u0430\u0447\u0430\u043b,\\n \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043a\u043b\u044e\u0447\u0451\u043d \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435\u0442 \u0432 doublets 0.5.0 (Rust); \u0441 \u043d\u0438\u043c\\n \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430 C# \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f\\n ([experiments/csharp_split_linked_list](experiments/csharp_split_linke" + }, + { + "path": "research/pr-108-final-session.log", + "line": 63768, + "text": "[2026-10-05T01:13:42.757Z] [INFO] \"content\": \"md-ok\\n Finished `release` profile [optimized] target(s) in 1.22s\\ntest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\ntest result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 25.07s\\n 0 Warning(s)\\n total: 28\\n failed: 0\\n succeeded: 28\\n skipped: 0\\n duration: 40s 190ms\\n\\nOK\\n[This command modified 1 file you've previously read: README.ru.md. Call Read bef" + }, + { + "path": "research/pr-108-final-session.log", + "line": 63778, + "text": "[2026-10-05T01:13:42.757Z] [INFO] \"stdout\": \"md-ok\\n Finished `release` profile [optimized] target(s) in 1.22s\\ntest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\ntest result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 25.07s\\n 0 Warning(s)\\n total: 28\\n failed: 0\\n succeeded: 28\\n skipped: 0\\n duration: 40s 190ms\\n\\nOK\",\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 65244, + "text": "[2026-10-05T01:15:07.028Z] [INFO] \"text\": \"This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.\\n\\nSummary:\\n1. Primary Request and Intent:\\n - Solve GitHub issue https://github.com/linksplatform/Comparisons.SQLiteVSDoublets/issues/107.\\n - Working directory: /tmp/gh-issue-solver-1791159559061.\\n - Branch: issue-107-bce58c21006b. Push only to this branch.\\n - PR #108 already e" + }, + { + "path": "research/pr-108-final-session.log", + "line": 66975, + "text": "[2026-10-05T01:15:45.390Z] [INFO] \"command\": \"mkdir -p ci-logs && (cd rust && cargo fmt --check && cargo clippy --all-targets --release -- -D warnings && cargo test --release) > /tmp/rust-check.log 2>&1; echo rust=$?; (cd csharp && dotnet build -c Release -warnaserror && dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build) > /tmp/cs-check.log 2>&1; echo cs=$?; (cd scripts && /tmp/venv/bin/python -m unittest discover -s . ) > /tmp/py-check.log 2>&1; echo py=$?; /tmp/mdl/n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 67009, + "text": "[2026-10-05T01:15:45.390Z] [INFO] \"command\": \"cd /tmp/gh-issue-solver-1791159559061 && mkdir -p ci-logs && (cd rust && cargo fmt --check && cargo clippy --all-targets --release -- -D warnings && cargo test --release) > /tmp/rust-check.log 2>&1; echo rust=$?; (cd csharp && dotnet build -c Release -warnaserror && dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build) > /tmp/cs-check.log 2>&1; echo cs=$?; (cd scripts && /tmp/venv/bin/python -m unittest discover -s . ) > /tmp/py-c" + }, + { + "path": "research/pr-108-final-session.log", + "line": 67023, + "text": "[2026-10-05T01:15:48.502Z] [INFO] \"description\": \"mkdir -p ci-logs && (cd rust && cargo fmt --check && cargo clippy --all-targets --release -- -D warnings && cargo test --release) > /tmp/rust-check.log 2>&1; echo rust=$?; (cd csharp && dotnet build -c Release -warnaserror && dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build) > /tmp/cs-check.log 2>&1; echo cs=$?; (cd scripts && /tmp/venv/bin/python -m unittest discover -s . ) > /tmp/py-check.log 2>&1; echo py=$?; /tmp/mdl/node_" + }, + { + "path": "research/pr-108-final-session.log", + "line": 67056, + "text": "[2026-10-05T01:17:06.795Z] [INFO] \"summary\": \"mkdir -p ci-logs && (cd rust && cargo fmt --check && cargo clippy --all-targets --release -- -D warnings && cargo test --release) > /tmp/rust-check.log 2>&1; echo rust=$?; (cd csharp && dotnet build -c Release -warnaserror && dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build) > /tmp/cs-check.log 2>&1; echo cs=$?; (cd scripts && /tmp/venv/bin/python -m unittest discover -s . ) > /tmp/py-check.log 2>&1; echo py=$?; /tmp/mdl/node_modu" + }, + { + "path": "research/pr-108-final-session.log", + "line": 67068, + "text": "[2026-10-05T01:17:06.851Z] [INFO] \"content\": \"rust=0\\ncs=0\\npy=0\\nmd=0\\n/tmp/cs-check.log:Build succeeded.\\n/tmp/cs-check.log:Test run summary: Passed!\\n/tmp/cs-check.log: total: 28\\n/tmp/cs-check.log: failed: 0\\n/tmp/cs-check.log: succeeded: 28\\n/tmp/rust-check.log:test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\n/tmp/rust-check.log:test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\n/tmp/rust-ch" + }, + { + "path": "research/pr-108-final-session.log", + "line": 67078, + "text": "[2026-10-05T01:17:06.851Z] [INFO] \"stdout\": \"rust=0\\ncs=0\\npy=0\\nmd=0\\n/tmp/cs-check.log:Build succeeded.\\n/tmp/cs-check.log:Test run summary: Passed!\\n/tmp/cs-check.log: total: 28\\n/tmp/cs-check.log: failed: 0\\n/tmp/cs-check.log: succeeded: 28\\n/tmp/rust-check.log:test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\n/tmp/rust-check.log:test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\n/tmp/rust-check.l" + }, + { + "path": "research/pr-108-final-session.log", + "line": 68570, + "text": "[2026-10-05T01:17:38.059Z] [INFO] \"content\": \"2026-10-04T19:43:41Z\\tkonard\\t## \ud83d\udea8 Solution Draft Failed\\\\nThe automated solution draft encountered an error:\\\\n```\\\\nCLAUDE stopped: Authentication expired \u2014 re-login required [authenti\\n2026-10-04T19:44:08Z\\tkonard\\t## \ud83d\udcce Intermediate working-session log (killed session)\\\\nThis log file contains the complete execution trace of the AI solution draft process.\\\\n\\\\n### \ud83d\udcce **\\n2026-10-04T19:44:10Z\\tkonard\\t\\\\" + }, + { + "path": "research/pr-108-final-session.log", + "line": 68580, + "text": "[2026-10-05T01:17:38.059Z] [INFO] \"stdout\": \"2026-10-04T19:43:41Z\\tkonard\\t## \ud83d\udea8 Solution Draft Failed\\\\nThe automated solution draft encountered an error:\\\\n```\\\\nCLAUDE stopped: Authentication expired \u2014 re-login required [authenti\\n2026-10-04T19:44:08Z\\tkonard\\t## \ud83d\udcce Intermediate working-session log (killed session)\\\\nThis log file contains the complete execution trace of the AI solution draft process.\\\\n\\\\n### \ud83d\udcce **\\n2026-10-04T19:44:10Z\\tkonard\\t\\\\n## \u26a0" + }, + { + "path": "research/pr-108-final-session.log", + "line": 71372, + "text": "[2026-10-05T01:20:21.371Z] [INFO] \"text\": \"While CI reruns, I'm waiting for the 100M probe to finish or time out.\"\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 71777, + "text": "[2026-10-05T01:30:24.544Z] [STDOUT] [log_27fc29, anthropic-workspace-id: \"wrkspc_0117gBnPr68DBsCrmom3Bxq6\", request-id: \"req_011CfiE1eG9MseFz9y3nru8y\"] post https://api.anthropic.com/v1/messages?beta=true failed with status 404 in 270ms - error; not retryable\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 73679, + "text": "[2026-10-05T01:40:50.368Z] [STDOUT] [log_f652d6, anthropic-workspace-id: \"wrkspc_0117gBnPr68DBsCrmom3Bxq6\", request-id: \"req_011CfiEon2VnDbemMNcDFSc8\"] post https://api.anthropic.com/v1/messages?beta=true failed with status 404 in 237ms - error; not retryable\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 76141, + "text": "[2026-10-05T01:51:47.057Z] [STDOUT] [log_ca0a22, anthropic-workspace-id: \"wrkspc_0117gBnPr68DBsCrmom3Bxq6\", request-id: \"req_011CfiFeBXxQD2q6PZDeFEsS\"] post https://api.anthropic.com/v1/messages?beta=true failed with status 404 in 355ms - error; not retryable\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 77067, + "text": "[2026-10-05T01:56:35.824Z] [INFO] \"command\": \"mkdir -p ci-logs && for j in 111518678796 111518678826 111518678912 111518678925; do gh api repos/linksplatform/Comparisons.SQLiteVSDoublets/actions/jobs/$j/logs > ci-logs/benchmarks-37228604862-$j.log 2>&1; echo \\\"$j $(wc -l < ci-logs/benchmarks-37228604862-$j.log)\\\"; done; grep -E \\\"Benchmark|#[0-9]|warm|variant|SQLite|Doublets|cancel|timed out|exceeded\\\" ci-logs/benchmarks-37228604862-111518678912.log | cut -c1-220 | head -50\"\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 77101, + "text": "[2026-10-05T01:56:35.824Z] [INFO] \"command\": \"cd /tmp/gh-issue-solver-1791159559061 && mkdir -p ci-logs && for j in 111518678796 111518678826 111518678912 111518678925; do gh api repos/linksplatform/Comparisons.SQLiteVSDoublets/actions/jobs/$j/logs > ci-logs/benchmarks-37228604862-$j.log 2>&1; echo \\\"$j $(wc -l < ci-logs/benchmarks-37228604862-$j.log)\\\"; done; grep -E \\\"Benchmark|#[0-9]|warm|variant|SQLite|Doublets|cancel|timed out|exceeded\\\" ci-logs/benchmarks-37228604862-111518678912.log" + }, + { + "path": "research/pr-108-final-session.log", + "line": 77138, + "text": "[2026-10-05T01:56:38.926Z] [INFO] \"description\": \"mkdir -p ci-logs && for j in 111518678796 111518678826 111518678912 111518678925; do gh api repos/linksplatform/Comparisons.SQLiteVSDoublets/actions/jobs/$j/logs > ci-logs/benchmarks-37228604862-$j.log 2>&1; echo \\\"$j $(wc -l < ci-logs/benchmarks-37228604862-$j.log)\\\"; done; grep -E \\\"Benchmark|#[0-9]|warm|variant|SQLite|Doublets|cancel|timed out|exceeded\\\" ci-logs/benchmarks-37228604862-111518678912.log | cut -c1-220 | head -50\",\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 77151, + "text": "[2026-10-05T01:56:41.066Z] [INFO] \"summary\": \"mkdir -p ci-logs && for j in 111518678796 111518678826 111518678912 111518678925; do gh api repos/linksplatform/Comparisons.SQLiteVSDoublets/actions/jobs/$j/logs > ci-logs/benchmarks-37228604862-$j.log 2>&1; echo \\\"$j $(wc -l < ci-logs/benchmarks-37228604862-$j.log)\\\"; done; grep -E \\\"Benchmark|#[0-9]|warm|variant|SQLite|Doublets|cancel|timed out|exceeded\\\" ci-logs/benchmarks-37228604862-111518678912.log | cut -c1-220 | head -50\",\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 82704, + "text": "[2026-10-05T02:01:35.887Z] [INFO] \"text\": \"I recovered the interrupted session, finished issue #107 and marked PR #108 ready for review. Every check passes on the last commit (e500f13), including CodeFactor and Codacy (0 new issues), and GitHub reports the merge state as clean.\\n\\n**Fixes since the recovered session:**\\n- **C# inserts looked about 3\u00d7 slower than they are.** C# read the new id with `INSERT \u2026 RETURNING id`, while Rust used `last_insert_rowid`. `RETURNING` costs about 6.0 \u00b5" + }, + { + "path": "research/pr-108-final-session.log", + "line": 82817, + "text": "[2026-10-05T02:01:36.073Z] [INFO] \"failed\": 0,\n" + }, + { + "path": "research/pr-108-final-session.log", + "line": 82836, + "text": "[2026-10-05T02:01:36.073Z] [INFO] \"result\": \"I recovered the interrupted session, finished issue #107 and marked PR #108 ready for review. Every check passes on the last commit (e500f13), including CodeFactor and Codacy (0 new issues), and GitHub reports the merge state as clean.\\n\\n**Fixes since the recovered session:**\\n- **C# inserts looked about 3\u00d7 slower than they are.** C# read the new id with `INSERT \u2026 RETURNING id`, while Rust used `last_insert_rowid`. `RETURNING` costs about 6.0 \u00b5s pe" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 113, + "text": "\u26a0\ufe0f SECURITY WARNING: --attach-logs is ENABLED\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 138, + "text": "[VERBOSE] agentic-cli-updater: 1 updated, 0 current, 0 failed\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 196, + "text": "\u2139\ufe0f gh auth setup-git could not write the global gitconfig: failed to set up git credential helper: failed to run git: error: could not write config file /home/box/.gitconfig: Device or resource busy\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 431, + "text": " - When the user mentions CI failures or asks to investigate logs, consider adding these todos to track the investigation: (1) list recent CI runs with timestamps, (2) download logs from failed runs to the ci-logs/ directory, (3) analyze error messages and identify the root cause, (4) implement a fix, (5) verify that the fix resolves the specific errors found in the logs.\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 433, + "text": " - When you see screenshots or images in issue descriptions, pull request descriptions, comments, or discussions, download the image to a local file first, then use the Read tool to view and analyze it. Before reading downloaded images with the Read tool, verify that the file is a valid image rather than HTML by using a CLI tool such as the 'file' command. When corrupted or non-image files, such as GitHub \\\"Not Found\\\" pages saved as `.png`, are read, they can cause \\\"Could not process image\\\"" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 580, + "text": " - When the user mentions CI failures or asks to investigate logs, consider adding these todos to track the investigation: (1) list recent CI runs with timestamps, (2) download logs from failed runs to the ci-logs/ directory, (3) analyze error messages and identify the root cause, (4) implement a fix, (5) verify that the fix resolves the specific errors found in the logs.\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 582, + "text": " - When you see screenshots or images in issue descriptions, pull request descriptions, comments, or discussions, download the image to a local file first, then use the Read tool to view and analyze it. Before reading downloaded images with the Read tool, verify that the file is a valid image rather than HTML by using a CLI tool such as the 'file' command. When corrupted or non-image files, such as GitHub \"Not Found\" pages saved as `.png`, are read, they can cause \"Could not process image\" err" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 2142, + "text": " \"content\": \"\\nOutput too large (32.7KB). Full output saved to: /home/box/.claude/projects/-tmp-gh-issue-solver-1791131286882/78aa02d9-2054-4be5-9990-31ae739e08df/tool-results/bh6kj2052.txt\\n\\nPreview (first 2KB):\\n//! SQLite implementation for links storage\\n\\nuse crate::{BlogPost, Link, Links, Objects};\\nuse rusqlite::{params, Connection};\\nuse std::path::Path;\\n\\n/// SQLite-based links storage\\npub struct SqliteLinks {\\n conn: Connection,\\n next_id: u64,\\n}\\n\\ni" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 2152, + "text": " \"stdout\": \"//! SQLite implementation for links storage\\n\\nuse crate::{BlogPost, Link, Links, Objects};\\nuse rusqlite::{params, Connection};\\nuse std::path::Path;\\n\\n/// SQLite-based links storage\\npub struct SqliteLinks {\\n conn: Connection,\\n next_id: u64,\\n}\\n\\nimpl SqliteLinks {\\n /// Create a new SQLite links storage with in-memory database\\n pub fn new_memory() -> Self {\\n let conn = Connection::open_in_memory().expect(\\\"Failed to open in-memory SQLite database\\\");\\n " + }, + { + "path": "research/pr-108-killed-session.log", + "line": 2238, + "text": " \"content\": \"#!/usr/bin/env python3\\n\\\"\\\"\\\"Shared benchmark reporting helpers for the SQLite vs Doublets comparison.\\\"\\\"\\\"\\n\\n# The language-specific pipelines parse their own benchmark formats, then use\\n# this module for consistent Markdown tables, speedup annotations, linear and\\n# logarithmic charts, and in-place result-section updates. The report format\\n# follows the sibling LinksPlatform database comparisons.\\n\\nimport os\\nimport re\\nimport shutil\\nfrom datetime import datetime, ti" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 2248, + "text": " \"stdout\": \"#!/usr/bin/env python3\\n\\\"\\\"\\\"Shared benchmark reporting helpers for the SQLite vs Doublets comparison.\\\"\\\"\\\"\\n\\n# The language-specific pipelines parse their own benchmark formats, then use\\n# this module for consistent Markdown tables, speedup annotations, linear and\\n# logarithmic charts, and in-place result-section updates. The report format\\n# follows the sibling LinksPlatform database comparisons.\\n\\nimport os\\nimport re\\nimport shutil\\nfrom datetime import datetime, timezon" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 2519, + "text": " \"content\": \"1\\t//! SQLite implementation for links storage\\n2\\t\\n3\\tuse crate::{BlogPost, Link, Links, Objects};\\n4\\tuse rusqlite::{params, Connection};\\n5\\tuse std::path::Path;\\n6\\t\\n7\\t/// SQLite-based links storage\\n8\\tpub struct SqliteLinks {\\n9\\t conn: Connection,\\n10\\t next_id: u64,\\n11\\t}\\n12\\t\\n13\\timpl SqliteLinks {\\n14\\t /// Create a new SQLite links storage with in-memory database\\n15\\t pub fn new_memory() -> Self {\\n16\\t let conn = Connection::open_in_memor" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 2531, + "text": " \"content\": \"//! SQLite implementation for links storage\\n\\nuse crate::{BlogPost, Link, Links, Objects};\\nuse rusqlite::{params, Connection};\\nuse std::path::Path;\\n\\n/// SQLite-based links storage\\npub struct SqliteLinks {\\n conn: Connection,\\n next_id: u64,\\n}\\n\\nimpl SqliteLinks {\\n /// Create a new SQLite links storage with in-memory database\\n pub fn new_memory() -> Self {\\n let conn = Connection::open_in_memory().expect(\\\"Failed to open in-memory SQLite database\\\");" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 2831, + "text": " \"content\": \"\\n\\n \\n Exe\\n net8.0\\n enable\\n \\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 9345, + "text": " \"content\": \"//! Doublets storage implementation for links\\n\\nuse crate::{BlogPost, Link, Links, Objects};\\nuse doublets::{\\n mem::{Alloc, FileMapped},\\n split::{self, DataPart, IndexPart},\\n unit::{self, LinkPart},\\n Doublets, DoubletsExt,\\n};\\nuse std::{alloc::Global, collections::HashMap, fs::OpenOptions, path::Path};\\n\\n/// Type alias for Doublets united (unit) store with volatile (in-memory) storage.\\n/// Each link is stored as a contiguous unit containing (id, source, ta" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 9355, + "text": " \"stdout\": \"//! Doublets storage implementation for links\\n\\nuse crate::{BlogPost, Link, Links, Objects};\\nuse doublets::{\\n mem::{Alloc, FileMapped},\\n split::{self, DataPart, IndexPart},\\n unit::{self, LinkPart},\\n Doublets, DoubletsExt,\\n};\\nuse std::{alloc::Global, collections::HashMap, fs::OpenOptions, path::Path};\\n\\n/// Type alias for Doublets united (unit) store with volatile (in-memory) storage.\\n/// Each link is stored as a contiguous unit containing (id, source, target)" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 13892, + "text": " \"content\": \"mod alloc;\\nmod file_mapped;\\n/// Core trait definitions, error types, and `MaybeUninit` helpers.\\npub mod raw_mem;\\nmod raw_place;\\nmod utils;\\n\\n/// Async memory module providing [`AsyncFileMem`].\\n///\\n/// Requires the `async` feature flag.\\n#[cfg(feature = \\\"async\\\")]\\npub mod async_mem;\\n\\npub(crate) use raw_place::RawPlace;\\npub use {\\n alloc::Alloc,\\n file_mapped::FileMapped,\\n raw_mem::{ErasedMem, Error, RawMem, Result},\\n};\\n\\n#[cfg(feature = \\\"async\\\")]\\npu" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 13902, + "text": " \"stdout\": \"mod alloc;\\nmod file_mapped;\\n/// Core trait definitions, error types, and `MaybeUninit` helpers.\\npub mod raw_mem;\\nmod raw_place;\\nmod utils;\\n\\n/// Async memory module providing [`AsyncFileMem`].\\n///\\n/// Requires the `async` feature flag.\\n#[cfg(feature = \\\"async\\\")]\\npub mod async_mem;\\n\\npub(crate) use raw_place::RawPlace;\\npub use {\\n alloc::Alloc,\\n file_mapped::FileMapped,\\n raw_mem::{ErasedMem, Error, RawMem, Result},\\n};\\n\\n#[cfg(feature = \\\"async\\\")]\\npub use" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 15630, + "text": " \"text\": \"This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.\\n\\nSummary:\\n1. **Primary request and intent**\\n - Solve GitHub issue https://github.com/linksplatform/Comparisons.SQLiteVSDoublets/issues/107.\\n - Working directory: /tmp/gh-issue-solver-1791131286882. Branch: issue-107-bce58c21006b. Draft PR #108 already exists; update it with `gh pr edit` and do not create a new PR.\\n - " + }, + { + "path": "research/pr-108-killed-session.log", + "line": 18173, + "text": " \"content\": \"/// }\\n///\\n/// let link = create_link(1u64, 2u64);\\n/// assert_eq!(link, (1u64, 2u64));\\n/// ```\\n#[rustfmt::skip]\\npub trait LinkReference:\\nSized\\n+ Number\\n+ Unsigned\\n+ ToSigned\\n+ MaxValue\\n+ WrappingArithmetic\\n+ FromPrimitive\\n+ TryFrom\\n+ TryFrom\\n+ TryFrom\\n+ TryFrom\\n+ TryFrom\\n+ TryFrom\\n+ TryFrom\\n+ TryFrom\\n+ TryFr" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 18183, + "text": " \"stdout\": \"/// }\\n///\\n/// let link = create_link(1u64, 2u64);\\n/// assert_eq!(link, (1u64, 2u64));\\n/// ```\\n#[rustfmt::skip]\\npub trait LinkReference:\\nSized\\n+ Number\\n+ Unsigned\\n+ ToSigned\\n+ MaxValue\\n+ WrappingArithmetic\\n+ FromPrimitive\\n+ TryFrom\\n+ TryFrom\\n+ TryFrom\\n+ TryFrom\\n+ TryFrom\\n+ TryFrom\\n+ TryFrom\\n+ TryFrom\\n+ TryFrom src/lib.rs <<'EOF'\\npub mod dataset;\\npub mod harness;\\npub mod links;\\npub mod objects;\\nEOF\\ncat > src/main.rs <<'EOF'\\n//! Usage: sqlite-vs-doublets <32|64> [--work N | --repetitions N]\\n//! [--variants A,B] [--directory DIR] [--output FILE]\\n//!\\n//! Repetitions default to `work / size` (at least one), so every size does about the same total work.\\n\\nuse doublets::data::LinkReference;\\nuse s" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 23728, + "text": " \"command\": \"cd /tmp/gh-issue-solver-1791131286882/rust; cat > src/lib.rs <<'EOF'\\npub mod dataset;\\npub mod harness;\\npub mod links;\\npub mod objects;\\nEOF\\ncat > src/main.rs <<'EOF'\\n//! Usage: sqlite-vs-doublets <32|64> [--work N | --repetitions N]\\n//! [--variants A,B] [--directory DIR] [--output FILE]\\n//!\\n//! Repetitions default to `work / size` (at least one), so every size does about the same total work.\\n\\nuse doublets::data::LinkReference;\\nuse serde" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 23793, + "text": " \"content\": \" f32\\n f64\\n i16\\n i32\\n i64\\n i8\\n isize\\n u16\\n and 2 others\\nnote: required by a bound in `Row::<'_>::get`\\n --> /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rusqlite-0.40.2/src/row.rs:285:32\\n |\\n285 | pub fn get(&self, idx: I) -> Result {\\n | ^^^^^^^ required by this bou" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 23803, + "text": " \"stdout\": \" f32\\n f64\\n i16\\n i32\\n i64\\n i8\\n isize\\n u16\\n and 2 others\\nnote: required by a bound in `Row::<'_>::get`\\n --> /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rusqlite-0.40.2/src/row.rs:285:32\\n |\\n285 | pub fn get(&self, idx: I) -> Result {\\n | ^^^^^^^ required by this bound in" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 23867, + "text": " \"+ _ => panic!(\\\"bits must be 32 or 64\\\"),\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 23898, + "text": " \"+ _ => panic!(\\\"category must be links or objects\\\"),\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 24183, + "text": " \"content\": \"error[E0119]: conflicting implementations of trait `LinksStorage<_>` for type `SqliteLinks<_>`\\n --> src/links.rs:133:1\\n |\\n 75 | impl LinksStorage for SqliteLinks {\\n | --------------------------------------------------------- first implementation here\\n...\\n133 | impl> LinksStorage for D {\\n--\\nerror[E0308]: mismatched types\\n --> src/harness.rs:317:61\\n |\\n317 | measure(variant, n, repeti" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 24193, + "text": " \"stdout\": \"error[E0119]: conflicting implementations of trait `LinksStorage<_>` for type `SqliteLinks<_>`\\n --> src/links.rs:133:1\\n |\\n 75 | impl LinksStorage for SqliteLinks {\\n | --------------------------------------------------------- first implementation here\\n...\\n133 | impl> LinksStorage for D {\\n--\\nerror[E0308]: mismatched types\\n --> src/harness.rs:317:61\\n |\\n317 | measure(variant, n, repetitions" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 25085, + "text": " \" _ => panic!(\\\"unknown links variant {variant}\\\"),\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 25163, + "text": " \" _ => panic!(\\\"unknown objects variant {variant}\\\"),\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 25618, + "text": " \"content\": \" Finished `release` profile [optimized] target(s) in 0.12s\\nthread 'main' (24160) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/split/generic/internal_sources_recursion_less_tree.rs:153:19:\\nindex out of bounds: the len is 1040384 but the index is 1048575\\nnote: run with `RUST_BACKTRACE=1` environment variable to display a backtrace\\nthread 'main' (24163) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 25628, + "text": " \"stdout\": \" Finished `release` profile [optimized] target(s) in 0.12s\\nthread 'main' (24160) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/split/generic/internal_sources_recursion_less_tree.rs:153:19:\\nindex out of bounds: the len is 1040384 but the index is 1048575\\nnote: run with `RUST_BACKTRACE=1` environment variable to display a backtrace\\nthread 'main' (24163) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b55" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 25901, + "text": " \"description\": \"Backtrace for split store panic\"\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 25936, + "text": " \"description\": \"Backtrace for split store panic\"\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 25948, + "text": " \"content\": \"thread 'main' (24457) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/split/generic/internal_sources_recursion_less_tree.rs:153:19:\\nindex out of bounds: the len is 1040384 but the index is 1048575\\nstack backtrace:\\n 0: __rustc::rust_begin_unwind\\n 1: core::panicking::panic_fmt\\n 2: core::panicking::panic_bounds_check\\n 3: &1 | grep -E \\\"ok|panicked|index out\\\" | head -2; done\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 27962, + "text": " \"command\": \"cd /tmp/gh-issue-solver-1791131286882/experiments/split_store_delete; for n in 1 2 3 4; do RUST_BACKTRACE=1 ./target/release/split_store_delete split $n swap forward 2>&1 | grep -E \\\"ok|panicked|index out\\\" | head -2; done\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 27975, + "text": " \"content\": \"thread 'main' (26083) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/split/generic/internal_sources_recursion_less_tree.rs:153:19:\\nindex out of bounds: the len is 1040384 but the index is 1048575\\nthread 'main' (26087) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/split/generic/internal_sources_recursion_less_tree.rs:153:19:\\nindex out of bounds: the len is 1040384 but the " + }, + { + "path": "research/pr-108-killed-session.log", + "line": 27985, + "text": " \"stdout\": \"thread 'main' (26083) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/split/generic/internal_sources_recursion_less_tree.rs:153:19:\\nindex out of bounds: the len is 1040384 but the index is 1048575\\nthread 'main' (26087) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/split/generic/internal_sources_recursion_less_tree.rs:153:19:\\nindex out of bounds: the len is 1040384 but the index" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 28885, + "text": " \"command\": \"cat > src/main.rs <<'EOF'\\n//! Minimal reproductions of a `doublets` 0.5.0 split store bug: deleting a link panics\\n//! with \\\"index out of bounds\\\" in `InternalSourcesRecursionlessTree` after some updates.\\nuse doublets::{Doublets, mem::Global, split, unit};\\n\\ntype Step = (&'static str, u32, u32, u32);\\n\\nfn run>(mut store: D, steps: &[Step]) -> u32 {\\n for &(operation, id, from, to) in steps {\\n match operation {\\n \\\"create\\\" => asse" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 28920, + "text": " \"command\": \"cd /tmp/gh-issue-solver-1791131286882/experiments/split_store_delete && cat > src/main.rs <<'EOF'\\n//! Minimal reproductions of a `doublets` 0.5.0 split store bug: deleting a link panics\\n//! with \\\"index out of bounds\\\" in `InternalSourcesRecursionlessTree` after some updates.\\nuse doublets::{Doublets, mem::Global, split, unit};\\n\\ntype Step = (&'static str, u32, u32, u32);\\n\\nfn run>(mut store: D, steps: &[Step]) -> u32 {\\n for &(operation, id, from, to) i" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 29557, + "text": " \"content\": \"{\\\"message\\\":\\\"Successfully stopped task: b0h6yvwvf (cat > src/main.rs <<'EOF'\\\\n//! Minimal reproductions of a `doublets` 0.5.0 split store bug: deleting a link panics\\\\n//! with \\\\\\\"index out of bounds\\\\\\\" in `InternalSourcesRecursionlessTree` after some updates.\\\\nuse doublets::{Doublets, mem::Global, split, unit};\\\\n\\\\ntype Step = (&'static str, u32, u32, u32);\\\\n\\\\nfn run>(mut store: D, steps: &[Step]) -> u32 {\\\\n for &(operation, id, from, to) in ste" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 29566, + "text": " \"message\": \"Successfully stopped task: b0h6yvwvf (cat > src/main.rs <<'EOF'\\n//! Minimal reproductions of a `doublets` 0.5.0 split store bug: deleting a link panics\\n//! with \\\"index out of bounds\\\" in `InternalSourcesRecursionlessTree` after some updates.\\nuse doublets::{Doublets, mem::Global, split, unit};\\n\\ntype Step = (&'static str, u32, u32, u32);\\n\\nfn run>(mut store: D, steps: &[Step]) -> u32 {\\n for &(operation, id, from, to) in steps {\\n match operation {" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 29569, + "text": " \"command\": \"cat > src/main.rs <<'EOF'\\n//! Minimal reproductions of a `doublets` 0.5.0 split store bug: deleting a link panics\\n//! with \\\"index out of bounds\\\" in `InternalSourcesRecursionlessTree` after some updates.\\nuse doublets::{Doublets, mem::Global, split, unit};\\n\\ntype Step = (&'static str, u32, u32, u32);\\n\\nfn run>(mut store: D, steps: &[Step]) -> u32 {\\n for &(operation, id, from, to) in steps {\\n match operation {\\n \\\"create\\\" => assert_eq!" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 29766, + "text": " \"command\": \"python3 - <<'EOF'\\np='src/main.rs'\\ns=open(p).read()\\ns=s.replace(\\\"\\\"\\\" let kind = std::env::args().nth(1).unwrap_or_default();\\n std::panic::set_hook(Box::new(|_| {}));\\n for (name, steps) in scenarios {\\n let result = std::panic::catch_unwind(|| match kind.as_str() {\\n \\\"unit\\\" => run(unit::Store::::new(Global::new()).unwrap(), &steps),\\n _ => run(split::Store::::new(Global::new(), Global::new()).unwrap(), &steps)," + }, + { + "path": "research/pr-108-killed-session.log", + "line": 29801, + "text": " \"command\": \"cd /tmp/gh-issue-solver-1791131286882/experiments/split_store_delete && python3 - <<'EOF'\\np='src/main.rs'\\ns=open(p).read()\\ns=s.replace(\\\"\\\"\\\" let kind = std::env::args().nth(1).unwrap_or_default();\\n std::panic::set_hook(Box::new(|_| {}));\\n for (name, steps) in scenarios {\\n let result = std::panic::catch_unwind(|| match kind.as_str() {\\n \\\"unit\\\" => run(unit::Store::::new(Global::new()).unwrap(), &steps),\\n _ => run(split::Stor" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 30081, + "text": " \"command\": \"sed -i 's| for &(operation, id, from, to) in steps {| for \\\\&(operation, id, from, to) in steps {\\\\n eprintln!(\\\"{operation} {id} {from} {to}\\\");|' src/main.rs && cargo build --release -q && for s in \\\"split 0\\\" \\\"split 3\\\" \\\"split 4\\\" \\\"unit 4\\\"; do echo \\\"== $s\\\"; RUST_BACKTRACE=1 timeout 5 ./target/release/split_store_delete $s 2>&1 | grep -v \\\"at /rustc\\\" | grep -E \\\"^(create|update|delete)|panicked|index| [0-9]+:\\\" | head -14; done\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 30116, + "text": " \"command\": \"cd /tmp/gh-issue-solver-1791131286882/experiments/split_store_delete && sed -i 's| for &(operation, id, from, to) in steps {| for \\\\&(operation, id, from, to) in steps {\\\\n eprintln!(\\\"{operation} {id} {from} {to}\\\");|' src/main.rs && cargo build --release -q && for s in \\\"split 0\\\" \\\"split 3\\\" \\\"split 4\\\" \\\"unit 4\\\"; do echo \\\"== $s\\\"; RUST_BACKTRACE=1 timeout 5 ./target/release/split_store_delete $s 2>&1 | grep -v \\\"at /rustc\\\" | grep -E \\\"^(create|update|delete)" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 30142, + "text": " \"status\": \"failed\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 30155, + "text": " \"content\": \"Exit code 143\\n== split 0\\ncreate 1 1 1\\nupdate 1 1 1\\ndelete 1 0 0\\nthread 'main' (28179) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/split/generic/internal_sources_recursion_less_tree.rs:153:19:\\nindex out of bounds: the len is 1040384 but the index is 1048575\\n 0: __rustc::rust_begin_unwind\\n 1: core::panicking::panic_fmt\\n 2: core::panicking::panic_bounds_check\\n 3: `, exit code 101 is the panic.\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 35269, + "text": " \"content\": \"//! Runs every storage through the same lifecycle on a fresh store per repetition:\\n//! a timed batch per operation, each validated against the expected count and checksum.\\n\\nuse crate::{\\n dataset::{self, blog_post, link, mix, scattered},\\n links::{DoubletsLinks, Link, LinksStorage, SqliteLinks},\\n objects::{BlogPostsStorage, DoubletsBlogPosts, SqliteBlogPosts},\\n};\\nuse doublets::{\\n data::LinkReference,\\n mem::{FileMapped, Global},\\n split, unit,\\n};\\nus" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 35279, + "text": " \"stdout\": \"//! Runs every storage through the same lifecycle on a fresh store per repetition:\\n//! a timed batch per operation, each validated against the expected count and checksum.\\n\\nuse crate::{\\n dataset::{self, blog_post, link, mix, scattered},\\n links::{DoubletsLinks, Link, LinksStorage, SqliteLinks},\\n objects::{BlogPostsStorage, DoubletsBlogPosts, SqliteBlogPosts},\\n};\\nuse doublets::{\\n data::LinkReference,\\n mem::{FileMapped, Global},\\n split, unit,\\n};\\nuse ser" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 35715, + "text": " \"content\": \" Compiling sqlite-vs-doublets v0.2.0 (/tmp/gh-issue-solver-1791131286882/rust)\\n Finished `release` profile [optimized] target(s) in 43.59s\\n Running unittests src/lib.rs (target/release/deps/sqlite_vs_doublets-229a1de9b520ac5d)\\n\\nrunning 0 tests\\n\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\n\\n Running unittests src/main.rs (target/release/deps/sqlite_vs_doublets-9e5bf01001ab7934)\\n\\nrunning 0 tests\\n\\ntest res" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 35725, + "text": " \"stdout\": \" Compiling sqlite-vs-doublets v0.2.0 (/tmp/gh-issue-solver-1791131286882/rust)\\n Finished `release` profile [optimized] target(s) in 43.59s\\n Running unittests src/lib.rs (target/release/deps/sqlite_vs_doublets-229a1de9b520ac5d)\\n\\nrunning 0 tests\\n\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\n\\n Running unittests src/main.rs (target/release/deps/sqlite_vs_doublets-9e5bf01001ab7934)\\n\\nrunning 0 tests\\n\\ntest result: " + }, + { + "path": "research/pr-108-killed-session.log", + "line": 36603, + "text": " \"content\": \"151- }\\n152-\\n153: fn balanced_variant(&mut self, mut layer: Vec) -> T {\\n154- while layer.len() > 1 {\\n155- layer = layer\\n156- .chunks(2)\\n157- .map(|pair| match *pair {\\n158- [source, target] => self.links.get_or_create(source, target).unwrap(),\\n159- [last] => last,\\n160- _ => unreachable!(),\\n161- })\\n162- .collect();\\n163- " + }, + { + "path": "research/pr-108-killed-session.log", + "line": 36613, + "text": " \"stdout\": \"151- }\\n152-\\n153: fn balanced_variant(&mut self, mut layer: Vec) -> T {\\n154- while layer.len() > 1 {\\n155- layer = layer\\n156- .chunks(2)\\n157- .map(|pair| match *pair {\\n158- [source, target] => self.links.get_or_create(source, target).unwrap(),\\n159- [last] => last,\\n160- _ => unreachable!(),\\n161- })\\n162- .collect();\\n163- }\\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 37442, + "text": " \" _ => panic!(\\\"unknown links variant {variant}\\\"),\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 39234, + "text": " \"status\": \"failed\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 39245, + "text": " \"status\": \"failed\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 39247, + "text": " \"summary\": \"Background command \\\"Time links benchmarks at 100k and 1M\\\" failed with exit code 1\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 39509, + "text": " \"status\": \"failed\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 39520, + "text": " \"status\": \"failed\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 39522, + "text": " \"summary\": \"Background command \\\"Time objects benchmarks at 10k\\\" failed with exit code 1\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 39540, + "text": " \"description\": \"Inspect failed sizing run\"\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 39575, + "text": " \"description\": \"Inspect failed sizing run\"\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 41956, + "text": " \"text\": \"This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.\\n\\nSummary:\\n1. **Primary request and intent**\\n - Solve GitHub issue https://github.com/linksplatform/Comparisons.SQLiteVSDoublets/issues/107.\\n - Working directory: /tmp/gh-issue-solver-1791131286882. Branch: issue-107-bce58c21006b.\\n - Draft PR #108 already exists: update it with `gh pr edit` and never create a new PR.\\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 42769, + "text": " \"content\": \"//! Deterministic data shared by every storage and by the C# implementation.\\n\\nconst GOLDEN_GAMMA: u64 = 0x9E37_79B9_7F4A_7C15;\\n\\npub fn splitmix64(x: u64) -> u64 {\\n let mut z = x.wrapping_add(GOLDEN_GAMMA);\\n z = (z ^ (z >> 30)).wrapping_mul(0xBF58_476D_1CE4_E5B9);\\n z = (z ^ (z >> 27)).wrapping_mul(0x94D0_49BB_1331_11EB);\\n z ^ (z >> 31)\\n}\\n\\n/// The `(from, to)` pair of the link with id `i`: both reference already created ids\\n/// and `from + to == i + 1`, " + }, + { + "path": "research/pr-108-killed-session.log", + "line": 42779, + "text": " \"stdout\": \"//! Deterministic data shared by every storage and by the C# implementation.\\n\\nconst GOLDEN_GAMMA: u64 = 0x9E37_79B9_7F4A_7C15;\\n\\npub fn splitmix64(x: u64) -> u64 {\\n let mut z = x.wrapping_add(GOLDEN_GAMMA);\\n z = (z ^ (z >> 30)).wrapping_mul(0xBF58_476D_1CE4_E5B9);\\n z = (z ^ (z >> 27)).wrapping_mul(0x94D0_49BB_1331_11EB);\\n z ^ (z >> 31)\\n}\\n\\n/// The `(from, to)` pair of the link with id `i`: both reference already created ids\\n/// and `from + to == i + 1`, so ev" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 47206, + "text": " \"content\": \"Exit code 2\\nTraceback (most recent call last):\\n File \\\"\\\", line 3, in \\nTypeError: %i format: a real number is required, not str\\nugrep: warning: Dataset.cs: No such file or directory\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 47216, + "text": " \"tool_use_result\": \"Error: Exit code 2\\nTraceback (most recent call last):\\n File \\\"\\\", line 3, in \\nTypeError: %i format: a real number is required, not str\\nugrep: warning: Dataset.cs: No such file or directory\"\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 47222, + "text": "ugrep: warning: Dataset.cs: No such file or directory\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 53780, + "text": " \"text\": \"This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.\\n\\nSummary:\\n1. **Primary Request and Intent**\\n - Solve GitHub issue https://github.com/linksplatform/Comparisons.SQLiteVSDoublets/issues/107.\\n - Working directory: /tmp/gh-issue-solver-1791131286882.\\n - Branch: issue-107-bce58c21006b.\\n - Draft PR #108 already exists. Update it with `gh pr edit` and never create a" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 55698, + "text": " \"content\": \"Running tests from /tmp/gh-issue-solver-1791131286882/csharp/SQLiteVSDoublets.Tests/bin/Debug/net10.0/SQLiteVSDoublets.Tests.dll (net10.0|x64)\\nfailed Comparisons.SQLiteVSDoublets.Tests.StoragesTests.EveryObjectsVariantPassesTheLifecycle(variant: \\\"Doublets_United_Volatile_Cached\\\") (396ms)\\n from /tmp/gh-issue-solver-1791131286882/csharp/SQLiteVSDoublets.Tests/bin/Debug/net10.0/SQLiteVSDoublets.Tests.dll (net10.0|x64)\\n Xunit.MicrosoftTestingPlatform.XunitException: System" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 55708, + "text": " \"stdout\": \"Running tests from /tmp/gh-issue-solver-1791131286882/csharp/SQLiteVSDoublets.Tests/bin/Debug/net10.0/SQLiteVSDoublets.Tests.dll (net10.0|x64)\\nfailed Comparisons.SQLiteVSDoublets.Tests.StoragesTests.EveryObjectsVariantPassesTheLifecycle(variant: \\\"Doublets_United_Volatile_Cached\\\") (396ms)\\n from /tmp/gh-issue-solver-1791131286882/csharp/SQLiteVSDoublets.Tests/bin/Debug/net10.0/SQLiteVSDoublets.Tests.dll (net10.0|x64)\\n Xunit.MicrosoftTestingPlatform.XunitException: System.Null" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 61443, + "text": "[log_8fa259, anthropic-workspace-id: \"wrkspc_0117gBnPr68DBsCrmom3Bxq6\", request-id: \"req_011CfhbhiRiz9cL8fTgW9TDS\"] post https://api.anthropic.com/v1/messages?beta=true failed with status 404 in 5305ms - error; not retryable\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 62111, + "text": " \"content\": \"SQLiteVSDoublets/Links.cs:111: public void Delete(T id) => links.Delete(id, handler: null);\\nSQLiteVSDoublets/Objects.cs:180: _links.Delete(_links.SingleOrDefault([_any, objectProperty, _any])![0], handler: null);\\nSQLiteVSDoublets/Objects.cs:181: _links.Delete(objectProperty, handler: null);\\nSQLiteVSDoublets/Objects.cs:183: _links.Delete(id, handler: null);\\nRunning tests from /tmp/gh-issue-solver-1791131286882/csharp/SQLiteVSDoublets.Tests/b" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 62121, + "text": " \"stdout\": \"SQLiteVSDoublets/Links.cs:111: public void Delete(T id) => links.Delete(id, handler: null);\\nSQLiteVSDoublets/Objects.cs:180: _links.Delete(_links.SingleOrDefault([_any, objectProperty, _any])![0], handler: null);\\nSQLiteVSDoublets/Objects.cs:181: _links.Delete(objectProperty, handler: null);\\nSQLiteVSDoublets/Objects.cs:183: _links.Delete(id, handler: null);\\nRunning tests from /tmp/gh-issue-solver-1791131286882/csharp/SQLiteVSDoublets.Tests/bin/De" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 64485, + "text": " \"content\": \"Running tests from /tmp/gh-issue-solver-1791131286882/csharp/SQLiteVSDoublets.Tests/bin/Debug/net10.0/SQLiteVSDoublets.Tests.dll (net10.0|x64)\\n[+0/x0/?0] SQLiteVSDoublets.Tests.dll (net10.0|x64)(2s)\\n\\n[+2/x0/?0] SQLiteVSDoublets.Tests.dll (net10.0|x64)(5s)\\n\\n[+2/x0/?0] SQLiteVSDoublets.Tests.dll (net10.0|x64)(8s)\\n\\n[+3/x0/?0] SQLiteVSDoublets.Tests.dll (net10.0|x64)(11s)\\n\\n[+7/x0/?0] SQLiteVSDoublets.Tests.dll (net10.0|x64)(14s)\\n\\n[+13/x0/?0] SQLiteVSDoublets.Tests.dll " + }, + { + "path": "research/pr-108-killed-session.log", + "line": 64495, + "text": " \"stdout\": \"Running tests from /tmp/gh-issue-solver-1791131286882/csharp/SQLiteVSDoublets.Tests/bin/Debug/net10.0/SQLiteVSDoublets.Tests.dll (net10.0|x64)\\n[+0/x0/?0] SQLiteVSDoublets.Tests.dll (net10.0|x64)(2s)\\n\\n[+2/x0/?0] SQLiteVSDoublets.Tests.dll (net10.0|x64)(5s)\\n\\n[+2/x0/?0] SQLiteVSDoublets.Tests.dll (net10.0|x64)(8s)\\n\\n[+3/x0/?0] SQLiteVSDoublets.Tests.dll (net10.0|x64)(11s)\\n\\n[+7/x0/?0] SQLiteVSDoublets.Tests.dll (net10.0|x64)(14s)\\n\\n[+13/x0/?0] SQLiteVSDoublets.Tests.dll (net1" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 65386, + "text": " \"content\": \"60228\\n |_| SqliteBlogPosts::::in_memory(),\\n objects_lifecycle,\\n ),\\n \\\"SQLite_File\\\" => measure(\\n variant,\\n n,\\n repetitions,\\n directory,\\n |dir| SqliteBlogPosts::::open(file(dir, \\\"blog_posts.db\\\")),\\n objects_lifecycle,\\n ),\\n \\\"Doublets_United_Volatile\\\" => measure(\\n variant,\\n n,\\n repetitions,\\n direc" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 65396, + "text": " \"stdout\": \"60228\\n |_| SqliteBlogPosts::::in_memory(),\\n objects_lifecycle,\\n ),\\n \\\"SQLite_File\\\" => measure(\\n variant,\\n n,\\n repetitions,\\n directory,\\n |dir| SqliteBlogPosts::::open(file(dir, \\\"blog_posts.db\\\")),\\n objects_lifecycle,\\n ),\\n \\\"Doublets_United_Volatile\\\" => measure(\\n variant,\\n n,\\n repetitions,\\n directory," + }, + { + "path": "research/pr-108-killed-session.log", + "line": 65688, + "text": " \"content\": \"//! Runs every storage through the same lifecycle on a fresh store per repetition:\\n//! a timed batch per operation, each validated against the expected count and checksum.\\n\\nuse crate::{\\n dataset::{self, blog_post, link, mix, scattered},\\n links::{DoubletsLinks, Link, LinksStorage, SqliteLinks},\\n objects::{BlogPostsStorage, DoubletsBlogPosts, SqliteBlogPosts},\\n};\\nuse doublets::{\\n data::LinkReference,\\n mem::{FileMapped, Global},\\n split, unit,\\n};\\nus" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 65698, + "text": " \"stdout\": \"//! Runs every storage through the same lifecycle on a fresh store per repetition:\\n//! a timed batch per operation, each validated against the expected count and checksum.\\n\\nuse crate::{\\n dataset::{self, blog_post, link, mix, scattered},\\n links::{DoubletsLinks, Link, LinksStorage, SqliteLinks},\\n objects::{BlogPostsStorage, DoubletsBlogPosts, SqliteBlogPosts},\\n};\\nuse doublets::{\\n data::LinkReference,\\n mem::{FileMapped, Global},\\n split, unit,\\n};\\nuse ser" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 65931, + "text": " \"command\": \"python3 - <<'EOF'\\nimport re\\np='src/harness.rs'\\ns=open(p).read()\\ni=s.index(\\\"pub fn measure_objects\\\")\\nhead,tail=s[:i],s[i:]\\ntail=tail.replace(\\\"unit::Store::::new(Global::new()).unwrap()\\\",\\\"unit::Store::::with_constants(Global::new(), LinksConstants::external()).unwrap()\\\")\\ntail=tail.replace('unit::Store::::new(mapped(dir, \\\"links.links\\\")).unwrap()','unit::Store::::with_constants(mapped(dir, \\\"links.links\\\"), LinksConstants::external())\\\\n " + }, + { + "path": "research/pr-108-killed-session.log", + "line": 65967, + "text": " \"command\": \"cd /tmp/gh-issue-solver-1791131286882/rust && python3 - <<'EOF'\\nimport re\\np='src/harness.rs'\\ns=open(p).read()\\ni=s.index(\\\"pub fn measure_objects\\\")\\nhead,tail=s[:i],s[i:]\\ntail=tail.replace(\\\"unit::Store::::new(Global::new()).unwrap()\\\",\\\"unit::Store::::with_constants(Global::new(), LinksConstants::external()).unwrap()\\\")\\ntail=tail.replace('unit::Store::::new(mapped(dir, \\\"links.links\\\")).unwrap()','unit::Store::::with_constants(mapped(dir, \\\"links." + }, + { + "path": "research/pr-108-killed-session.log", + "line": 66038, + "text": " \"content\": \" Checking rusqlite v0.40.2\\n Checking sqlite-vs-doublets v0.2.0 (/tmp/gh-issue-solver-1791131286882/rust)\\n Finished `dev` profile [unoptimized + debuginfo] target(s) in 28.84s\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\ntest result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 8.39s\\ntest res" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 66048, + "text": " \"stdout\": \" Checking rusqlite v0.40.2\\n Checking sqlite-vs-doublets v0.2.0 (/tmp/gh-issue-solver-1791131286882/rust)\\n Finished `dev` profile [unoptimized + debuginfo] target(s) in 28.84s\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\ntest result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 8.39s\\ntest result: " + }, + { + "path": "research/pr-108-killed-session.log", + "line": 68834, + "text": " \"content\": \"//! Minimal reproductions of a `doublets` 0.5.0 split store bug.\\n//!\\n//! `split::Store::update_links` detaches the link and only then asks `is_virtual(new_source)`,\\n//! which is `is_unused`: `size_as_target == 0 && source != 0`. Right after the detach that is true\\n//! for the link itself, so updating a link to reference itself attaches it to the external\\n//! (header) trees. A later delete looks for it in its own internal trees and panics with\\n//! \\\"index out of bounds\\\"" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 68844, + "text": " \"stdout\": \"//! Minimal reproductions of a `doublets` 0.5.0 split store bug.\\n//!\\n//! `split::Store::update_links` detaches the link and only then asks `is_virtual(new_source)`,\\n//! which is `is_unused`: `size_as_target == 0 && source != 0`. Right after the detach that is true\\n//! for the link itself, so updating a link to reference itself attaches it to the external\\n//! (header) trees. A later delete looks for it in its own internal trees and panics with\\n//! \\\"index out of bounds\\\" in `" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 71532, + "text": "[log_2fa23f, anthropic-workspace-id: \"wrkspc_0117gBnPr68DBsCrmom3Bxq6\", request-id: \"req_011Cfhd57GrKjxzxrtrGJQLC\"] post https://api.anthropic.com/v1/messages?beta=true failed with status 404 in 325ms - error; not retryable\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 72784, + "text": " \"content\": \" 318 scripts/benchmark_report.py\\n 96 scripts/test_benchmark_report.py\\n 414 total\\n#!/usr/bin/env python3\\n\\\"\\\"\\\"Shared benchmark reporting helpers for the SQLite vs Doublets comparison.\\\"\\\"\\\"\\n\\n# The language-specific pipelines parse their own benchmark formats, then use\\n# this module for consistent Markdown tables, speedup annotations, linear and\\n# logarithmic charts, and in-place result-section updates. The report format\\n# follows the sibling LinksPlatform databas" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 72794, + "text": " \"stdout\": \" 318 scripts/benchmark_report.py\\n 96 scripts/test_benchmark_report.py\\n 414 total\\n#!/usr/bin/env python3\\n\\\"\\\"\\\"Shared benchmark reporting helpers for the SQLite vs Doublets comparison.\\\"\\\"\\\"\\n\\n# The language-specific pipelines parse their own benchmark formats, then use\\n# this module for consistent Markdown tables, speedup annotations, linear and\\n# logarithmic charts, and in-place result-section updates. The report format\\n# follows the sibling LinksPlatform database com" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 75382, + "text": " \"- print(\\\"Warning: matplotlib/numpy not installed, skipping chart generation\\\")\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 75915, + "text": " \"originalFile\": \"#!/usr/bin/env python3\\n\\\"\\\"\\\"Shared benchmark reporting helpers for the SQLite vs Doublets comparison.\\\"\\\"\\\"\\n\\n# The language-specific pipelines parse their own benchmark formats, then use\\n# this module for consistent Markdown tables, speedup annotations, linear and\\n# logarithmic charts, and in-place result-section updates. The report format\\n# follows the sibling LinksPlatform database comparisons.\\n\\nimport os\\nimport re\\nimport shutil\\nfrom datetime import datetime, t" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 81865, + "text": " \"status\": \"failed\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 86444, + "text": " \"status\": \"failed\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 92583, + "text": " \"content\": \"Test run summary: Passed!\\n total: 28\\n failed: 0\\n succeeded: 28\\n skipped: 0\\n duration: 27s 753ms\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 92593, + "text": " \"stdout\": \"Test run summary: Passed!\\n total: 28\\n failed: 0\\n succeeded: 28\\n skipped: 0\\n duration: 27s 753ms\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 94914, + "text": " \"content\": \"//! Usage: sqlite-vs-doublets <32|64> [--work N | --repetitions N]\\n//! [--variants A,B] [--directory DIR] [--output FILE]\\n//!\\n//! Repetitions default to `work / size` clamped to `1..=MAX_REPETITIONS`, so smaller sizes get more,\\n//! but not endless, repetitions.\\n\\nuse doublets::data::LinkReference;\\nuse serde_json::json;\\nuse sqlite_vs_doublets::harness::{self, LINKS_VARIANTS, Measurement, OBJECTS_VARIANTS};\\nuse std::{collections::HashMap, e" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 94924, + "text": " \"stdout\": \"//! Usage: sqlite-vs-doublets <32|64> [--work N | --repetitions N]\\n//! [--variants A,B] [--directory DIR] [--output FILE]\\n//!\\n//! Repetitions default to `work / size` clamped to `1..=MAX_REPETITIONS`, so smaller sizes get more,\\n//! but not endless, repetitions.\\n\\nuse doublets::data::LinkReference;\\nuse serde_json::json;\\nuse sqlite_vs_doublets::harness::{self, LINKS_VARIANTS, Measurement, OBJECTS_VARIANTS};\\nuse std::{collections::HashMap, env, f" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 101254, + "text": " \"content\": \"name: Benchmarks\\n\\n# Every job measures one README table (language, category, bits, size) with all its variants on one runner,\\n# so that the variants of a table are compared on the same machine. Pull requests run the whole pipeline\\n# on small sizes; pushes to main publish the results to README.md and README.ru.md.\\non:\\n push:\\n branches: [main]\\n paths: ['rust/**', 'csharp/**', 'scripts/**', '.github/workflows/benchmarks.yml']\\n pull_request:\\n paths: ['rust/" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 101289, + "text": " \"content\": \"name: Benchmarks\\n\\n# Every job measures one README table (language, category, bits, size) with all its variants on one runner,\\n# so that the variants of a table are compared on the same machine. Pull requests run the whole pipeline\\n# on small sizes; pushes to main publish the results to README.md and README.ru.md.\\non:\\n push:\\n branches: [main]\\n paths: ['rust/**', 'csharp/**', 'scripts/**', '.github/workflows/benchmarks.yml']\\n pull_request:\\n paths: ['rust/**'," + }, + { + "path": "research/pr-108-killed-session.log", + "line": 101312, + "text": " \"content\": \"name: Benchmarks\\n\\n# Every job measures one README table (language, category, bits, size) with all its variants on one runner,\\n# so that the variants of a table are compared on the same machine. Pull requests run the whole pipeline\\n# on small sizes; pushes to main publish the results to README.md and README.ru.md.\\non:\\n push:\\n branches: [main]\\n paths: ['rust/**', 'csharp/**', 'scripts/**', '.github/workflows/benchmarks.yml']\\n pull_request:\\n paths: ['rust/**', '" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 110964, + "text": " \"content\": \"rust=0\\n\\nrunning 0 tests\\n\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\n\\ncs=0\\n/tmp/gh-issue-solver-1791131286882/csharp/SQLiteVSDoublets.Tests/bin/Release/net10.0/SQLiteVSDoublets.Tests.dll (net10.0|x64) passed (22s 846ms)\\n\\nTest run summary: Passed!\\n total: 28\\n failed: 0\\n succeeded: 28\\n skipped: 0\\n duration: 24s 747ms\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 110974, + "text": " \"stdout\": \"rust=0\\n\\nrunning 0 tests\\n\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\n\\ncs=0\\n/tmp/gh-issue-solver-1791131286882/csharp/SQLiteVSDoublets.Tests/bin/Release/net10.0/SQLiteVSDoublets.Tests.dll (net10.0|x64) passed (22s 846ms)\\n\\nTest run summary: Passed!\\n total: 28\\n failed: 0\\n succeeded: 28\\n skipped: 0\\n duration: 24s 747ms\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 111235, + "text": " \"content\": \"test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\ntest result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 7.29s\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\nremote: https://github.com/linksplatform/Comparisons.SQLiteVSDoublets/security/dependabot " + }, + { + "path": "research/pr-108-killed-session.log", + "line": 111245, + "text": " \"stdout\": \"test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\ntest result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 7.29s\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\nremote: https://github.com/linksplatform/Comparisons.SQLiteVSDoublets/security/dependabot \\nr" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 119358, + "text": " \"text\": \"Rust objects at 1M failed within two minutes. I'll download the logs:\"\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 119400, + "text": " \"command\": \"mkdir -p ci-logs && gh run view 37224809082 --repo linksplatform/Comparisons.SQLiteVSDoublets --json jobs --jq '.jobs[] | select(.conclusion==\\\"failure\\\") | .databaseId' | while read j; do gh run view --repo linksplatform/Comparisons.SQLiteVSDoublets --job $j --log > ci-logs/benchmarks-$j.log; done; ls -la ci-logs; grep -h -i -B2 -A12 \\\"panicked\\\\|error\\\" ci-logs/benchmarks-*.log | head -60\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 119401, + "text": " \"description\": \"Download failed job logs and find errors\"\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 119435, + "text": " \"command\": \"cd /tmp/gh-issue-solver-1791131286882 && mkdir -p ci-logs && gh run view 37224809082 --repo linksplatform/Comparisons.SQLiteVSDoublets --json jobs --jq '.jobs[] | select(.conclusion==\\\"failure\\\") | .databaseId' | while read j; do gh run view --repo linksplatform/Comparisons.SQLiteVSDoublets --job $j --log > ci-logs/benchmarks-$j.log; done; ls -la ci-logs; grep -h -i -B2 -A12 \\\"panicked\\\\|error\\\" ci-logs/benchmarks-*.log | head -60\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 119436, + "text": " \"description\": \"Download failed job logs and find errors\"\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 119450, + "text": " \"description\": \"Download failed job logs and find errors\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 119463, + "text": " \"summary\": \"Download failed job logs and find errors\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 119645, + "text": " \"command\": \"for j in 111502160295 111502160318; do gh api repos/linksplatform/Comparisons.SQLiteVSDoublets/actions/jobs/$j/logs > ci-logs/benchmarks-$j.log 2>&1; done; wc -l ci-logs/*; grep -h -i -B3 -A12 \\\"panicked\\\\|##\\\\[error\\\\]\\\" ci-logs/benchmarks-111502160295.log | head -50\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 119680, + "text": " \"command\": \"cd /tmp/gh-issue-solver-1791131286882 && for j in 111502160295 111502160318; do gh api repos/linksplatform/Comparisons.SQLiteVSDoublets/actions/jobs/$j/logs > ci-logs/benchmarks-$j.log 2>&1; done; wc -l ci-logs/*; grep -h -i -B3 -A12 \\\"panicked\\\\|##\\\\[error\\\\]\\\" ci-logs/benchmarks-111502160295.log | head -50\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 120167, + "text": " \"text\": \"Exit code 101 means a Rust panic. I'll fetch the raw log:\"\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 120209, + "text": " \"command\": \"url=$(curl -sI -H \\\"Authorization: [REDACTED] $(gh auth token)\\\" https://api.github.com/repos/linksplatform/Comparisons.SQLiteVSDoublets/actions/jobs/111502160295/logs | grep -i '^location' | cut -d' ' -f2 | tr -d '\\\\r'); curl -s \\\"$url\\\" > ci-logs/benchmarks-111502160295.log; wc -l ci-logs/benchmarks-111502160295.log; grep -n -i -A10 \\\"panicked\\\" ci-logs/benchmarks-111502160295.log | head -30\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 120210, + "text": " \"description\": \"Download raw job log and find panic\"\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 120244, + "text": " \"command\": \"cd /tmp/gh-issue-solver-1791131286882 && url=$(curl -sI -H \\\"Authorization: [REDACTED] $(gh auth token)\\\" https://api.github.com/repos/linksplatform/Comparisons.SQLiteVSDoublets/actions/jobs/111502160295/logs | grep -i '^location' | cut -d' ' -f2 | tr -d '\\\\r'); curl -s \\\"$url\\\" > ci-logs/benchmarks-111502160295.log; wc -l ci-logs/benchmarks-111502160295.log; grep -n -i -A10 \\\"panicked\\\" ci-logs/benchmarks-111502160295.log | head -30\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 120245, + "text": " \"description\": \"Download raw job log and find panic\"\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 120262, + "text": " \"content\": \"553 ci-logs/benchmarks-111502160295.log\\n517:2026-10-04T18:33:49.2134804Z thread 'main' (3151) panicked at /home/runner/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/unit/generic/sources_recursionless_size_balanced_tree.rs:231:19:\\n518-2026-10-04T18:33:49.2136098Z index out of bounds: the len is 1040384 but the index is 1040384\\n519-2026-10-04T18:33:49.2136783Z note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace\\n520-202" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 120272, + "text": " \"stdout\": \"553 ci-logs/benchmarks-111502160295.log\\n517:2026-10-04T18:33:49.2134804Z thread 'main' (3151) panicked at /home/runner/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/unit/generic/sources_recursionless_size_balanced_tree.rs:231:19:\\n518-2026-10-04T18:33:49.2136098Z index out of bounds: the len is 1040384 but the index is 1040384\\n519-2026-10-04T18:33:49.2136783Z note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace\\n520-2026-10-" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 120433, + "text": " \"description\": \"Show log lines before panic\"\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 120468, + "text": " \"description\": \"Show log lines before panic\"\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 120485, + "text": " \"content\": \"\\u001b[36;1mname=objects-rust-32-1000000\\u001b[0m\\n\\u001b[36;1mecho \\\"NAME=$name\\\" >> \\\"$GITHUB_ENV\\\"\\u001b[0m\\n\\u001b[36;1m$BENCHMARK objects 32 1000000 \\\\\\u001b[0m\\n\\u001b[36;1m --directory \\\"$RUNNER_TEMP/storage\\\" --output \\\"$RUNNER_TEMP/measured.json\\\"\\u001b[0m\\n\\u001b[36;1mmachine=\\\"$(. /etc/os-release && echo \\\"$PRETTY_NAME\\\"), $(lscpu | sed -n 's/^Model name: *//p' | head -1)\\\"\\u001b[0m\\n\\u001b[36;1mmachine=\\\"$machine, $(nproc) cores, $(awk '/^MemTotal/ { printf \\\"%.0" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 120495, + "text": " \"stdout\": \"\\u001b[36;1mname=objects-rust-32-1000000\\u001b[0m\\n\\u001b[36;1mecho \\\"NAME=$name\\\" >> \\\"$GITHUB_ENV\\\"\\u001b[0m\\n\\u001b[36;1m$BENCHMARK objects 32 1000000 \\\\\\u001b[0m\\n\\u001b[36;1m --directory \\\"$RUNNER_TEMP/storage\\\" --output \\\"$RUNNER_TEMP/measured.json\\\"\\u001b[0m\\n\\u001b[36;1mmachine=\\\"$(. /etc/os-release && echo \\\"$PRETTY_NAME\\\"), $(lscpu | sed -n 's/^Model name: *//p' | head -1)\\\"\\u001b[0m\\n\\u001b[36;1mmachine=\\\"$machine, $(nproc) cores, $(awk '/^MemTotal/ { printf \\\"%.0f\\\", " + }, + { + "path": "research/pr-108-killed-session.log", + "line": 120909, + "text": " \"thinking\": \"Found a real panic in doublets 0.5.0: the united store crashes partway through creating 1M blog posts with an index-out-of-bounds error in `sources_recursionless_size_balanced_tree.rs:231`. I'll check the 64-bit job and try to reproduce it locally with a backtrace.\\n\\n\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 120956, + "text": " \"command\": \"url=$(curl -sI -H \\\"Authorization: [REDACTED] $(gh auth token)\\\" https://api.github.com/repos/linksplatform/Comparisons.SQLiteVSDoublets/actions/jobs/111502160318/logs | grep -i '^location' | cut -d' ' -f2 | tr -d '\\\\r'); curl -s \\\"$url\\\" > ci-logs/benchmarks-111502160318.log; grep -A2 \\\"SQLite_File #1\\\\|panicked\\\" ci-logs/benchmarks-111502160318.log | cut -c 30- | head; sed -n '/pub fn \\\\|^fn /p' ~/.cargo/registry/src/*/doublets-0.5.0/src/mem/unit/generic/sources_recursion" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 120957, + "text": " \"description\": \"Check 64-bit log and library source at panic\"\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 120991, + "text": " \"command\": \"cd /tmp/gh-issue-solver-1791131286882 && url=$(curl -sI -H \\\"Authorization: [REDACTED] $(gh auth token)\\\" https://api.github.com/repos/linksplatform/Comparisons.SQLiteVSDoublets/actions/jobs/111502160318/logs | grep -i '^location' | cut -d' ' -f2 | tr -d '\\\\r'); curl -s \\\"$url\\\" > ci-logs/benchmarks-111502160318.log; grep -A2 \\\"SQLite_File #1\\\\|panicked\\\" ci-logs/benchmarks-111502160318.log | cut -c 30- | head; sed -n '/pub fn \\\\|^fn /p' ~/.cargo/registry/src/*/doublets-0.5.0/s" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 120992, + "text": " \"description\": \"Check 64-bit log and library source at panic\"\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 121009, + "text": " \"content\": \"SQLite_File #1: create 5432 ns/op, read_all 526 ns/op, read_by_id 3348 ns/op, delete 13652 ns/op\\n\\nthread 'main' (2959) panicked at /home/runner/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/unit/generic/sources_recursionless_size_balanced_tree.rs:231:19:\\nindex out of bounds: the len is 1040384 but the index is 1040384\\nnote: run with `RUST_BACKTRACE=1` environment variable to display a backtrace\\n pub fn new(constants: LinksConstants, me" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 121019, + "text": " \"stdout\": \"SQLite_File #1: create 5432 ns/op, read_all 526 ns/op, read_by_id 3348 ns/op, delete 13652 ns/op\\n\\nthread 'main' (2959) panicked at /home/runner/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/unit/generic/sources_recursionless_size_balanced_tree.rs:231:19:\\nindex out of bounds: the len is 1040384 but the index is 1040384\\nnote: run with `RUST_BACKTRACE=1` environment variable to display a backtrace\\n pub fn new(constants: LinksConstants, mem: No" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 121497, + "text": " \"description\": \"Reproduce united objects panic at 1M posts\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 121533, + "text": " \"description\": \"Reproduce united objects panic at 1M posts\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 121548, + "text": " \"description\": \"Reproduce united objects panic at 1M posts\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 121561, + "text": " \"summary\": \"Reproduce united objects panic at 1M posts\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 121573, + "text": " \"content\": \"thread 'main' (111708) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/unit/store.rs:153:55:\\nData part should be in data memory\\nstack backtrace:\\n 0: __rustc::rust_begin_unwind\\n 1: core::panicking::panic_fmt\\n 2: core::option::expect_failed\\n 3: >> as doublets::data::traits::Links>::update_links\\n 4: >> as doublets::data::traits::Links>::update_links\\n 4: (\\n variant: &'static str,\\n n: u64,\\n repetitions: usize,\\n directory: &Path,\\n) -> Measurement {\\n let cached = variant.ends_with(\\\"_Cached\\\");\\n match variant\\n .trim_end_matches(\\\"_Cached\\\")\\n .trim_end_matches(\\\"_Uncached\\\")\\n {\\n \\\"SQLite_Memory\\\" => measure(\\n variant,\\n n,\\n repetitions,\\n directory,\\n |_| SqliteBlogPosts::::in_me" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 121926, + "text": " \"stdout\": \"pub fn measure_objects(\\n variant: &'static str,\\n n: u64,\\n repetitions: usize,\\n directory: &Path,\\n) -> Measurement {\\n let cached = variant.ends_with(\\\"_Cached\\\");\\n match variant\\n .trim_end_matches(\\\"_Cached\\\")\\n .trim_end_matches(\\\"_Uncached\\\")\\n {\\n \\\"SQLite_Memory\\\" => measure(\\n variant,\\n n,\\n repetitions,\\n directory,\\n |_| SqliteBlogPosts::::in_memory(" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 122614, + "text": " \"text\": \"This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.\\n\\nSummary:\\n1. **Primary Request and Intent**\\n - Solve GitHub issue https://github.com/linksplatform/Comparisons.SQLiteVSDoublets/issues/107.\\n - Working directory: /tmp/gh-issue-solver-1791131286882.\\n - Branch: issue-107-bce58c21006b.\\n - Draft PR #108 already exists. Update it with `gh pr edit` and never create a" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 123439, + "text": " \"content\": \"439:pub fn measure_objects(\\n440: variant: &'static str,\\n441: n: u64,\\n442: repetitions: usize,\\n443: directory: &Path,\\n444:) -> Measurement {\\n445: let cached = variant.ends_with(\\\"_Cached\\\");\\n446: match variant\\n447: .trim_end_matches(\\\"_Cached\\\")\\n448: .trim_end_matches(\\\"_Uncached\\\")\\n449: {\\n450: \\\"SQLite_Memory\\\" => measure(\\n451: variant,\\n452: n,\\n453: repetitions,\\n454: " + }, + { + "path": "research/pr-108-killed-session.log", + "line": 123449, + "text": " \"stdout\": \"439:pub fn measure_objects(\\n440: variant: &'static str,\\n441: n: u64,\\n442: repetitions: usize,\\n443: directory: &Path,\\n444:) -> Measurement {\\n445: let cached = variant.ends_with(\\\"_Cached\\\");\\n446: match variant\\n447: .trim_end_matches(\\\"_Cached\\\")\\n448: .trim_end_matches(\\\"_Uncached\\\")\\n449: {\\n450: \\\"SQLite_Memory\\\" => measure(\\n451: variant,\\n452: n,\\n453: repetitions,\\n454: " + }, + { + "path": "research/pr-108-killed-session.log", + "line": 123985, + "text": " \"command\": \"mkdir -p /tmp/repro && for n in 20000 50000 100000 150000 200000 500000; do echo \\\"== $n\\\"; timeout 300 rust/target/release/sqlite-vs-doublets objects 64 $n --repetitions 1 --variants Doublets_United_Volatile_Cached --directory /tmp/repro --output /tmp/repro/out.json 2>&1 | grep -m2 \\\"panicked\\\\|Data\\\\|index\\\" ; echo \\\"exit ${PIPESTATUS[0]}\\\"; done\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 124020, + "text": " \"command\": \"cd /tmp/gh-issue-solver-1791131286882 && mkdir -p /tmp/repro && for n in 20000 50000 100000 150000 200000 500000; do echo \\\"== $n\\\"; timeout 300 rust/target/release/sqlite-vs-doublets objects 64 $n --repetitions 1 --variants Doublets_United_Volatile_Cached --directory /tmp/repro --output /tmp/repro/out.json 2>&1 | grep -m2 \\\"panicked\\\\|Data\\\\|index\\\" ; echo \\\"exit ${PIPESTATUS[0]}\\\"; done\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 124060, + "text": " \"content\": \"== 20000\\nexit 0\\n== 50000\\nexit 0\\n== 100000\\nexit 0\\n== 150000\\nthread 'main' (113804) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/unit/store.rs:153:55:\\nData part should be in data memory\\nexit 101\\n== 200000\\nthread 'main' (113808) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/unit/store.rs:153:55:\\nData part should be in data memory\\nexit 101\\n== 500000\\nthread 'main" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 124070, + "text": " \"stdout\": \"== 20000\\nexit 0\\n== 50000\\nexit 0\\n== 100000\\nexit 0\\n== 150000\\nthread 'main' (113804) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/unit/store.rs:153:55:\\nData part should be in data memory\\nexit 101\\n== 200000\\nthread 'main' (113808) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/unit/store.rs:153:55:\\nData part should be in data memory\\nexit 101\\n== 500000\\nthread 'main' (11" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 124594, + "text": " \"content\": \"Cargo.lock\\nCargo.toml\\nsrc\\ntarget\\n[package]\\nname = \\\"split_store_delete\\\"\\nversion = \\\"0.1.0\\\"\\nedition = \\\"2024\\\"\\npublish = false\\n\\n[dependencies]\\ndoublets = \\\"0.5.0\\\"\\n\\n[workspace]\\n\\n//! Minimal reproductions of a `doublets` 0.5.0 split store bug.\\n//!\\n//! `split::Store::update_links` detaches the link and only then asks `is_virtual(new_source)`,\\n//! which is `is_unused`: `size_as_target == 0 && source != 0`. Right after the detach that is true\\n//! for the link " + }, + { + "path": "research/pr-108-killed-session.log", + "line": 124604, + "text": " \"stdout\": \"Cargo.lock\\nCargo.toml\\nsrc\\ntarget\\n[package]\\nname = \\\"split_store_delete\\\"\\nversion = \\\"0.1.0\\\"\\nedition = \\\"2024\\\"\\npublish = false\\n\\n[dependencies]\\ndoublets = \\\"0.5.0\\\"\\n\\n[workspace]\\n\\n//! Minimal reproductions of a `doublets` 0.5.0 split store bug.\\n//!\\n//! `split::Store::update_links` detaches the link and only then asks `is_virtual(new_source)`,\\n//! which is `is_unused`: `size_as_target == 0 && source != 0`. Right after the detach that is true\\n//! for the link itsel" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 125141, + "text": " \"command\": \"mkdir -p /tmp/gh-issue-solver-1791131286882/experiments/unit_store_growth/src && cd /tmp/gh-issue-solver-1791131286882/experiments/unit_store_growth && cat > Cargo.toml <<'EOF'\\n[package]\\nname = \\\"unit_store_growth\\\"\\nversion = \\\"0.1.0\\\"\\nedition = \\\"2024\\\"\\npublish = false\\n\\n[dependencies]\\ndoublets = \\\"0.5.0\\\"\\nsqlite-vs-doublets = { path = \\\"../../rust\\\" }\\n\\n[workspace]\\nEOF\\ncat > src/main.rs <<'EOF'\\nuse doublets::{Doublets, data::LinksConstants, mem::Global, unit};" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 125176, + "text": " \"command\": \"mkdir -p /tmp/gh-issue-solver-1791131286882/experiments/unit_store_growth/src && cd /tmp/gh-issue-solver-1791131286882/experiments/unit_store_growth && cat > Cargo.toml <<'EOF'\\n[package]\\nname = \\\"unit_store_growth\\\"\\nversion = \\\"0.1.0\\\"\\nedition = \\\"2024\\\"\\npublish = false\\n\\n[dependencies]\\ndoublets = \\\"0.5.0\\\"\\nsqlite-vs-doublets = { path = \\\"../../rust\\\" }\\n\\n[workspace]\\nEOF\\ncat > src/main.rs <<'EOF'\\nuse doublets::{Doublets, data::LinksConstants, mem::Global, unit};\\nus" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 125241, + "text": " \"content\": \"warning: `unit_store_growth` (bin \\\"unit_store_growth\\\") generated 1 warning\\n Finished `release` profile [optimized] target(s) in 1m 49s\\nData part should be in data memory\\nnote: run with `RUST_BACKTRACE=1` environment variable to display a backtrace\\nstopped at post 103399: true\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 125251, + "text": " \"stdout\": \"warning: `unit_store_growth` (bin \\\"unit_store_growth\\\") generated 1 warning\\n Finished `release` profile [optimized] target(s) in 1m 49s\\nData part should be in data memory\\nnote: run with `RUST_BACKTRACE=1` environment variable to display a backtrace\\nstopped at post 103399: true\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 125294, + "text": " \"+use std::panic;\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 125302, + "text": " \"+ let result = panic::catch_unwind(panic::AssertUnwindSafe(|| {\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 125591, + "text": " \"content\": \"ugrep: warning: data/constants.rs: No such file or directory\\nShell cwd was reset to /tmp/gh-issue-solver-1791131286882\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 125601, + "text": " \"stdout\": \"ugrep: warning: data/constants.rs: No such file or directory\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 127108, + "text": " \"content\": \"52: pub unsafe fn handle_fill(\\n53- &mut self,\\n54- (ptr, cap): (NonNull, usize),\\n55- inited: usize,\\n56- fill: impl FnOnce(usize, (&mut [T], &mut [MaybeUninit])),\\n57- ) -> &mut [T] {\\n58- unsafe {\\n59- // fixme: ZST correctness isn't checked now,\\n60- // it forbid growing, but allow `RawPlace::::dangling` and thus `Alloc::::new`'s\\n61- const { assert!(mem::size_of::() != 0) };\\n62-" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 127118, + "text": " \"stdout\": \"52: pub unsafe fn handle_fill(\\n53- &mut self,\\n54- (ptr, cap): (NonNull, usize),\\n55- inited: usize,\\n56- fill: impl FnOnce(usize, (&mut [T], &mut [MaybeUninit])),\\n57- ) -> &mut [T] {\\n58- unsafe {\\n59- // fixme: ZST correctness isn't checked now,\\n60- // it forbid growing, but allow `RawPlace::::dangling` and thus `Alloc::::new`'s\\n61- const { assert!(mem::size_of::() != 0) };\\n62-\\n63-" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 128862, + "text": " \"command\": \"gh api \\\"repos/linksplatform/doublets-rs/contents/doublets/src/mem/mod.rs\\\" -H \\\"Accept: application/vnd.github.raw\\\" | grep -n \\\"resize_mem\\\" -A16; gh api \\\"repos/linksplatform/doublets-rs/issues?state=all&per_page=100\\\" --jq '.[] | \\\"\\\\(.number) \\\\(.state) \\\\(.title)\\\"' | grep -i \\\"grow\\\\|mem\\\\|resize\\\\|out of bounds\\\\|panic\\\" | head\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 128897, + "text": " \"command\": \"gh api \\\"repos/linksplatform/doublets-rs/contents/doublets/src/mem/mod.rs\\\" -H \\\"Accept: application/vnd.github.raw\\\" | grep -n \\\"resize_mem\\\" -A16; gh api \\\"repos/linksplatform/doublets-rs/issues?state=all&per_page=100\\\" --jq '.[] | \\\"\\\\(.number) \\\\(.state) \\\\(.title)\\\"' | grep -i \\\"grow\\\\|mem\\\\|resize\\\\|out of bounds\\\\|panic\\\" | head\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 129528, + "text": " \"content\": \"//! Runs every storage through the same lifecycle on a fresh store per repetition:\\n//! a timed batch per operation, each validated against the expected count and checksum.\\n\\nuse crate::{\\n dataset::{self, blog_post, link, mix, scattered},\\n links::{DoubletsLinks, Link, LinksStorage, SqliteLinks},\\n objects::{BlogPostsStorage, DoubletsBlogPosts, SqliteBlogPosts},\\n};\\nuse doublets::{\\n data::{LinkReference, LinksConstants},\\n mem::{FileMapped, Global},\\n sp" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 129538, + "text": " \"stdout\": \"//! Runs every storage through the same lifecycle on a fresh store per repetition:\\n//! a timed batch per operation, each validated against the expected count and checksum.\\n\\nuse crate::{\\n dataset::{self, blog_post, link, mix, scattered},\\n links::{DoubletsLinks, Link, LinksStorage, SqliteLinks},\\n objects::{BlogPostsStorage, DoubletsBlogPosts, SqliteBlogPosts},\\n};\\nuse doublets::{\\n data::{LinkReference, LinksConstants},\\n mem::{FileMapped, Global},\\n split, " + }, + { + "path": "research/pr-108-killed-session.log", + "line": 132240, + "text": " \"content\": \" Finished `test` profile [unoptimized + debuginfo] target(s) in 15.79s\\n Running tests/storages.rs (target/debug/deps/storages-e2b2affc16894bcc)\\n\\nrunning 2 tests\\n\\nthread 'doublets_lose_the_memory_they_grow' (123499) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/unit/store.rs:149:55:\\nunsafe precondition(s) violated: hint::unreachable_unchecked must never be reached\\n\\nThis indicates a bug in the program. This Unde" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 132250, + "text": " \"stdout\": \" Finished `test` profile [unoptimized + debuginfo] target(s) in 15.79s\\n Running tests/storages.rs (target/debug/deps/storages-e2b2affc16894bcc)\\n\\nrunning 2 tests\\n\\nthread 'doublets_lose_the_memory_they_grow' (123499) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/unit/store.rs:149:55:\\nunsafe precondition(s) violated: hint::unreachable_unchecked must never be reached\\n\\nThis indicates a bug in the program. This Undefined" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 132894, + "text": " \"content\": \"test memory::tests::grow_returns_the_whole_memory ... ok\\ntest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\ntest stores_keep_their_links_when_their_memory_grows ... ok\\ntest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 7 filtered out; finished in 29.39s\\n\\nreal\\t0m32.023s\\nuser\\t0m31.650s\\nsys\\t0m3.183s\\n[This command modified 1" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 132904, + "text": " \"stdout\": \"test memory::tests::grow_returns_the_whole_memory ... ok\\ntest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\ntest stores_keep_their_links_when_their_memory_grows ... ok\\ntest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 7 filtered out; finished in 29.39s\\n\\nreal\\t0m32.023s\\nuser\\t0m31.650s\\nsys\\t0m3.183s\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 134105, + "text": " \"command\": \"cd /tmp/gh-issue-solver-1791131286882/experiments/unit_store_growth && cat > src/main.rs <<'EOF'\\n//! Minimal reproduction of a `doublets` 0.5.0 and `platform-mem` 0.3.0 mismatch.\\n//!\\n//! `doublets::mem::resize_mem` returns what `RawMem::grow_filled` returns, and the stores use it as\\n//! their whole memory. `platform-mem` returns only the grown part. `Store::init` grows the memory\\n//! from 8,192 to 2^20 links, so a fresh store sees 1,040,384 links, while its header says" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 134140, + "text": " \"command\": \"cd /tmp/gh-issue-solver-1791131286882/experiments/unit_store_growth && cat > src/main.rs <<'EOF'\\n//! Minimal reproduction of a `doublets` 0.5.0 and `platform-mem` 0.3.0 mismatch.\\n//!\\n//! `doublets::mem::resize_mem` returns what `RawMem::grow_filled` returns, and the stores use it as\\n//! their whole memory. `platform-mem` returns only the grown part. `Store::init` grows the memory\\n//! from 8,192 to 2^20 links, so a fresh store sees 1,040,384 links, while its header says tha" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 134175, + "text": " \"content\": \"thread 'main' (125681) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/unit/store.rs:153:55:\\nData part should be in data memory\\nnote: run with `RUST_BACKTRACE=1` environment variable to display a backtrace\\nErr(Any { .. })\\ncreating link 1800000\\ncreating link 1900000\\ncreating link 2000000\\nOk(Ok(2097153))\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 134185, + "text": " \"stdout\": \"thread 'main' (125681) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/unit/store.rs:153:55:\\nData part should be in data memory\\nnote: run with `RUST_BACKTRACE=1` environment variable to display a backtrace\\nErr(Any { .. })\\ncreating link 1800000\\ncreating link 1900000\\ncreating link 2000000\\nOk(Ok(2097153))\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 134203, + "text": " \"-use std::panic;\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 134216, + "text": " \"+use std::{env, panic};\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 134224, + "text": " \"- let result = panic::catch_unwind(panic::AssertUnwindSafe(|| {\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 134244, + "text": " \"+ let result = panic::catch_unwind(|| match env::args().nth(1).as_deref() {\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 134247, + "text": " \"+ _ => panic!(\\\"usage: unit_store_growth \\\"),\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 134470, + "text": " \"content\": \"Exit code 128\\ncreating link 1040380\\ncreating link 1040381\\ncreating link 1040382\\ncreating link 1040383\\ncreating link 1040384\\n\\nthread 'main' (125974) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/unit/store.rs:153:55:\\nData part should be in data memory\\nnote: run with `RUST_BACKTRACE=1` environment variable to display a backtrace\\nErr(Any { .. })\\n# Root level gitignore for the repository\\n# C# specific gitignore is in" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 134480, + "text": " \"tool_use_result\": \"Error: Exit code 128\\ncreating link 1040380\\ncreating link 1040381\\ncreating link 1040382\\ncreating link 1040383\\ncreating link 1040384\\n\\nthread 'main' (125974) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/unit/store.rs:153:55:\\nData part should be in data memory\\nnote: run with `RUST_BACKTRACE=1` environment variable to display a backtrace\\nErr(Any { .. })\\n# Root level gitignore for the repository\\n# C# specific gitign" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 134489, + "text": "thread 'main' (125974) panicked at /home/box/.cargo/registry/src/index.crat\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 135405, + "text": " \"content\": \" Checking sqlite-vs-doublets v0.2.0 (/tmp/gh-issue-solver-1791131286882/rust)\\n Finished `release` profile [optimized] target(s) in 1.84s\\ntest memory::tests::grow_returns_the_whole_memory ... ok\\ntest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\ntest links_are_unique_and_reference_created_ids ... ok\\ntest scattered_visits_every_id_" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 135415, + "text": " \"stdout\": \" Checking sqlite-vs-doublets v0.2.0 (/tmp/gh-issue-solver-1791131286882/rust)\\n Finished `release` profile [optimized] target(s) in 1.84s\\ntest memory::tests::grow_returns_the_whole_memory ... ok\\ntest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\ntest links_are_unique_and_reference_created_ids ... ok\\ntest scattered_visits_every_id_once " + }, + { + "path": "research/pr-108-killed-session.log", + "line": 136200, + "text": " \"command\": \"mkdir -p ci-logs && for j in 111502160163 111502160340; do url=$(curl -sI -H \\\"Authorization: [REDACTED] $(gh auth token)\\\" https://api.github.com/repos/linksplatform/Comparisons.SQLiteVSDoublets/actions/jobs/$j/logs | grep -i '^location:' | cut -d' ' -f2 | tr -d '\\\\r'); curl -s \\\"$url\\\" > ci-logs/benchmarks-rust-links-10M-$j.log; grep -E \\\"#1:|panicked|Data part|index out\\\" ci-logs/benchmarks-rust-links-10M-$j.log | head -6; done\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 136235, + "text": " \"command\": \"cd /tmp/gh-issue-solver-1791131286882 && mkdir -p ci-logs && for j in 111502160163 111502160340; do url=$(curl -sI -H \\\"Authorization: [REDACTED] $(gh auth token)\\\" https://api.github.com/repos/linksplatform/Comparisons.SQLiteVSDoublets/actions/jobs/$j/logs | grep -i '^location:' | cut -d' ' -f2 | tr -d '\\\\r'); curl -s \\\"$url\\\" > ci-logs/benchmarks-rust-links-10M-$j.log; grep -E \\\"#1:|panicked|Data part|index out\\\" ci-logs/benchmarks-rust-links-10M-$j.log | head -6; done\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 136275, + "text": " \"content\": \"2026-10-04T18:37:38.4103813Z SQLite_Memory #1: create 3661 ns/op, query_all 123 ns/op, query_by_id 1561 ns/op, query_by_from_to 1604 ns/op, query_by_from 1658 ns/op, query_by_to 1629 ns/op, update 9040 ns/op, delete 5955 ns/op\\n2026-10-04T18:47:15.1154762Z SQLite_File #1: create 9298 ns/op, query_all 127 ns/op, query_by_id 2292 ns/op, query_by_from_to 2603 ns/op, query_by_from 2565 ns/op, query_by_to 2556 ns/op, update 23826 ns/op, delete 14254 ns/op\\n2026-10-04T18:47:16.0853" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 136285, + "text": " \"stdout\": \"2026-10-04T18:37:38.4103813Z SQLite_Memory #1: create 3661 ns/op, query_all 123 ns/op, query_by_id 1561 ns/op, query_by_from_to 1604 ns/op, query_by_from 1658 ns/op, query_by_to 1629 ns/op, update 9040 ns/op, delete 5955 ns/op\\n2026-10-04T18:47:15.1154762Z SQLite_File #1: create 9298 ns/op, query_all 127 ns/op, query_by_id 2292 ns/op, query_by_from_to 2603 ns/op, query_by_from 2565 ns/op, query_by_to 2556 ns/op, update 23826 ns/op, delete 14254 ns/op\\n2026-10-04T18:47:16.0853150Z " + }, + { + "path": "research/pr-108-killed-session.log", + "line": 136796, + "text": " \"command\": \"gh run cancel 37224809082 --repo linksplatform/Comparisons.SQLiteVSDoublets && git add rust/src/memory.rs rust/src/lib.rs rust/src/harness.rs rust/tests/storages.rs README.md README.ru.md experiments/unit_store_growth/Cargo.toml experiments/unit_store_growth/Cargo.lock experiments/unit_store_growth/src && git status --short && git commit -q -m \\\"Rust: keep the whole memory after doublets grow it\\n\\ndoublets 0.5.0 takes the slice returned by RawMem::grow for the whole\\nmemor" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 136831, + "text": " \"command\": \"cd /tmp/gh-issue-solver-1791131286882 && gh run cancel 37224809082 --repo linksplatform/Comparisons.SQLiteVSDoublets && git add rust/src/memory.rs rust/src/lib.rs rust/src/harness.rs rust/tests/storages.rs README.md README.ru.md experiments/unit_store_growth/Cargo.toml experiments/unit_store_growth/Cargo.lock experiments/unit_store_growth/src && git status --short && git commit -q -m \\\"Rust: keep the whole memory after doublets grow it\\n\\ndoublets 0.5.0 takes the slice returned" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 140437, + "text": "[log_691881, anthropic-workspace-id: \"wrkspc_0117gBnPr68DBsCrmom3Bxq6\", request-id: \"req_011CfhiXjpMNzuPJF6eNQzER\"] post https://api.anthropic.com/v1/messages?beta=true failed with status 404 in 252ms - error; not retryable\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 141490, + "text": " \"text\": \"This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.\\n\\nSummary:\\n1. **Primary Request and Intent**\\n - Solve GitHub issue https://github.com/linksplatform/Comparisons.SQLiteVSDoublets/issues/107.\\n - Working directory: /tmp/gh-issue-solver-1791131286882.\\n - Branch: issue-107-bce58c21006b.\\n - PR #108 already exists. Update it with `gh pr edit` and never create a new P" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 142294, + "text": "[log_c9f59a, anthropic-workspace-id: \"wrkspc_0117gBnPr68DBsCrmom3Bxq6\", request-id: \"req_011CfhjMdmp3sghDo5JxrgNv\"] post https://api.anthropic.com/v1/messages?beta=true failed with status 404 in 248ms - error; not retryable\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 148171, + "text": "[log_8c977f, anthropic-workspace-id: \"wrkspc_0117gBnPr68DBsCrmom3Bxq6\", request-id: \"req_011CfhkbGTAcKDc3D4eCtUHv\"] post https://api.anthropic.com/v1/messages?beta=true failed with status 404 in 236ms - error; not retryable\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 150255, + "text": " \"content\": \"rust=0\\nrunning 1 test\\ntest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\nrunning 0 tests\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\nrunning 8 tests\\ntest result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 10.62s\\nrunning 0 tests\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\nRan 15 tests in 3.816s\\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 150265, + "text": " \"stdout\": \"rust=0\\nrunning 1 test\\ntest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\nrunning 0 tests\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\nrunning 8 tests\\ntest result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 10.62s\\nrunning 0 tests\\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\\nRan 15 tests in 3.816s\\n\\nOK\"" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 150748, + "text": " \"content\": \" total: 28\\n failed: 0\\n succeeded: 28\\n skipped: 0\\n duration: 23s 464ms\\n15: run:\\n29: - uses: actions/setup-dotnet@v6\\n32: - run: dotnet build -c Release -warnaserror\\n33: - run: dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 150758, + "text": " \"stdout\": \" total: 28\\n failed: 0\\n succeeded: 28\\n skipped: 0\\n duration: 23s 464ms\\n15: run:\\n29: - uses: actions/setup-dotnet@v6\\n32: - run: dotnet build -c Release -warnaserror\\n33: - run: dotnet test --project SQLiteVSDoublets.Tests -c Release --no-build\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 151936, + "text": " \"text\": \"Failed to authenticate: OAuth session expired and could not be refreshed\"\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 152020, + "text": " \"failed\": 0,\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 152037, + "text": " \"result\": \"Failed to authenticate: OAuth session expired and could not be refreshed\",\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 152053, + "text": "\u274c Claude command failed with exit code 1\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 152093, + "text": " Provider said: Failed to authenticate: OAuth session expired and could not be refreshed\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 152128, + "text": "{\"url\":\"https://api.github.com/repos/linksplatform/Comparisons.SQLiteVSDoublets/issues/comments/5983704071\",\"html_url\":\"https://github.com/linksplatform/Comparisons.SQLiteVSDoublets/pull/108#issuecomment-5983704071\",\"issue_url\":\"https://api.github.com/repos/linksplatform/Comparisons.SQLiteVSDoublets/issues/108\",\"id\":5983704071,\"node_id\":\"IC_kwDOC-mODs8AAAABZKgUBw\",\"user\":{\"login\":\"konard\",\"id\":1431904,\"node_id\":\"MDQ6VXNlcjE0MzE5MDQ=\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/1431904?" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 152144, + "text": "\ud83e\ude79 PR #108 was left in draft by a working session (CLAUDE execution failed with Failed to authenticate: OAuth session expired and could not be refreshed); restoring its pre-run state at run end (\u26a0\ufe0f SUBSCRIPTION/ACCESS UNAVAILABLE \u2014 CLAUDE stopped: Authentication expired \u2014 re-login required [authentication_failed] \u2014 Failed to authenticate: OAuth session expired and could not be refreshed)\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 152147, + "text": " \ud83d\udcdd Converting PR: To ready for review (run end (\u26a0\ufe0f SUBSCRIPTION/ACCESS UNAVAILABLE \u2014 CLAUDE stopped: Authentication expired \u2014 re-login required [authentication_failed] \u2014 Failed to authenticate: OAuth session expired and could not be refreshed))...\n" + }, + { + "path": "research/pr-108-killed-session.log", + "line": 152152, + "text": "\u274c \u26a0\ufe0f SUBSCRIPTION/ACCESS UNAVAILABLE \u2014 CLAUDE stopped: Authentication expired \u2014 re-login required [authentication_failed] \u2014 Failed to authenticate: OAuth session expired and could not be refreshed\n" + }, + { + "path": "validation/actionlint-before.log", + "line": 22, + "text": "\u001b[33m.github/workflows/benchmarks.yml\u001b[0m\u001b[90m:\u001b[0m124\u001b[90m:\u001b[0m9\u001b[90m: \u001b[0m\u001b[1mshellcheck reported issue in this script: SC2034:warning:8:1: attempt appears unused. Verify use (or export if used externally)\u001b[0m\u001b[90m [shellcheck]\n" + }, + { + "path": "validation/actionlint-before.log", + "line": 26, + "text": "\u001b[33m.github/workflows/cpp.yml\u001b[0m\u001b[90m:\u001b[0m49\u001b[90m:\u001b[0m9\u001b[90m: \u001b[0m\u001b[1mshellcheck reported issue in this script: SC2034:warning:1:1: CXX appears unused. Verify use (or export if used externally)\u001b[0m\u001b[90m [shellcheck]\n" + }, + { + "path": "validation/actionlint-before.log", + "line": 30, + "text": "\u001b[33m.github/workflows/cpp.yml\u001b[0m\u001b[90m:\u001b[0m66\u001b[90m:\u001b[0m7\u001b[90m: \u001b[0m\u001b[1mshellcheck reported issue in this script: SC2155:warning:1:8: Declare and assign separately to avoid masking return values\u001b[0m\u001b[90m [shellcheck]\n" + }, + { + "path": "validation/actionlint-before.log", + "line": 34, + "text": "\u001b[33m.github/workflows/cpp.yml\u001b[0m\u001b[90m:\u001b[0m71\u001b[90m:\u001b[0m7\u001b[90m: \u001b[0m\u001b[1mshellcheck reported issue in this script: SC2155:warning:1:8: Declare and assign separately to avoid masking return values\u001b[0m\u001b[90m [shellcheck]\n" + }, + { + "path": "validation/actionlint-before.log", + "line": 38, + "text": "\u001b[33m.github/workflows/cpp.yml\u001b[0m\u001b[90m:\u001b[0m83\u001b[90m:\u001b[0m9\u001b[90m: \u001b[0m\u001b[1mshellcheck reported issue in this script: SC2155:warning:1:8: Declare and assign separately to avoid masking return values\u001b[0m\u001b[90m [shellcheck]\n" + }, + { + "path": "validation/actionlint-before.log", + "line": 42, + "text": "\u001b[33m.github/workflows/cpp.yml\u001b[0m\u001b[90m:\u001b[0m88\u001b[90m:\u001b[0m9\u001b[90m: \u001b[0m\u001b[1mshellcheck reported issue in this script: SC2155:warning:1:8: Declare and assign separately to avoid masking return values\u001b[0m\u001b[90m [shellcheck]\n" + }, + { + "path": "validation/artifact-reproduction.log", + "line": 6, + "text": "ImportError: Failed to import test module: test_benchmark_ci\n" + }, + { + "path": "validation/artifact-reproduction.log", + "line": 21, + "text": "FAILED (errors=1)\n" + }, + { + "path": "validation/bandit-comment-draft.log", + "line": 87, + "text": "[tester]\tWARNING\tnosec encountered (B603), but no failed test on file experiments/ci/run_smoke.py:19\n" + }, + { + "path": "validation/bandit-comment-draft.log", + "line": 144, + "text": "[tester]\tWARNING\tnosec encountered (B603), but no failed test on file scripts/check_pipeline_status.py:38\n" + }, + { + "path": "validation/bandit-nosec-reproduction.log", + "line": 3, + "text": "[tester]\tWARNING\tnosec encountered (B603), but no failed test on file /tmp/bandit-nosec-olk0s048/nested.py:2\n" + }, + { + "path": "validation/bandit-passing-python313.log", + "line": 5, + "text": "[tester]\tWARNING\tnosec encountered (B603), but no failed test on file experiments/ci/run_smoke.py:19\n" + }, + { + "path": "validation/bandit-passing-python313.log", + "line": 6, + "text": "[tester]\tWARNING\tnosec encountered (B603), but no failed test on file scripts/check_pipeline_status.py:39\n" + }, + { + "path": "validation/bandit-passing-python314.log", + "line": 1, + "text": "[tester]\tWARNING\tnosec encountered (B603), but no failed test on file experiments/ci/run_smoke.py:19\n" + }, + { + "path": "validation/bandit-passing-python314.log", + "line": 2, + "text": "[tester]\tWARNING\tnosec encountered (B603), but no failed test on file scripts/check_pipeline_status.py:39\n" + }, + { + "path": "validation/csharp-tests-before.log", + "line": 48, + "text": " failed: 0\n" + }, + { + "path": "validation/csharp-tests-final.log", + "line": 40, + "text": " failed: 0\n" + }, + { + "path": "validation/csharp-timeout-from-project.log", + "line": 58, + "text": " failed: 0\n" + }, + { + "path": "validation/csharp-timeout.log", + "line": 1, + "text": "MSBUILD : error MSB1001: Unknown switch.\n" + }, + { + "path": "validation/packaging-unextracted-reproduction.log", + "line": 20, + "text": "FAILED (failures=1)\n" + }, + { + "path": "validation/publish-reproduction.log", + "line": 6, + "text": "ImportError: Failed to import test module: test_publish_benchmarks\n" + }, + { + "path": "validation/publish-reproduction.log", + "line": 21, + "text": "FAILED (errors=1)\n" + }, + { + "path": "validation/python313-final.log", + "line": 4, + "text": "[tester]\tWARNING\tnosec encountered (B603), but no failed test on file experiments/ci/run_smoke.py:19\n" + }, + { + "path": "validation/python313-final.log", + "line": 5, + "text": "[tester]\tWARNING\tnosec encountered (B603), but no failed test on file scripts/check_pipeline_status.py:39\n" + }, + { + "path": "validation/python313-install.log", + "line": 13504, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/kQtpzswHp8m1pLOR/mdurl-0.1.2.dist-info/RECORD` to `/tmp/issue-110-python313/lib/python3.13/site-packages/mdurl-0.1.2.dist-info/RECORD`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13505, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/UKXArstS5kcgtAM5/packageurl_python-0.17.6.dist-info/RECORD` to `/tmp/issue-110-python313/lib/python3.13/site-packages/packageurl_python-0.17.6.dist-info/RECORD`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13506, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/AJ7D-o3bqZK-ytZx/cyclonedx_python_lib-11.12.0.dist-info/RECORD` to `/tmp/issue-110-python313/lib/python3.13/site-packages/cyclonedx_python_lib-11.12.0.dist-info/RECORD`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13507, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/au9-Uz1PQSKAt_c5/license_expression-30.4.4.dist-info/RECORD` to `/tmp/issue-110-python313/lib/python3.13/site-packages/license_expression-30.4.4.dist-info/RECORD`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13508, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/gtV9wUHMoXwTCpTG/yaml-stubs/reader.pyi` to `/tmp/issue-110-python313/lib/python3.13/site-packages/yaml-stubs/reader.pyi`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13509, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/EtE3rz7u2BJxu7sh/charset_normalizer/cd.py` to `/tmp/issue-110-python313/lib/python3.13/site-packages/charset_normalizer/cd.py`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13510, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/2CG5GD2A5VOyU61U/certifi-2026.7.22.dist-info/RECORD` to `/tmp/issue-110-python313/lib/python3.13/site-packages/certifi-2026.7.22.dist-info/RECORD`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13511, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/AzXcTbfNDIuTE0F_/packaging_legacy_version.py` to `/tmp/issue-110-python313/lib/python3.13/site-packages/packaging_legacy_version.py`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13512, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/ALhTSxfEq9EOw6AC/mypy_extensions-1.1.0.dist-info/RECORD` to `/tmp/issue-110-python313/lib/python3.13/site-packages/mypy_extensions-1.1.0.dist-info/RECORD`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13513, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/VFfFriy-b50Igr_z/idna/py.typed` to `/tmp/issue-110-python313/lib/python3.13/site-packages/idna/py.typed`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13514, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/V3465a8I0Km38DQb/sortedcontainers/sortedset.py` to `/tmp/issue-110-python313/lib/python3.13/site-packages/sortedcontainers/sortedset.py`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13515, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/Flp0wTcRD6hf-nmN/defusedxml-0.7.1.dist-info/RECORD` to `/tmp/issue-110-python313/lib/python3.13/site-packages/defusedxml-0.7.1.dist-info/RECORD`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13516, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/3-R7Hj2AmAe34LVX/py_serializable-2.1.0.dist-info/RECORD` to `/tmp/issue-110-python313/lib/python3.13/site-packages/py_serializable-2.1.0.dist-info/RECORD`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13517, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/IW3tY_0CF44PLqrW/pip_api-0.0.35.dist-info/RECORD` to `/tmp/issue-110-python313/lib/python3.13/site-packages/pip_api-0.0.35.dist-info/RECORD`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13518, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/YF-epBuk2WJHBjK3/tomli_w/py.typed` to `/tmp/issue-110-python313/lib/python3.13/site-packages/tomli_w/py.typed`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13519, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/rYzn0aGAUjMSU4sR/cycler/py.typed` to `/tmp/issue-110-python313/lib/python3.13/site-packages/cycler/py.typed`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13520, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/jRf7lmV4RFNsnRRZ/boolean_py-5.0.dist-info/RECORD` to `/tmp/issue-110-python313/lib/python3.13/site-packages/boolean_py-5.0.dist-info/RECORD`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13521, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/o9l0tXAZQvMaY9ZV/pyparsing/helpers.py` to `/tmp/issue-110-python313/lib/python3.13/site-packages/pyparsing/helpers.py`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13522, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/wjsbGPOIW7Es_zx5/cachecontrol-0.14.4.dist-info/RECORD` to `/tmp/issue-110-python313/lib/python3.13/site-packages/cachecontrol-0.14.4.dist-info/RECORD`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13523, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/mMq768vTvDwuuwKj/typing_extensions.py` to `/tmp/issue-110-python313/lib/python3.13/site-packages/typing_extensions.py`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13524, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/QK4_kZX5fo4b_tAS/pip_audit-2.10.1.dist-info/RECORD` to `/tmp/issue-110-python313/lib/python3.13/site-packages/pip_audit-2.10.1.dist-info/RECORD`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13525, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/ZeRMSRur3qGeUkZ9/rich-15.0.0.dist-info/RECORD` to `/tmp/issue-110-python313/lib/python3.13/site-packages/rich-15.0.0.dist-info/RECORD`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13526, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/5za6MJQus9bD4j8p/six-1.17.0.dist-info/RECORD` to `/tmp/issue-110-python313/lib/python3.13/site-packages/six-1.17.0.dist-info/RECORD`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13527, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/WKCTFeX9gRaRZzfu/requests/py.typed` to `/tmp/issue-110-python313/lib/python3.13/site-packages/requests/py.typed`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13528, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/q155Jr-RqD4P16hx/packaging-26.3.dist-info/RECORD` to `/tmp/issue-110-python313/lib/python3.13/site-packages/packaging-26.3.dist-info/RECORD`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13529, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/7-e18lqO_GmWMoC4/contourpy-1.4.0.dist-info/RECORD` to `/tmp/issue-110-python313/lib/python3.13/site-packages/contourpy-1.4.0.dist-info/RECORD`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13530, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/3_ezLudhBZOJ20Ap/msgpack/ext.py` to `/tmp/issue-110-python313/lib/python3.13/site-packages/msgpack/ext.py`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13531, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/4WYEyjn2UNc0d4z1/librt/threading.pyi` to `/tmp/issue-110-python313/lib/python3.13/site-packages/librt/threading.pyi`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13532, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/4gV_YcL9tMBRISmJ/platformdirs-4.12.3.dist-info/RECORD` to `/tmp/issue-110-python313/lib/python3.13/site-packages/platformdirs-4.12.3.dist-info/RECORD`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13533, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/-zvfyM4fNw3iZKQh/fontTools/otlLib/builder.py` to `/tmp/issue-110-python313/lib/python3.13/site-packages/fontTools/otlLib/builder.py`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13534, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/N42ceQLjPeEGmVCJ/ast_serialize/py.typed` to `/tmp/issue-110-python313/lib/python3.13/site-packages/ast_serialize/py.typed`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13535, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/nYGkKZGV1vjIlyyj/pyyaml-6.0.3.dist-info/RECORD` to `/tmp/issue-110-python313/lib/python3.13/site-packages/pyyaml-6.0.3.dist-info/RECORD`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13536, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/e2wqipXoKDuq-GOq/stevedore-5.9.1.dist-info/RECORD` to `/tmp/issue-110-python313/lib/python3.13/site-packages/stevedore-5.9.1.dist-info/RECORD`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13537, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/5yQp-IB1VTOGRuFM/matplotlib/_cm_listed.py` to `/tmp/issue-110-python313/lib/python3.13/site-packages/matplotlib/_cm_listed.py`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13538, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/InPpxCThVvXpIPDC/bandit/core/test_properties.py` to `/tmp/issue-110-python313/lib/python3.13/site-packages/bandit/core/test_properties.py`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13539, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/-ZWm5gP9EPSM7DLe/pygments-2.21.0.dist-info/RECORD` to `/tmp/issue-110-python313/lib/python3.13/site-packages/pygments-2.21.0.dist-info/RECORD`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13540, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/NqfnhImqRy6I3EG_/kiwisolver/py.typed` to `/tmp/issue-110-python313/lib/python3.13/site-packages/kiwisolver/py.typed`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13541, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/_532iPzRQY8v99_w/filelock-4.0.11.dist-info/RECORD` to `/tmp/issue-110-python313/lib/python3.13/site-packages/filelock-4.0.11.dist-info/RECORD`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13542, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/9liJ0iR9fQ4ZchuN/pip/py.typed` to `/tmp/issue-110-python313/lib/python3.13/site-packages/pip/py.typed`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13543, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/oYsXF8eBaji7cSz3/markdown_it_py-4.2.0.dist-info/RECORD` to `/tmp/issue-110-python313/lib/python3.13/site-packages/markdown_it_py-4.2.0.dist-info/RECORD`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13544, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/WLUq0dla38At8BqD/955cd85d9c9a4f4b30d3__mypyc.cpython-313-x86_64-linux-gnu.so` to `/tmp/issue-110-python313/lib/python3.13/site-packages/955cd85d9c9a4f4b30d3__mypyc.cpython-313-x86_64-linux-gnu.so`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13545, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/e6nc6PTtgoLONII8/pillow-12.3.0.dist-info/RECORD` to `/tmp/issue-110-python313/lib/python3.13/site-packages/pillow-12.3.0.dist-info/RECORD`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13546, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/xcHK1BqrrH06jjYI/zizmor-1.30.1.data/scripts/zizmor` to `/tmp/issue-110-python313/lib/python3.13/site-packages/zizmor-1.30.1.data/scripts/zizmor`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13547, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/zszGIgJvsrivuMFH/pathspec-1.1.1.dist-info/RECORD` to `/tmp/issue-110-python313/lib/python3.13/site-packages/pathspec-1.1.1.dist-info/RECORD`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13548, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/ESI5XdjBqjexChj6/urllib3/poolmanager.py` to `/tmp/issue-110-python313/lib/python3.13/site-packages/urllib3/poolmanager.py`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13549, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/7s4JAzwJ_EuKB2IK/python_dateutil-2.9.0.post0.dist-info/RECORD` to `/tmp/issue-110-python313/lib/python3.13/site-packages/python_dateutil-2.9.0.post0.dist-info/RECORD`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13550, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/1gdCEkML4etYdqu_/numpy/_configtool.pyi` to `/tmp/issue-110-python313/lib/python3.13/site-packages/numpy/_configtool.pyi`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13551, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/9-I5oX8bYmD3CGDb/mypyc/subtype.py` to `/tmp/issue-110-python313/lib/python3.13/site-packages/mypyc/subtype.py`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/python313-install.log", + "line": 13552, + "text": "DEBUG Failed to reflink `/home/box/.cache/uv/archive-v0/J-i07gs9kR-jr_px/ruff-0.16.10.data/scripts/ruff` to `/tmp/issue-110-python313/lib/python3.13/site-packages/ruff-0.16.10.data/scripts/ruff`: Operation not supported (os error 95), falling back\n" + }, + { + "path": "validation/report-reproduction.log", + "line": 73, + "text": "FAILED (failures=5, skipped=1)\n" + }, + { + "path": "validation/rust-tests-before.log", + "line": 42, + "text": "test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "validation/rust-tests-before.log", + "line": 48, + "text": "test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "validation/rust-tests-before.log", + "line": 54, + "text": "test lifecycle_rejects_a_storage_that_loses_records - should panic ... ok\n" + }, + { + "path": "validation/rust-tests-before.log", + "line": 62, + "text": "test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 26.76s\n" + }, + { + "path": "validation/rust-tests-before.log", + "line": 68, + "text": "test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n" + }, + { + "path": "validation/unit-store-bare.log", + "line": 17, + "text": "thread 'main' (22107) panicked at /home/box/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/doublets-0.5.0/src/mem/unit/store.rs:153:55:\n" + }, + { + "path": "validation/variant-reproduction.log", + "line": 23, + "text": "FAILED (failures=1)\n" + }, + { + "path": "validation/yaml-policy-reproduction.log", + "line": 16, + "text": "AssertionError: Lists differ: ['test: continue-on-error hides failed checks'] != []\n" + }, + { + "path": "validation/yaml-policy-reproduction.log", + "line": 20, + "text": "'test: continue-on-error hides failed checks'\n" + }, + { + "path": "validation/yaml-policy-reproduction.log", + "line": 22, + "text": "- ['test: continue-on-error hides failed checks']\n" + }, + { + "path": "validation/yaml-policy-reproduction.log", + "line": 28, + "text": "FAILED (failures=1)\n" + }, + { + "path": "validation/yaml-policy-reproduction.log", + "line": 54, + "text": "FAILED (failures=1)\n" + } +] diff --git a/dev/log/issues/110/pulls/111/manifest.json b/dev/log/issues/110/pulls/111/manifest.json new file mode 100644 index 0000000..0f586ee --- /dev/null +++ b/dev/log/issues/110/pulls/111/manifest.json @@ -0,0 +1,3467 @@ +[ + { + "path": "ANALYSIS.md", + "bytes": 38391, + "sha256": "f9b1245ec81e337671a76d33c6eb3f11d430636707a703e8aea42d68a3b73df6" + }, + { + "path": "PLAN.md", + "bytes": 2815, + "sha256": "593799d01883e719e025f14a78a2792f5f3a8ce669987b4772f59b99e8346096" + }, + { + "path": "README.md", + "bytes": 1607, + "sha256": "241e85d19de17c6a45468ef64161fa43d6d82d2ffe6fd9e7d3d507198123d38d" + }, + { + "path": "SOLUTION_PLANS.md", + "bytes": 7595, + "sha256": "c21b18188d099e6ae55189029c7605b8473c8afc73e4c321acf681f7f244d650" + }, + { + "path": "ci-logs/37216883117-jobs.json", + "bytes": 2049, + "sha256": "4a03f2ed566d96a28db698bc6abf14d837c0dcf746e4c2cef04174e0e88b1704" + }, + { + "path": "ci-logs/37216883117.json", + "bytes": 14713, + "sha256": "7b233e74a24693939c23ab0443d51385d5d9c9eb64a66da3e26479cac6308a88" + }, + { + "path": "ci-logs/37216883117.log", + "bytes": 36639, + "sha256": "773b257b93c6a4d3ced4fd5b0a1292f34456f39e15be1a945b552f95c91a8dd6" + }, + { + "path": "ci-logs/37222260811-jobs.json", + "bytes": 2049, + "sha256": "dcf775cfe9642827b3bc0eefefc56be4d3e02a100fdd972cdfaa6b77e330ab83" + }, + { + "path": "ci-logs/37222260811.json", + "bytes": 14794, + "sha256": "08138c9d89c6283d37495b8d5107171d09d7b801556538dbd305777bf8982876" + }, + { + "path": "ci-logs/37222260811.log", + "bytes": 36641, + "sha256": "2a18d9576993f7189406ac1967986f7ab92c94963576e1b01531c10acc40d8ba" + }, + { + "path": "ci-logs/37222262227-jobs.json", + "bytes": 12606, + "sha256": "e1d74060dc313b34eed0a0746ccfb215adb9fce9dc579d759d0c0fa4643a6be1" + }, + { + "path": "ci-logs/37222262227.json", + "bytes": 14778, + "sha256": "aefb99528d74a49ee20649c2e0dd786ab03a56dddab9035f3dfdbdad2a24dc8f" + }, + { + "path": "ci-logs/37222262227.log", + "bytes": 215613, + "sha256": "c816fc50f6e16b3e238ad3adafe79492bab39cd025869389391bf7970ddf80cb" + }, + { + "path": "ci-logs/37222262316-jobs.json", + "bytes": 11146, + "sha256": "e0316de256f7914d467a93830f7c5c863f73c39f8c62d277d49a7cc325678a92" + }, + { + "path": "ci-logs/37222262316.json", + "bytes": 14769, + "sha256": "d1eebb801749b89e91bbf4e3a8709c166657120b9158b35f5dccfd7edd964f79" + }, + { + "path": "ci-logs/37222262316.log", + "bytes": 90750, + "sha256": "4677085e0013b87d4c9889d0be9028ba3011be781857649cb8ef7c063778e56b" + }, + { + "path": "ci-logs/37224471966-jobs.json", + "bytes": 2049, + "sha256": "63dadc57ca3152c1935bd8f695d013029e5e3c26daa002d10bfdbb6fa7f59203" + }, + { + "path": "ci-logs/37224471966.json", + "bytes": 14595, + "sha256": "a0259264bad135b0c3a63aef0e7d7a042f31895efa7f54f4c45305caf1be69ff" + }, + { + "path": "ci-logs/37224471966.log", + "bytes": 36466, + "sha256": "c960ccdffcf4799b191e004b5d0b167529bc7f87e00c8914b1fb850470cbc610" + }, + { + "path": "ci-logs/37224473358-jobs.json", + "bytes": 8056, + "sha256": "52ed68d2642fa310864bbfcbf6ed5fead0b504e6408e31e16c425a28197bee1d" + }, + { + "path": "ci-logs/37224473358.json", + "bytes": 14579, + "sha256": "0f30b8ec037d6554f71993474a1efffbcf886bd03021d6be936fdc2870c8cacd" + }, + { + "path": "ci-logs/37224473358.log", + "bytes": 220700, + "sha256": "48d3d9f20af39e37dc5a1f0c29f5cebbffdabea8f1743e7219c6ff892897c565" + }, + { + "path": "ci-logs/37224473401-jobs.json", + "bytes": 29370, + "sha256": "b216769efab69d28b955aca5e3bf0a65697335f45b13bde30e81674411f658c4" + }, + { + "path": "ci-logs/37224473401.json", + "bytes": 14590, + "sha256": "d614e769c56065a0423d753cf90040100969d0da87770e07435b5d7c33f5ddc5" + }, + { + "path": "ci-logs/37224473401.log", + "bytes": 630225, + "sha256": "862f44a7e3c74a62594732f72d499d72df2a9730e5e497b5cbddb52902145b51" + }, + { + "path": "ci-logs/37224473429-jobs.json", + "bytes": 7138, + "sha256": "7d92847765fd7d1cf50ee07539c1cce406599b45607a814fc6548d7891b83b8b" + }, + { + "path": "ci-logs/37224473429.json", + "bytes": 14576, + "sha256": "59f25277f54f9cfee53d31ff4a99b03affece330d88a7bc8598dfe509d1e94cd" + }, + { + "path": "ci-logs/37224473429.log", + "bytes": 82866, + "sha256": "f5e5630c9bcab028dbf8da9b97d4485824593e5c7d82ed980f28d444e6c7344c" + }, + { + "path": "ci-logs/37224809082-jobs.json", + "bytes": 64267, + "sha256": "63d9c934bf09adec644107908a184e964d9b6e32b8d16a5a088bd91d9735fdeb" + }, + { + "path": "ci-logs/37224809082.json", + "bytes": 14503, + "sha256": "0972ab9d6fb930d48a11f86340d8df6fd87c58870ca503f9a78627db05b4b8b3" + }, + { + "path": "ci-logs/37224809082.log", + "bytes": 1162325, + "sha256": "f515d72d1e0937d9350cef1ad22115624d1cfd2c59f1d60b1a6adbd9398d435e" + }, + { + "path": "ci-logs/37224809082.log.error.txt", + "bytes": 28, + "sha256": "93b5445829a3e3ad126eeb132000ce0f1c59c4b5dec756c0f3bfcd8540d7c7f4" + }, + { + "path": "ci-logs/37224810674-jobs.json", + "bytes": 2049, + "sha256": "a189c580a86632199bacc29262a220115b3ee9b09694da4383af8f12e2a1367f" + }, + { + "path": "ci-logs/37224810674.json", + "bytes": 14555, + "sha256": "bc009e4da79f955e656c2de275bfea07fc7474f7f64a432208519c579c279336" + }, + { + "path": "ci-logs/37224810674.log", + "bytes": 36724, + "sha256": "fbab9b53984ebfbf21a57e1a2fc993e95c07bcbbd08c53fa6d837b83c76d6c50" + }, + { + "path": "ci-logs/37224812564-jobs.json", + "bytes": 8056, + "sha256": "706b12197eb390a1d3b42bc6477ad89c6ed2aa1f1990c7766e6ac8f4b39e552f" + }, + { + "path": "ci-logs/37224812564.json", + "bytes": 14539, + "sha256": "df516b5999888ebbca3eb03faee187dfecaf5257a14bd1e5d312024442d2d73d" + }, + { + "path": "ci-logs/37224812564.log", + "bytes": 170955, + "sha256": "9f364395c18476684c5a11beff4ab0968c5752f6d7ebb2e940186e703d1cee7a" + }, + { + "path": "ci-logs/37224812655-jobs.json", + "bytes": 29370, + "sha256": "9a139bbe50c752018c9a2a4c45e03d10f0eab3a5682752a9c13224814f9603b4" + }, + { + "path": "ci-logs/37224812655.json", + "bytes": 14550, + "sha256": "21da7f7beea2f6e1241c864b4e846967759a30c4e79c20dff7ba03ec3d35f29c" + }, + { + "path": "ci-logs/37224812655.log", + "bytes": 576736, + "sha256": "28e13ecd1e83524060fabeb9be23564ce7d8db9ac96770014dbe62cdc195beac" + }, + { + "path": "ci-logs/37224812701-jobs.json", + "bytes": 7138, + "sha256": "8c701025190598a4bfdfbeb6066fd756030ad8defb70003e4908d332144b3eea" + }, + { + "path": "ci-logs/37224812701.json", + "bytes": 14536, + "sha256": "03079d46abae16757d842c3300eec8ae6fb93ac0245ac1f72f44ebcce9dbbeda" + }, + { + "path": "ci-logs/37224812701.log", + "bytes": 82862, + "sha256": "b91748b99e76e6f95ea6ec046a41b283246cd122401cc8e1402dee7d6739a145" + }, + { + "path": "ci-logs/37226110636-jobs.json", + "bytes": 65932, + "sha256": "ea252e3bd785727fa4b80075c836b99e29cc41b38ecc8c834a7eb1bf254cc290" + }, + { + "path": "ci-logs/37226110636.json", + "bytes": 14908, + "sha256": "214f1bb714e0466c78ccd0c7a885be5eb7dbad275440ccf99ac698cf13715c7e" + }, + { + "path": "ci-logs/37226110636.log", + "bytes": 1135966, + "sha256": "3495e15ceafc408bd1a231d80131716676772822b68b8d8a3ab83f7cc9d59cdf" + }, + { + "path": "ci-logs/37226112158-jobs.json", + "bytes": 2049, + "sha256": "dee196c5c571a2cc98f82ac7ac37e700592658ac61e09d70560ed65e87745858" + }, + { + "path": "ci-logs/37226112158.json", + "bytes": 14974, + "sha256": "ae469fabd4b3584c93e108768437b6f6c3ce060002d73c19971d4ebb1cf3a1b9" + }, + { + "path": "ci-logs/37226112158.log", + "bytes": 36639, + "sha256": "ced13b55260a7e974156f273be3aeb072bcd8c9ab35f5af48c502d6daebef448" + }, + { + "path": "ci-logs/37226112765-jobs.json", + "bytes": 7138, + "sha256": "ea00b52f7a7249d34a7bf1c0afa53c6198b7b933e724a5eee2d6751728e1f652" + }, + { + "path": "ci-logs/37226112765.json", + "bytes": 14955, + "sha256": "891e78f925420113dabea27b84384932ba4a6014b521fa7a1fc88780e7ec6c05" + }, + { + "path": "ci-logs/37226112765.log", + "bytes": 82870, + "sha256": "cee76d9c6891f79d94d3737e8b3d8ae694a87bfd2062151f6189fc25d7684d26" + }, + { + "path": "ci-logs/37226112826-jobs.json", + "bytes": 8056, + "sha256": "a136bb4b049098ef0fbd1c4320c00d004729ba05dc857cc3a9b59a02729cfcf7" + }, + { + "path": "ci-logs/37226112826.json", + "bytes": 14958, + "sha256": "c9ce67beeb9c13290f38a23b1ed42dbdc32333a2a3ca347294b95ec3b1902677" + }, + { + "path": "ci-logs/37226112826.log", + "bytes": 171789, + "sha256": "82b85c802529c6178fd34b0c71f9f4db44007f1b2e068566251b9da8c48202be" + }, + { + "path": "ci-logs/37226112834-jobs.json", + "bytes": 29370, + "sha256": "f81f6d40acb2d43131b6a3f36b18f4a9f2d7e378d6937da9f0096c2a0fc86ec5" + }, + { + "path": "ci-logs/37226112834.json", + "bytes": 14969, + "sha256": "2d836264712c4d9fc04068c96dfe2f4f1eea7709561a6d66f1b1c7b3b490df43" + }, + { + "path": "ci-logs/37226112834.log", + "bytes": 576990, + "sha256": "91d81dd56bbd8c88859c45d51fc593452474a6f0df0237014f8ae76779a031d4" + }, + { + "path": "ci-logs/37228600749-jobs.json", + "bytes": 2049, + "sha256": "086737331477426613daa072cd0c2b1aad03ddf7262220a1408da61a597df093" + }, + { + "path": "ci-logs/37228600749.json", + "bytes": 14646, + "sha256": "6f7478b3318b4f988af7caed38230c352edd692bcab73e6c67ae474c01571799" + }, + { + "path": "ci-logs/37228600749.log", + "bytes": 36810, + "sha256": "3c6d3472275bbc7063c222e0f5ba7d297909a5c58736d6ccef8262245da92a1d" + }, + { + "path": "ci-logs/37228602158-jobs.json", + "bytes": 29370, + "sha256": "4ed3181efe1b7f3fcf5accd57cfdc80f45d8d97b703efeb74d92e49af4611661" + }, + { + "path": "ci-logs/37228602158.json", + "bytes": 14641, + "sha256": "d76b654a0b6427b1f17808bd38f5f5625f94c4e1a7a58d9da546b8082d27912e" + }, + { + "path": "ci-logs/37228602158.log", + "bytes": 576532, + "sha256": "fc53c2ca90914d77bbeddcf7e913354c17c9eb394a9cd010da398625d809850b" + }, + { + "path": "ci-logs/37228602183-jobs.json", + "bytes": 7138, + "sha256": "c9acc50a6ddaa3a59c47811d12e7b62bc44b066f748c5cb976e8a0abc3b15c3d" + }, + { + "path": "ci-logs/37228602183.json", + "bytes": 14627, + "sha256": "90a79b2547078f47a962aa820bdf8be2e249f2714eceb8181d2b176aff6dca58" + }, + { + "path": "ci-logs/37228602183.log", + "bytes": 82855, + "sha256": "043978c98ac6cb7c82f096c80d3b994527edb77158f9ad55a17bd9d2ba83497d" + }, + { + "path": "ci-logs/37228602189-jobs.json", + "bytes": 8056, + "sha256": "9c4faacfa36d15c134d6ade2e6fa1b26431c59c84844a026a9d773fc113dcdbe" + }, + { + "path": "ci-logs/37228602189.json", + "bytes": 14630, + "sha256": "59931df1597c26fa75ab1738301067c1ed31e67d1534136e183dee703d2e1298" + }, + { + "path": "ci-logs/37228602189.log", + "bytes": 171682, + "sha256": "0e9815e46085267e58296436a353120a5c472caeffebcfef8e87faaafadccdee" + }, + { + "path": "ci-logs/37228604862-jobs.json", + "bytes": 17231, + "sha256": "909d79e170705965236118f63ba2fcc82a2a4db5c4bfae4d82253ae68b916b12" + }, + { + "path": "ci-logs/37228604862.json", + "bytes": 14555, + "sha256": "99f58383265e3d0ddabaf31fc47369d0b6b4a4293f5004e0805351b106e28a72" + }, + { + "path": "ci-logs/37228604862.log", + "bytes": 237749, + "sha256": "82e66a612fadcecf43d3d07ca00e80a40721ae8911645190db76d9446634c399" + }, + { + "path": "ci-logs/37247423335-jobs.json", + "bytes": 2049, + "sha256": "a75c017f9c238f5b33e01d801e63d8e2b8236c3654ee739e5c0be322fab6b480" + }, + { + "path": "ci-logs/37247423335.json", + "bytes": 14606, + "sha256": "9cb5497826285b2434f63dbb53670381945e795e6e93af256c8d1a62ece1fca5" + }, + { + "path": "ci-logs/37247423335.log", + "bytes": 36646, + "sha256": "82f48d3d8a437533133fb526373a2dbcc51a875140a135a932a5b2474a4f5593" + }, + { + "path": "ci-logs/37247424781-jobs.json", + "bytes": 8056, + "sha256": "37a3ed604dbcdba2b152e4b88e9776ffa26c71fc624911ccac2412697bb9bd8b" + }, + { + "path": "ci-logs/37247424781.json", + "bytes": 14590, + "sha256": "ccd4e61d0aadcd9ca2340fd39ced93477721d9706adcfe331d6126a192bc721b" + }, + { + "path": "ci-logs/37247424781.log", + "bytes": 171893, + "sha256": "e9ff813a4eccd161f6c8ae5fb5f8d05a3302b2cef8850e207318b04d39d754ae" + }, + { + "path": "ci-logs/37247424792-jobs.json", + "bytes": 7138, + "sha256": "c74a6f514aa4a75d79d3549f51012f68c8ce3644664c804c8dbf414a23dfbe98" + }, + { + "path": "ci-logs/37247424792.json", + "bytes": 14587, + "sha256": "10fac767bf8b50a7002cd392ae3a916c882c88f027f832d3ef08537e5059a623" + }, + { + "path": "ci-logs/37247424792.log", + "bytes": 82859, + "sha256": "526fea568de495cdb5fdab5c7789097003c8331bdf062018a75faeff16f5da68" + }, + { + "path": "ci-logs/37247424817-jobs.json", + "bytes": 29370, + "sha256": "20a6c4e679ae6999e4834684492fe03b3e4ee88f5976a3bf7e082920f92c4464" + }, + { + "path": "ci-logs/37247424817.json", + "bytes": 14601, + "sha256": "6b77b365209b535383a1dd7b1df03e5306fa3f47d78526551af93a3d1fe26f8c" + }, + { + "path": "ci-logs/37247424817.log", + "bytes": 576634, + "sha256": "175d00dab3dcd97db608137ce31267035f1ce73997b2fa067507764bc3c27684" + }, + { + "path": "ci-logs/37247561524-jobs.json", + "bytes": 2049, + "sha256": "5dbd6cdd8c4f902e1163abac7c3bd211e75a6b073d4e078cd103a9340fba75a0" + }, + { + "path": "ci-logs/37247561524.json", + "bytes": 14601, + "sha256": "68dae435a9476637e5f345e18deb0ee1f5c6bc3415299ea5bb15a777ee49e4ba" + }, + { + "path": "ci-logs/37247561524.log", + "bytes": 36732, + "sha256": "5a231cdce23e0b32b89e77d11b6b663e594256bb21dd54bea9cdadab7bbfc03d" + }, + { + "path": "ci-logs/37247563255-jobs.json", + "bytes": 27683, + "sha256": "c0baa2461dc595c92efd2bf1d16c4872bee86612ca50ed3a39096023322ca7d0" + }, + { + "path": "ci-logs/37247563255.json", + "bytes": 14598, + "sha256": "65997c7ec2961f5ad5af03968a127f7226aec3c6b91661ab69308b1932b7cdd4" + }, + { + "path": "ci-logs/37247563255.log", + "bytes": 539562, + "sha256": "cebbccf13c6447d505367a633ee85895359a96a9119dcc9822efa151e9377050" + }, + { + "path": "ci-logs/37247563255.log.error.txt", + "bytes": 28, + "sha256": "e74df6594e7d81b04e95679b9ccd34602f5ecc9cc0b522020493d7f990d8ee19" + }, + { + "path": "ci-logs/37247563257-jobs.json", + "bytes": 7138, + "sha256": "bfd2cdc4df0f6da98c184b9713fff9aa2d34f954850c5722b257237b3a80de1e" + }, + { + "path": "ci-logs/37247563257.json", + "bytes": 14582, + "sha256": "d5a663932bcd9a5d6e4707c6ae4e4e2359666fee4b4c2c0c3fd75c062f0221e6" + }, + { + "path": "ci-logs/37247563257.log", + "bytes": 82856, + "sha256": "7bbfc5b3ccc61d9fc5ea8c6dd557c73cf219666c603b3ff9b58ec1d538c82c96" + }, + { + "path": "ci-logs/37247563272-jobs.json", + "bytes": 8064, + "sha256": "47673f38c17af505a891849f3a519cdd7bdba80fa7e2d6b376646ad778470a68" + }, + { + "path": "ci-logs/37247563272.json", + "bytes": 14587, + "sha256": "89dc5c8966f3e9433a843876050c0dfef645c7f235950ba565590a6cf0e3f181" + }, + { + "path": "ci-logs/37247563272.log", + "bytes": 168083, + "sha256": "b341e9b5a10a4e2851a606e10c072f400bbc82de9d7c6cc7f732bb89e5f28222" + }, + { + "path": "ci-logs/37247619896-jobs.json", + "bytes": 2049, + "sha256": "e2370e5c61a83bb1b7407b43232acd506605611cea16306e02f53816092d9c67" + }, + { + "path": "ci-logs/37247619896.json", + "bytes": 14552, + "sha256": "98becc3127716ed7aa00dcaaa14b42e834d088b086365ba5f75f79c96a3eb00e" + }, + { + "path": "ci-logs/37247619896.log", + "bytes": 36724, + "sha256": "13a634617aff7ddbe4c4b32c7062eb8be3f61160d3abb3b09391f1232f802371" + }, + { + "path": "ci-logs/37247621001-jobs.json", + "bytes": 29370, + "sha256": "f596bb94c4b227cec130c97e3c233da4a82c72b2f5c844d6dd67298b80848702" + }, + { + "path": "ci-logs/37247621001.json", + "bytes": 14548, + "sha256": "a3ad36865a0883baa0b7058f550df6ad26dcf69d7be24bdca2cbc6f04a3a9c87" + }, + { + "path": "ci-logs/37247621001.log", + "bytes": 576831, + "sha256": "940afff5efccf1a4f9fcdd4ef508f3b5c1126938069a7900ab1bfa6e339b03e0" + }, + { + "path": "ci-logs/37247621053-jobs.json", + "bytes": 7138, + "sha256": "2efb0f7d39fcb3e3ce683ec1fcc67255f3769e74b8f1f88c00dd9253a15f920c" + }, + { + "path": "ci-logs/37247621053.json", + "bytes": 14533, + "sha256": "7c4d561e671df8c494c94c0b9bc675ed87a82e8dacfcac825b8505c4fb33e654" + }, + { + "path": "ci-logs/37247621053.log", + "bytes": 82858, + "sha256": "6de6c2926fba012986c78c2522b6751e9fb58cb61ddaec3b9eacb4137e0fadb4" + }, + { + "path": "ci-logs/37247621054-jobs.json", + "bytes": 8056, + "sha256": "199d4109fcf34c93bbb580cb86d46e234df9e18aa49c728ed3f251a117107d2f" + }, + { + "path": "ci-logs/37247621054.json", + "bytes": 14536, + "sha256": "7fa5d305ea859124d206d3bf5939c0139af87ed7f688f7d9dec28d739519a0d4" + }, + { + "path": "ci-logs/37247621054.log", + "bytes": 172017, + "sha256": "87a7524cc60f9a8dd951193410d55cdd9039eed269be668dbb6a0bf19f4084e8" + }, + { + "path": "ci-logs/37248525093-jobs.json", + "bytes": 2049, + "sha256": "e56fb93074c6af5f580322996519f22a2ad9fa0c12adccd43268f322dd7a5d2a" + }, + { + "path": "ci-logs/37248525093.json", + "bytes": 14893, + "sha256": "a2359ae1f5e0647f4580b8b684849aa2f0bf786123ef0525356169fef3906811" + }, + { + "path": "ci-logs/37248525093.log", + "bytes": 36728, + "sha256": "a32892f7477a6b21006447e6ee02ce81715e6ac722602b869ea5bfa9a7cb7c39" + }, + { + "path": "ci-logs/37248526574-jobs.json", + "bytes": 7138, + "sha256": "32fdd318bce2f6290d8e5b993277a3a2ae840de97f44f795259352741e83890c" + }, + { + "path": "ci-logs/37248526574.json", + "bytes": 14875, + "sha256": "539807d16f108712c14f1f9aa60e93f09dbc7b1a388153bf385f1efbe8f58427" + }, + { + "path": "ci-logs/37248526574.log", + "bytes": 82865, + "sha256": "a14d1f613f23025eca7f42ed61262b1396cade092f0b9d69ee6c572a1c06c785" + }, + { + "path": "ci-logs/37248526582-jobs.json", + "bytes": 8056, + "sha256": "478dc683c47dd95da8c644452dac30d0f0afb151fae517c3b2ec4135c24e0a2b" + }, + { + "path": "ci-logs/37248526582.json", + "bytes": 14877, + "sha256": "330d344408086a0325859bafcf32c6f00488240dff7d4ef98b4829653d6ddaf2" + }, + { + "path": "ci-logs/37248526582.log", + "bytes": 171905, + "sha256": "5fd7fda00331179c726c96b52ceb28319ebf3c881fd1983e6ea6431833488878" + }, + { + "path": "ci-logs/37248526603-jobs.json", + "bytes": 29572, + "sha256": "e399c39419af4314cfe2f0cb403b829aab9d11b87da7fa038c4c2e7855a511b4" + }, + { + "path": "ci-logs/37248526603.json", + "bytes": 14889, + "sha256": "2db71485e76fd6467a7f335e2cf7bd35924bf3e85b4fc9e5ed0a48d1a8a9929f" + }, + { + "path": "ci-logs/37248526603.log", + "bytes": 578694, + "sha256": "4bfb59bb4e0bad380de43e85c8c3162eb213e5ff0f1525f65e642e408d41f42c" + }, + { + "path": "ci-logs/37250841289-jobs.json", + "bytes": 2049, + "sha256": "b257f2b343fa716eff09810b3625fe5e454a351ae3f99c4f7fe94dfeb01505c8" + }, + { + "path": "ci-logs/37250841289.json", + "bytes": 14772, + "sha256": "9aeced3da42a2dec443941701906b5761df1f5ad360e5c2e802cb598bf6fb0b7" + }, + { + "path": "ci-logs/37250841289.log", + "bytes": 36641, + "sha256": "b58e8715bff78dc47d77859fac1fa49085e926cdaf35c6a80e38924f27d3cf28" + }, + { + "path": "ci-logs/37250843914-jobs.json", + "bytes": 7138, + "sha256": "5bc67601c68680f2d6442445cacc81b7d5bf5a99a08abb3133bc5085dbb1029f" + }, + { + "path": "ci-logs/37250843914.json", + "bytes": 14754, + "sha256": "134545b3769ab57608d8374f43f6536eebdc252788acf322c5cb419d6c4ce727" + }, + { + "path": "ci-logs/37250843914.log", + "bytes": 82860, + "sha256": "61160d58908eb537430664c49f3171d3515df3de74bb188eae59363f16f2659b" + }, + { + "path": "ci-logs/37250844025-jobs.json", + "bytes": 8056, + "sha256": "2b46092645ec2ad8889fbdbbd0a25865eeba61ce9fc5cb4b3ff112ae648d2e1c" + }, + { + "path": "ci-logs/37250844025.json", + "bytes": 14756, + "sha256": "3425eff9b804ee5a1257d023b98e307ccd0f33e466e6eb9e32e833e62d418ae1" + }, + { + "path": "ci-logs/37250844025.log", + "bytes": 171800, + "sha256": "32816424a0a7caa8266d7177d817048989363fe713924aee044b01e610336e39" + }, + { + "path": "ci-logs/37250844147-jobs.json", + "bytes": 29572, + "sha256": "aca081d8423a5480c74fcb1c0a52b9ff8dd22bacdbcf293ab7d05969bbd8809f" + }, + { + "path": "ci-logs/37250844147.json", + "bytes": 14768, + "sha256": "949cab8c3f9d7f8472482c1036ff90e39513edb6fdae632a8e8b80e88bb990aa" + }, + { + "path": "ci-logs/37250844147.log", + "bytes": 578105, + "sha256": "61c20df72677c57a4a6ec1f62c63eb2efc891609f12f6f71a540add5ffdd1c62" + }, + { + "path": "ci-logs/37251039161-jobs.json", + "bytes": 2049, + "sha256": "65cf94c1d40be1b4739f072e819b2826ac354800d4e83d8e0465283360d2a7b6" + }, + { + "path": "ci-logs/37251039161.json", + "bytes": 14702, + "sha256": "0c454890cf8cbd7d6b09fd8fd16531750b9973e772337891383157b4b34de599" + }, + { + "path": "ci-logs/37251039161.log", + "bytes": 36554, + "sha256": "5edede0f2a385038214c336a11a48761420390eb4c885c5036d7b05ff38fb65a" + }, + { + "path": "ci-logs/37251040491-jobs.json", + "bytes": 8056, + "sha256": "d12662852883c2d7ddcb1af2726e85b890a504cecf235843c252ac3691edbbf7" + }, + { + "path": "ci-logs/37251040491.json", + "bytes": 14686, + "sha256": "4e82f0bf132ab7b67b5f41d6445cb6c064f5ed6e3e0a5fa6601d750628034e1c" + }, + { + "path": "ci-logs/37251040491.log", + "bytes": 171686, + "sha256": "494839188301c6cb0552898219d831961e18f97645d9304b38364ba77462e8c2" + }, + { + "path": "ci-logs/37251040493-jobs.json", + "bytes": 29572, + "sha256": "f249bb40c16c9402971093ba139d439fdd889f5330b3b0f198f979bcd81b8ea7" + }, + { + "path": "ci-logs/37251040493.json", + "bytes": 14698, + "sha256": "4e7359f9b976156725bf9e2a579cc8d11441ca62fc773dc93c19135369063432" + }, + { + "path": "ci-logs/37251040493.log", + "bytes": 578219, + "sha256": "801255be350f6186536d635f82e09935680ae10ba263a0e8496e7adcf0bbf93b" + }, + { + "path": "ci-logs/37251040573-jobs.json", + "bytes": 7138, + "sha256": "9254af7175f49aa3463d72cf1e8ebdb1c54240e9ded69ee3d087dfdd5cf6ba6d" + }, + { + "path": "ci-logs/37251040573.json", + "bytes": 14684, + "sha256": "ed0d65051f4b935d4e215b347b34d51b04bb8908bff4680d3df69f6d89f216ce" + }, + { + "path": "ci-logs/37251040573.log", + "bytes": 82858, + "sha256": "cf17c2377a5803d7a1d209bab971a34d73bcca0dfe16b68327370b5d9600a06a" + }, + { + "path": "ci-logs/37253543708-jobs.json", + "bytes": 2049, + "sha256": "ff66141e3abc06abc0cfe887ef1144b57adc030b1c5e39b65ca2606e71269a24" + }, + { + "path": "ci-logs/37253543708.json", + "bytes": 14977, + "sha256": "8fe33585aca584fe6e174810b82fab23909433b0077f778efbbf0e2cf465fff4" + }, + { + "path": "ci-logs/37253543708.log", + "bytes": 36554, + "sha256": "b2c99c16c92c2e9573da8deda559c215850b2ed686af9fcb45b35c0d29e883e1" + }, + { + "path": "ci-logs/37253545576-jobs.json", + "bytes": 8056, + "sha256": "2b5877c2dfa8954a7f9eed96cedd23979d7e2de5ab8167965afba38b40fafe4e" + }, + { + "path": "ci-logs/37253545576.json", + "bytes": 14961, + "sha256": "9aabdf0b5524b3d10eb27dc70e03b97a59379e8347b771a1b31455dade9151b9" + }, + { + "path": "ci-logs/37253545576.log", + "bytes": 171804, + "sha256": "761a37b2567732b9295bb7501d5130aa820c9a98a253ccbaedf8adf88d268c3d" + }, + { + "path": "ci-logs/37253545605-jobs.json", + "bytes": 29572, + "sha256": "a0b5d5db4051a37c1941e2237ca7b09dd1a7f89bb5b2413c481fda140293c24b" + }, + { + "path": "ci-logs/37253545605.json", + "bytes": 14973, + "sha256": "9579e1214074eea636ba959631261d40a5d63692a1fb92c803ee9ee4d7811713" + }, + { + "path": "ci-logs/37253545605.log", + "bytes": 578064, + "sha256": "9959ce441bd5fe87623de4130c7e435c9cbe3e4974f3fcbbc28ff54568ec47e3" + }, + { + "path": "ci-logs/37253545610-jobs.json", + "bytes": 7138, + "sha256": "e6f57ba20cab60bdc272c19ef8ba0ad8a635393440d24a7ea4808324ef8f9e13" + }, + { + "path": "ci-logs/37253545610.json", + "bytes": 14959, + "sha256": "9d4aa8e3fdf681891ccff2af3321875f0704a72650df49c7df9181e1d388ca78" + }, + { + "path": "ci-logs/37253545610.log", + "bytes": 82864, + "sha256": "ed159ce35f187f161e2fb993dd3d391333c094f8966c04ffca4f1692cbe1ba9c" + }, + { + "path": "ci-logs/37293771766-jobs.json", + "bytes": 7084, + "sha256": "937b9afc425cc3e807943b589121894f95924ae4c1f0d4b9683ae657442be6c3" + }, + { + "path": "ci-logs/37293771766.json", + "bytes": 14596, + "sha256": "7b37cad4fa27d9b08fb25137f8b5825fcefd665f34504668df574e0d7e19856b" + }, + { + "path": "ci-logs/37293771766.log", + "bytes": 89755, + "sha256": "f1d5e851e01717d083652753e1019bca5a2805299ac3e2309710ebe7b7b1b2ef" + }, + { + "path": "ci-logs/37293771868-jobs.json", + "bytes": 65738, + "sha256": "3733488680a013650d2e28c0cd25841835408b11488fa2ee8951bef985d6a830" + }, + { + "path": "ci-logs/37293771868.json", + "bytes": 14610, + "sha256": "11a1cf906b77d94a04b282f8ec048d4d9eaff8296cd8334cdf9b73c3741b1bd0" + }, + { + "path": "ci-logs/37293771868.log", + "bytes": 1299303, + "sha256": "652dc2d13c78cfe7866836e3ecbcf4c7ad223c8ac45f2733d98cc141f14f2ab0" + }, + { + "path": "ci-logs/37293771933-jobs.json", + "bytes": 8002, + "sha256": "4b4f6a95ecd219fdab52f881f0f80166c0b0506eb3c38acb94d76fddd95e139c" + }, + { + "path": "ci-logs/37293771933.json", + "bytes": 14598, + "sha256": "5ba580a29645ce322ee622439f1311400283ac36f8feaea6b06c9016c5749014" + }, + { + "path": "ci-logs/37293771933.log", + "bytes": 256855, + "sha256": "24af5b9ec2093047fcf90e72438d8ab2cd1bba9901fa22180fb9dfc18859dfd3" + }, + { + "path": "ci-logs/37293772008-jobs.json", + "bytes": 4285, + "sha256": "896c767e8312fc81a9bb45dbabafa64f11263d3c259a615f217e5c12fa914834" + }, + { + "path": "ci-logs/37293772008.json", + "bytes": 14593, + "sha256": "a51237ad76d7a2875f8468f66cfdec061c698d5188ebee1f931413212dc4af69" + }, + { + "path": "ci-logs/37293772008.log", + "bytes": 43506, + "sha256": "e1c597505047f6a91f9c2da8e9c3a2e8fa14535bf5edf8ad5dbd4ebd11715468" + }, + { + "path": "ci-logs/37293778052-jobs.json", + "bytes": 1817, + "sha256": "f62fb29e92ca17326b2b475a79edf778828f4127505f217fdbd555bc8ff1c297" + }, + { + "path": "ci-logs/37293778052.json", + "bytes": 14920, + "sha256": "d79926d32f35e4cbd13c609bfb9b1d5390725bf0a9bac56a8da5dd33fb2a7a70" + }, + { + "path": "ci-logs/37293778052.log", + "bytes": 169651, + "sha256": "6e3a92875e55acec6347d7ea0be7cfbc3fc06f54c564f474d331d4327ee38844" + }, + { + "path": "ci-logs/37293778906-jobs.json", + "bytes": 1811, + "sha256": "d0ed143ad6dcb5fbbe216eaafd17ed7828e369f3e23043546f36ffc31ace0742" + }, + { + "path": "ci-logs/37293778906.json", + "bytes": 14908, + "sha256": "550c871ee7736d561d0e9c67be9ba5f042280676ce525032bdd5097c729113e2" + }, + { + "path": "ci-logs/37293778906.log", + "bytes": 21153, + "sha256": "4470562e52cdc3bf026a5846f758411c4492fbb94ce5cced5549fa84a041db46" + }, + { + "path": "ci-logs/37293779105-jobs.json", + "bytes": 1813, + "sha256": "72380c0cdb44bb9d388773092838311aa57d754d3fd0755baf1b3ba699df6e9d" + }, + { + "path": "ci-logs/37293779105.json", + "bytes": 14912, + "sha256": "ee5a37c1189e4843a8451f08363241f23fb5899287fb80c7fe8d823eeec1d570" + }, + { + "path": "ci-logs/37293779105.log", + "bytes": 176117, + "sha256": "aa213a6033d3e5ce83bf265f8c08b1e0f2af81ff3ccf9107afae9e26af29c122" + }, + { + "path": "ci-logs/37294036931-jobs.json", + "bytes": 2078, + "sha256": "f41b645530091ef022a403682bd4779226ba25b88868f6827cd41d946fa89f48" + }, + { + "path": "ci-logs/37294036931.json", + "bytes": 15395, + "sha256": "63538faaadbe7414c2cd649ffd8588cd4b65df9f63f58233e6234dc202019e26" + }, + { + "path": "ci-logs/37294036931.log", + "bytes": 30309, + "sha256": "7ea255d0cd99603b1bc1f2fe746a46a447650fdbf47e5b29237669d8b2671a4d" + }, + { + "path": "ci-logs/37294124568-jobs.json", + "bytes": 4285, + "sha256": "7bf8c32f403b8d6d8f2098c7df0a240963c0d84da831df0eab88b1ca017d2fc0" + }, + { + "path": "ci-logs/37294124568.json", + "bytes": 14566, + "sha256": "e5bce409cb3bd5a4753c4e84c2608670204e338d81862cc1c2274dcb774255a2" + }, + { + "path": "ci-logs/37294124568.log", + "bytes": 43939, + "sha256": "93f0d76c33e07b8b09ec4302c7c2307cfec72f7c4f6893e3e27e20493f18174e" + }, + { + "path": "ci-logs/37295743786-jobs.json", + "bytes": 2043, + "sha256": "b98331d819bb0535d4cc5a80a8e28ceb8c8f8e542fc1f7be2901964381544df6" + }, + { + "path": "ci-logs/37295743786.json", + "bytes": 14534, + "sha256": "7793b1ea7d9d8c54ad23421793e8ce868f2c38d90ca2c17d5fc92d23285ef223" + }, + { + "path": "ci-logs/37295743786.log", + "bytes": 29542, + "sha256": "0efaf781fda367ce61e9b30771eb6156ed6e45b754b8abd5701949f85e6bf6b8" + }, + { + "path": "ci-logs/37295746040-jobs.json", + "bytes": 7633, + "sha256": "7c533032ccca0b8a894db86ad511b3b3a0d2866c536c8eb00d0466a897098aaf" + }, + { + "path": "ci-logs/37295746040.json", + "bytes": 14516, + "sha256": "a70fec89f4aae20765d10e0ac9418a098310c21277cccbcd4f0e580503a15a9a" + }, + { + "path": "ci-logs/37295746040.log", + "bytes": 128908, + "sha256": "994e5a9cc844bca6a536d4fd0dd54eed470bd1ea848550f8c995b2b462042e3c" + }, + { + "path": "ci-logs/37295746192-jobs.json", + "bytes": 29512, + "sha256": "97a4e9e33cffee307cdba44cdfaafcb2dd06330cd2947c959e88d3f62e2c0637" + }, + { + "path": "ci-logs/37295746192.json", + "bytes": 14530, + "sha256": "2d69a186540d258fa863051c851094af13cfff59fa0a318e04db5b0b37a16c8d" + }, + { + "path": "ci-logs/37295746192.log", + "bytes": 645381, + "sha256": "59565dfaa0a78207cb43bc4f5a3829ca1a128580f724529838d0ffe3ebedc625" + }, + { + "path": "ci-logs/37296408272-jobs.json", + "bytes": 2043, + "sha256": "7e157157d29ca96c1fdf08221707b22f7f2465fa7f4fee5471d8a3ff13e25680" + }, + { + "path": "ci-logs/37296408272.json", + "bytes": 14521, + "sha256": "f4072d8c52aa72ee8d9afb83c9b7755a76c44d713cabf6f9ef07f893c0f35248" + }, + { + "path": "ci-logs/37296408272.log", + "bytes": 29542, + "sha256": "5b2ad7c434d4c49222ecf108e653055793a37dc3994dd14934511458f05a6ae1" + }, + { + "path": "ci-logs/37296412630-jobs.json", + "bytes": 7633, + "sha256": "4239faced422502962115894ff4baeef050b5191d9abfd02e9cff0d29fffdef7" + }, + { + "path": "ci-logs/37296412630.json", + "bytes": 14503, + "sha256": "3cf5326b3b94bb0ceabf2fe8ae2396ba5ac3deda0618a88e434bae98d83fe7cf" + }, + { + "path": "ci-logs/37296412630.log", + "bytes": 128933, + "sha256": "89ec101d100e82367fbacb181c02bebe3047676f75176a6433d00f1beefa41ac" + }, + { + "path": "ci-logs/37296412634-jobs.json", + "bytes": 29512, + "sha256": "bc3d695277c97448263607ea9c26a78aa438bef1022d2de65ce98b0d1bf786b4" + }, + { + "path": "ci-logs/37296412634.json", + "bytes": 14517, + "sha256": "4aa9dd6a4e2b33208ce6a734adca523501d4cbf1dad6e1d7e976592939536a7d" + }, + { + "path": "ci-logs/37296412634.log", + "bytes": 645232, + "sha256": "cede88f5f9384d2cca7c77f5ffa039f878ee52155e2bc45ce9f5f7419743d6c5" + }, + { + "path": "ci-logs/37296459852-jobs.json", + "bytes": 2049, + "sha256": "cc3f2a1700b687d28b1ab2d59a69cedbb091225591acb82e0b1aea95b4c52384" + }, + { + "path": "ci-logs/37296459852.json", + "bytes": 15230, + "sha256": "02ae7b165279f4c5580bfb2e6fcf6ab40c0b531c4d0b21a0699cfd7c84fa2204" + }, + { + "path": "ci-logs/37296459852.log", + "bytes": 29155, + "sha256": "bdb7475de21d5b7f70aa867cd28398c5487e12716a0efa602ab1f7dd4a944cc9" + }, + { + "path": "ci-logs/37297329559-jobs.json", + "bytes": 7597, + "sha256": "afb28df7e082f094d6a587f742621ecc9d95efbae76d819871a5e2a01ac814a4" + }, + { + "path": "ci-logs/37297329559.json", + "bytes": 14554, + "sha256": "1573d5690b9ee564edc25698a4046ac24221a6677876a0aec50262a0cdde73d6" + }, + { + "path": "ci-logs/37297329559.log", + "bytes": 126934, + "sha256": "82886ac0ab8fd7e9bf77ce3939dd6a0f73b639650937ee1e86a03f30a39608c3" + }, + { + "path": "ci-logs/37297329698-job-111734629650.error.txt", + "bytes": 99, + "sha256": "8b6407b2fdbca54bf3d53fb93e79a3560dbe59567fa5044cfee4bed1b5b6e467" + }, + { + "path": "ci-logs/37297329698-job-111734629650.log", + "bytes": 23091, + "sha256": "a8f84fa9593e0f0a1666592278b6eba03907babc20f967bff0f8fde9d97d592e" + }, + { + "path": "ci-logs/37297329698-job-111734629836.error.txt", + "bytes": 99, + "sha256": "8b6407b2fdbca54bf3d53fb93e79a3560dbe59567fa5044cfee4bed1b5b6e467" + }, + { + "path": "ci-logs/37297329698-job-111734629836.log", + "bytes": 41287, + "sha256": "3ceaf44d23832fe289f808c6688fe2bd54a97d4d2bf28fd45db66c500afbe210" + }, + { + "path": "ci-logs/37297329698-job-111734629916.error.txt", + "bytes": 99, + "sha256": "8b6407b2fdbca54bf3d53fb93e79a3560dbe59567fa5044cfee4bed1b5b6e467" + }, + { + "path": "ci-logs/37297329698-job-111734629916.log", + "bytes": 46967, + "sha256": "9fdbc57e5c5d4043fbeb72d30829c5a27984fac365ce7289ecdc78bca230d058" + }, + { + "path": "ci-logs/37297329698-job-111734629938.error.txt", + "bytes": 99, + "sha256": "8b6407b2fdbca54bf3d53fb93e79a3560dbe59567fa5044cfee4bed1b5b6e467" + }, + { + "path": "ci-logs/37297329698-job-111734629938.log", + "bytes": 43856, + "sha256": "038912db0ad1509a7b7c83c35d025c7c5236cdb760dcc0a67f4bf6cbe29fe108" + }, + { + "path": "ci-logs/37297329698-job-111734629948.error.txt", + "bytes": 99, + "sha256": "8b6407b2fdbca54bf3d53fb93e79a3560dbe59567fa5044cfee4bed1b5b6e467" + }, + { + "path": "ci-logs/37297329698-job-111734629948.log", + "bytes": 26866, + "sha256": "0894700e6ad5af13cb7d6d91ff02b07cda467ed8755b7a6077302a85da07486b" + }, + { + "path": "ci-logs/37297329698-job-111734629968.error.txt", + "bytes": 99, + "sha256": "8b6407b2fdbca54bf3d53fb93e79a3560dbe59567fa5044cfee4bed1b5b6e467" + }, + { + "path": "ci-logs/37297329698-job-111734629968.log", + "bytes": 39595, + "sha256": "8a38626556d4989d2c07cb7f76009300b5cc36388c14a1e471abfc21064c88d6" + }, + { + "path": "ci-logs/37297329698-job-111734629970.error.txt", + "bytes": 99, + "sha256": "8b6407b2fdbca54bf3d53fb93e79a3560dbe59567fa5044cfee4bed1b5b6e467" + }, + { + "path": "ci-logs/37297329698-job-111734629970.log", + "bytes": 29951, + "sha256": "9b3fa91fcdc4615f64787f670e0fb5a6b4843001f5e0d79d0f42ed06b2b28e7c" + }, + { + "path": "ci-logs/37297329698-job-111734629989.error.txt", + "bytes": 99, + "sha256": "8b6407b2fdbca54bf3d53fb93e79a3560dbe59567fa5044cfee4bed1b5b6e467" + }, + { + "path": "ci-logs/37297329698-job-111734629989.log", + "bytes": 41295, + "sha256": "e4a91ac6fde2f9b09437120c8685f01bfd4f12445612d7aa23588ca39ea85aaa" + }, + { + "path": "ci-logs/37297329698-job-111734630008.error.txt", + "bytes": 99, + "sha256": "8b6407b2fdbca54bf3d53fb93e79a3560dbe59567fa5044cfee4bed1b5b6e467" + }, + { + "path": "ci-logs/37297329698-job-111734630008.log", + "bytes": 26904, + "sha256": "d08f4fe3eb4a14cee4c5c82d418e04ab4461bb342ccc91d37469df2c27b88792" + }, + { + "path": "ci-logs/37297329698-job-111734630009.error.txt", + "bytes": 99, + "sha256": "8b6407b2fdbca54bf3d53fb93e79a3560dbe59567fa5044cfee4bed1b5b6e467" + }, + { + "path": "ci-logs/37297329698-job-111734630009.log", + "bytes": 41135, + "sha256": "62a8adc38978781f34fc85800941754ac456a900bf44d331769be070bccbac92" + }, + { + "path": "ci-logs/37297329698-job-111734630069.error.txt", + "bytes": 99, + "sha256": "8b6407b2fdbca54bf3d53fb93e79a3560dbe59567fa5044cfee4bed1b5b6e467" + }, + { + "path": "ci-logs/37297329698-job-111734630069.log", + "bytes": 53272, + "sha256": "3ad784b5d0ec93af794f34e83b844418f9d49ddd088895b7cdda4a6623dc756f" + }, + { + "path": "ci-logs/37297329698-job-111734630087.error.txt", + "bytes": 99, + "sha256": "8b6407b2fdbca54bf3d53fb93e79a3560dbe59567fa5044cfee4bed1b5b6e467" + }, + { + "path": "ci-logs/37297329698-job-111734630087.log", + "bytes": 43859, + "sha256": "9ba8c74e785cc786ffaaae5f1e77612f3685c500ae57715c7457bf8875c2fd59" + }, + { + "path": "ci-logs/37297329698-job-111734630095.error.txt", + "bytes": 99, + "sha256": "8b6407b2fdbca54bf3d53fb93e79a3560dbe59567fa5044cfee4bed1b5b6e467" + }, + { + "path": "ci-logs/37297329698-job-111734630095.log", + "bytes": 29966, + "sha256": "387c076b8f17de24fbe8d5d40b09af575d196332c8356bfff97f90e17f3d48f7" + }, + { + "path": "ci-logs/37297329698-job-111734630101.error.txt", + "bytes": 99, + "sha256": "8b6407b2fdbca54bf3d53fb93e79a3560dbe59567fa5044cfee4bed1b5b6e467" + }, + { + "path": "ci-logs/37297329698-job-111734630101.log", + "bytes": 46920, + "sha256": "1e15644da80e7ffc8f32261d7c9211703d9e03dc8919d5db9c41fce5fa8d8b1b" + }, + { + "path": "ci-logs/37297329698-job-111734630123.error.txt", + "bytes": 99, + "sha256": "8b6407b2fdbca54bf3d53fb93e79a3560dbe59567fa5044cfee4bed1b5b6e467" + }, + { + "path": "ci-logs/37297329698-job-111734630123.log", + "bytes": 26856, + "sha256": "01665d2fa02468c8b782c1615d793132affb6cd628e5f2f9383d956979e356b5" + }, + { + "path": "ci-logs/37297329698-job-111734630127.error.txt", + "bytes": 99, + "sha256": "8b6407b2fdbca54bf3d53fb93e79a3560dbe59567fa5044cfee4bed1b5b6e467" + }, + { + "path": "ci-logs/37297329698-job-111734630127.log", + "bytes": 39817, + "sha256": "22d3b0970a1dad550d49dd84d7b8205a2db23de1578616760810a5b106cb1376" + }, + { + "path": "ci-logs/37297329698-job-111734630146.error.txt", + "bytes": 99, + "sha256": "8b6407b2fdbca54bf3d53fb93e79a3560dbe59567fa5044cfee4bed1b5b6e467" + }, + { + "path": "ci-logs/37297329698-job-111734630146.log", + "bytes": 53197, + "sha256": "876fc7ca3fbc7152b5833048127fa5f48701a58237359934cc04dbff3bed0f51" + }, + { + "path": "ci-logs/37297329698-job-111734630160.error.txt", + "bytes": 99, + "sha256": "8b6407b2fdbca54bf3d53fb93e79a3560dbe59567fa5044cfee4bed1b5b6e467" + }, + { + "path": "ci-logs/37297329698-job-111734630160.log", + "bytes": 41222, + "sha256": "fe40004a12877b6a5bc85be0e2dbc1dc688b058ab2799d35acf2a3bd1d5b4464" + }, + { + "path": "ci-logs/37297329698-job-111734630188.error.txt", + "bytes": 99, + "sha256": "8b6407b2fdbca54bf3d53fb93e79a3560dbe59567fa5044cfee4bed1b5b6e467" + }, + { + "path": "ci-logs/37297329698-job-111734630188.log", + "bytes": 23092, + "sha256": "8aea603b26dbff9efb22dbe349b95a1021aaf9ff0e5bbed9fcb8f99f80993fbb" + }, + { + "path": "ci-logs/37297329698-jobs.json", + "bytes": 65738, + "sha256": "6e35a3f7cea5da328701f88cdff5b84eea4e264f2dde397815ee3db892fb1087" + }, + { + "path": "ci-logs/37297329698.json", + "bytes": 14568, + "sha256": "d817f9d146458acbaab2f619dfaa29053416c9ab79a706c7bd5e9592842df024" + }, + { + "path": "ci-logs/37297329698.log", + "bytes": 1186468, + "sha256": "4ae384af07a42f87c59b8145cbfc7a0d7ef30ab933ddab4fb318955eb6ab25e2" + }, + { + "path": "ci-logs/37302745606-jobs.json", + "bytes": 2049, + "sha256": "38d4f5171e7a12b7e200efe5af2c3ce658d9dd4b535a2c9fcbb8a9e777e2a190" + }, + { + "path": "ci-logs/37302745606.json", + "bytes": 15068, + "sha256": "8265c94e95bcd55e6d352020a6d5ba729cef9f04a8c8a0530088d106c5cc92b5" + }, + { + "path": "ci-logs/37302745606.log", + "bytes": 29144, + "sha256": "3f7dd7bb6cc70a85d1e9643d00c54f799e6367cffc2d9dc376d0dbd6c030cc61" + }, + { + "path": "ci-logs/37302748167-jobs.json", + "bytes": 37407, + "sha256": "44a47e3fb9901345b2184171006ac5bc393b16ea301a36f0d39d82c577161662" + }, + { + "path": "ci-logs/37302748167.json", + "bytes": 15064, + "sha256": "6a5fd4e37035cd6cf4645a67ae1fb099c59bbc2538ac4c790602dbb6d14683bd" + }, + { + "path": "ci-logs/37302748167.log", + "bytes": 1026148, + "sha256": "f86ddafc21ac39c428e0586ce2f502cef29b643f67a4053322944969ce9427ca" + }, + { + "path": "ci-logs/37302748240-jobs.json", + "bytes": 6379, + "sha256": "d283145ca6f63d3b3808b18bc2570eda9c22d405eb5e0f20f5c9048a826c2920" + }, + { + "path": "ci-logs/37302748240.json", + "bytes": 15071, + "sha256": "4785864e72193267024c2572510767d02f6c941629bd76c20e0e4ad334c29b92" + }, + { + "path": "ci-logs/37302748240.log", + "bytes": 236209, + "sha256": "9c1783f58aafc94cdfbcbf2082555355214fbb087126cb71d3ccf1d409d4b1f7" + }, + { + "path": "ci-logs/37302748255-jobs.json", + "bytes": 12263, + "sha256": "9f0a06feaf267d18d825e443b6d88fd357876dd181fee4a3a262d73080188c3a" + }, + { + "path": "ci-logs/37302748255.json", + "bytes": 15050, + "sha256": "dcf3bcfce7810306bec2e34226c847491406b9f19c36b44f003032244d356bae" + }, + { + "path": "ci-logs/37302748255.log", + "bytes": 203432, + "sha256": "b7d9fde783fc16111ad4ec8eb7ca30bc979938363b4adff534c4c68cecb7a87d" + }, + { + "path": "ci-logs/37302748264-jobs.json", + "bytes": 9112, + "sha256": "6b74a9d2dfaca8470efbacd1637342e3a4d547f057c36dd7ba62524de215d96e" + }, + { + "path": "ci-logs/37302748264.json", + "bytes": 15060, + "sha256": "07753f6928be1d457f741b5fe8966ae60f704fe23295b88107c0b88bcd0d79d0" + }, + { + "path": "ci-logs/37302748264.log", + "bytes": 153910, + "sha256": "536cc5842371937a76e2aa7b67ad042cc86708c22ac135e0bde3fefa814591cd" + }, + { + "path": "ci-logs/37302748314-jobs.json", + "bytes": 11647, + "sha256": "0c750b5b8ade28233bd46033ad8f73c02133728eeac0ee07ed62538a9800a1ce" + }, + { + "path": "ci-logs/37302748314.json", + "bytes": 15052, + "sha256": "2d4a4ee754c8491b05cffd397dbf3952aad21788cae2144cffb2e36931a2425a" + }, + { + "path": "ci-logs/37302748314.log", + "bytes": 291003, + "sha256": "2177469861cab1a077bacce42d236b6df1592069524892f2edae5d8fdb33fa13" + }, + { + "path": "ci-logs/37305439002-jobs.json", + "bytes": 2049, + "sha256": "4a37dfb9a955fe1b50f49dd357df17816048df162069b251ce15a83203992971" + }, + { + "path": "ci-logs/37305439002.json", + "bytes": 15075, + "sha256": "42698d9b129812fcc5d2c2cb303c9c2d0a4a733e11f72a8ec6fc1de68026a289" + }, + { + "path": "ci-logs/37305439002.log", + "bytes": 29542, + "sha256": "f068cdd51255b9e6f1cd3d1548adb2be1a0105053d4bf07d6e56d7d32f39e630" + }, + { + "path": "ci-logs/37305440922-jobs.json", + "bytes": 12263, + "sha256": "06ed640027e7fb3f2293116db22fa787e614f7711b119e9b34307c323bbf96d3" + }, + { + "path": "ci-logs/37305440922.json", + "bytes": 15057, + "sha256": "b30ed11f01bbc8a017a54b48310134d0524a1881a0013176bcdd1b389e8e8456" + }, + { + "path": "ci-logs/37305440922.log", + "bytes": 203497, + "sha256": "4a9989f146a9498b5847689dc7ddd4cb40f1b58657c3a6836ebead3ac84dedc6" + }, + { + "path": "ci-logs/37305440978-jobs.json", + "bytes": 37407, + "sha256": "514fc0a28893e98798dde11d8b57512ab911cc253b4046d18163b1b530589d46" + }, + { + "path": "ci-logs/37305440978.json", + "bytes": 15071, + "sha256": "4f265b4163c454e41df9a9242ea417f6979c6fb1ea14bf244844099fd653229a" + }, + { + "path": "ci-logs/37305440978.log", + "bytes": 1028231, + "sha256": "56d2a76bfc6fd6b1f6f5ce0455e91d1832ff1944ce6df0bdb840bc115cb70d4f" + }, + { + "path": "ci-logs/37305441024-jobs.json", + "bytes": 6379, + "sha256": "e413a4d9027d35628fe9f5a580d27fd0f759996ddb5311f2834d2aed1dbf3057" + }, + { + "path": "ci-logs/37305441024.json", + "bytes": 15078, + "sha256": "0e8a9f38a496f25abc07d6348b444dcbe21e42af2daea5fac2f0d232d6eb469f" + }, + { + "path": "ci-logs/37305441024.log", + "bytes": 236212, + "sha256": "669bb4504b624b83b15368d3e8139dfa227c71aa38d1a962f871c773f5ba952b" + }, + { + "path": "ci-logs/37305441156-jobs.json", + "bytes": 11647, + "sha256": "d1765fa41ac5432dc0f4b5db01d76ab6943e1daa1717e3aa864a75826a176cd8" + }, + { + "path": "ci-logs/37305441156.json", + "bytes": 15059, + "sha256": "9ce44b0d19b5dfaeb07284228cbf900b9f756a3b7e0cc1858815d9ba45eafb8e" + }, + { + "path": "ci-logs/37305441156.log", + "bytes": 290690, + "sha256": "5fe79b258e74a07ca3c575e48efdbf2e73af455d44163b1e82e2c6ef99559b24" + }, + { + "path": "ci-logs/37305441174-jobs.json", + "bytes": 9290, + "sha256": "8af745a086238be5f9a6594722a8bfed2ad5c88f500e7a7cdb8a56a2222f5374" + }, + { + "path": "ci-logs/37305441174.json", + "bytes": 15067, + "sha256": "929ed5bd22975f1c27441de60254367f99b78b038f67d8d3b8c8064499a7088a" + }, + { + "path": "ci-logs/37305441174.log", + "bytes": 160503, + "sha256": "5f8f654bd6d7050b789481fec77a996caac3c0f775adf0b16f51186f87d6fab3" + }, + { + "path": "ci-logs/37306375540-jobs.json", + "bytes": 2049, + "sha256": "1c206bec1e2fb44139f814cc0f72c252eca2ac50ecc2653422f30be5e8e8014e" + }, + { + "path": "ci-logs/37306375540.json", + "bytes": 15065, + "sha256": "2f4de6e0843e1fc1c30ce4edd2d4996a20071368cff6f8a95a398a4b8f47379f" + }, + { + "path": "ci-logs/37306375540.log", + "bytes": 29277, + "sha256": "fffba14fd36dc2af8d5ae7b3a2a1ba9f1c3a2fd3826ce24ffab3d655dc7d19db" + }, + { + "path": "ci-logs/37306378813-job-111750940509.error.txt", + "bytes": 99, + "sha256": "8b6407b2fdbca54bf3d53fb93e79a3560dbe59567fa5044cfee4bed1b5b6e467" + }, + { + "path": "ci-logs/37306378813-job-111750940509.log", + "bytes": 33661, + "sha256": "3e1b25f81ea6a0feb268763f071052ada1e1a189ac3c5b7d37baf80996ca83f1" + }, + { + "path": "ci-logs/37306378813-job-111750940706.error.txt", + "bytes": 99, + "sha256": "8b6407b2fdbca54bf3d53fb93e79a3560dbe59567fa5044cfee4bed1b5b6e467" + }, + { + "path": "ci-logs/37306378813-job-111750940706.log", + "bytes": 35651, + "sha256": "23e2df3ee502a627ed2031573ea2702095a848172a4255513a20e6720c8e9d6e" + }, + { + "path": "ci-logs/37306378813-jobs.json", + "bytes": 12263, + "sha256": "6bd9ffc1d9e9969b1495e9148a1adc405bfb743c4d3afaf6bd132be9cc00643a" + }, + { + "path": "ci-logs/37306378813.json", + "bytes": 15047, + "sha256": "d9d730fac0c4c97cd64f359402feb812cc16540022262837998d84e814c96b6a" + }, + { + "path": "ci-logs/37306378813.log", + "bytes": 203446, + "sha256": "13434f94c956bde32c24d0237c12ae600739615900f21c7ae283b735c135532a" + }, + { + "path": "ci-logs/37306378835-jobs.json", + "bytes": 6379, + "sha256": "eaa8ea40742ac0f5d0552f33280f5f0fdc1d50060b88c55bb8cf5739519c09fb" + }, + { + "path": "ci-logs/37306378835.json", + "bytes": 15068, + "sha256": "be1d2111af12bb4a24232e84418c5ef71ab12638d300493bd0c0fc43089f879f" + }, + { + "path": "ci-logs/37306378835.log", + "bytes": 236202, + "sha256": "82a730b6e98462edea7cfdee8abb5eff015a0adea20ffaac6e052d827c043a38" + }, + { + "path": "ci-logs/37306378845-job-111750940932.error.txt", + "bytes": 99, + "sha256": "8b6407b2fdbca54bf3d53fb93e79a3560dbe59567fa5044cfee4bed1b5b6e467" + }, + { + "path": "ci-logs/37306378845-job-111750940932.log", + "bytes": 40718, + "sha256": "7ce971805c2aac201805fb250910bc26742067fc54f733a84efc17c1be27bffc" + }, + { + "path": "ci-logs/37306378845-job-111751107519.error.txt", + "bytes": 99, + "sha256": "8b6407b2fdbca54bf3d53fb93e79a3560dbe59567fa5044cfee4bed1b5b6e467" + }, + { + "path": "ci-logs/37306378845-job-111751107519.log", + "bytes": 47064, + "sha256": "64262f0b0740e73eceb511a3c0bda53a0ebf7f96eedd89273458285fd0d058b8" + }, + { + "path": "ci-logs/37306378845-job-111751107613.error.txt", + "bytes": 99, + "sha256": "8b6407b2fdbca54bf3d53fb93e79a3560dbe59567fa5044cfee4bed1b5b6e467" + }, + { + "path": "ci-logs/37306378845-job-111751107613.log", + "bytes": 70866, + "sha256": "759df1c3009e3467dd016664eb1bbed56bc53a7e050ad03bed105db04654af01" + }, + { + "path": "ci-logs/37306378845-job-111751107642.error.txt", + "bytes": 99, + "sha256": "8b6407b2fdbca54bf3d53fb93e79a3560dbe59567fa5044cfee4bed1b5b6e467" + }, + { + "path": "ci-logs/37306378845-job-111751107642.log", + "bytes": 47208, + "sha256": "3c076498fb7b672ad9425c84d7ed7fee59caa7bc7f425946fdfc7dbe2c3f199f" + }, + { + "path": "ci-logs/37306378845-job-111751107677.error.txt", + "bytes": 99, + "sha256": "8b6407b2fdbca54bf3d53fb93e79a3560dbe59567fa5044cfee4bed1b5b6e467" + }, + { + "path": "ci-logs/37306378845-job-111751107677.log", + "bytes": 46334, + "sha256": "796e9ef38d82f7d9fb2066e6f5c3bb33e98e22be57228811efa25864537cbee1" + }, + { + "path": "ci-logs/37306378845-job-111751107700.error.txt", + "bytes": 99, + "sha256": "8b6407b2fdbca54bf3d53fb93e79a3560dbe59567fa5044cfee4bed1b5b6e467" + }, + { + "path": "ci-logs/37306378845-job-111751107700.log", + "bytes": 70801, + "sha256": "8d04399f9658bb340e9b3be97e5d6e8b66b083e5c1281c8bb48b2845543c5b36" + }, + { + "path": "ci-logs/37306378845-job-111751107905.error.txt", + "bytes": 99, + "sha256": "8b6407b2fdbca54bf3d53fb93e79a3560dbe59567fa5044cfee4bed1b5b6e467" + }, + { + "path": "ci-logs/37306378845-job-111751107905.log", + "bytes": 46344, + "sha256": "d5c4bc9e633311a72f4c61f728021c809be94da30190a314ced0bd17292570ff" + }, + { + "path": "ci-logs/37306378845-job-111751107920.error.txt", + "bytes": 99, + "sha256": "8b6407b2fdbca54bf3d53fb93e79a3560dbe59567fa5044cfee4bed1b5b6e467" + }, + { + "path": "ci-logs/37306378845-job-111751107920.log", + "bytes": 71818, + "sha256": "cd20cbd036f7e892477294c225d8e2f3e0cbca15eacc2699701cee357335c4ad" + }, + { + "path": "ci-logs/37306378845-jobs.json", + "bytes": 37407, + "sha256": "e21c551d2545cbc9fc5002eeaeff523f2aa4a66e580ebf408c6551bbffdf7752" + }, + { + "path": "ci-logs/37306378845.json", + "bytes": 15061, + "sha256": "fda60bd82430111477fcb89d35bac7e063791d957a980f8662b392664f49b76c" + }, + { + "path": "ci-logs/37306378845.log", + "bytes": 1028003, + "sha256": "cac970eef38f7946a51efe177abf9a8f98421cda92512895f2d5f03465b98cf8" + }, + { + "path": "ci-logs/37306378854-jobs.json", + "bytes": 9290, + "sha256": "885840e03bac13141dd3b4852ee4beb65aaa74995f62677e94935bd12b3afbac" + }, + { + "path": "ci-logs/37306378854.json", + "bytes": 15057, + "sha256": "35de7e0c27ab08ddc6b208136cc86adf8c96fb430b04ed560535d2ca26a39b75" + }, + { + "path": "ci-logs/37306378854.log", + "bytes": 174518, + "sha256": "3ceb1c19ad2b45688067ab1d2fc85edb4ed4dc419ecb584341d698f576c9bdb5" + }, + { + "path": "ci-logs/37306378905-jobs.json", + "bytes": 11647, + "sha256": "3cb9cc2020595ef7d80b297b086d1ddef999ee64c80ab0659c5d7380e1de881b" + }, + { + "path": "ci-logs/37306378905.json", + "bytes": 15049, + "sha256": "245224e72101de52c9fe976cea20963b36a029ac00bab3c6fbc585c847b27048" + }, + { + "path": "ci-logs/37306378905.log", + "bytes": 290518, + "sha256": "93f9c8b59e3e09e22dfb52579d8307ca26f372b580ad6f03915e997444000af8" + }, + { + "path": "ci-logs/37307465334-jobs.json", + "bytes": 2049, + "sha256": "a357c8e6de065b140e5586ddd962ed28efab9faf0aff76bf2840dd354a5919ff" + }, + { + "path": "ci-logs/37307465334.json", + "bytes": 15067, + "sha256": "e53525c2526ef25b7068c4d723c125e1fe2be1d7ec5d2bab34134231f3bc0e18" + }, + { + "path": "ci-logs/37307465334.log", + "bytes": 29412, + "sha256": "a2257f38bcb256341ef46fe14c2e964d26c53b0d5234bd1224ec1d28cc9cce4b" + }, + { + "path": "ci-logs/37307467742-jobs.json", + "bytes": 37407, + "sha256": "9688f47abf73b694687ec64d8514a620ea69ea1311ffbb34664e9b1df0eb3ba4" + }, + { + "path": "ci-logs/37307467742.json", + "bytes": 15062, + "sha256": "451923b5f0dc46f8235a8d79331a6443512c2fb8bbd425ff562d026ea66bc380" + }, + { + "path": "ci-logs/37307467742.log", + "bytes": 1028220, + "sha256": "4dfd152a7d3f4339cf77a019e3a711526d3f54934342d38ee4485e56a0e19100" + }, + { + "path": "ci-logs/37307467851-jobs.json", + "bytes": 6379, + "sha256": "98a324a134f7afe7e43d870e2b7e41e283ecce78fc3186d6f44c685acf13347a" + }, + { + "path": "ci-logs/37307467851.json", + "bytes": 15069, + "sha256": "e9ae9683866e460e218ac80e7f8effbd84d525f36a68089c4b410625f5190140" + }, + { + "path": "ci-logs/37307467851.log", + "bytes": 236209, + "sha256": "ab1078bfb5d65ee16301678ebc6a1391d3b69b62a630af58e081e6a7e356d0a0" + }, + { + "path": "ci-logs/37307467923-jobs.json", + "bytes": 9290, + "sha256": "0532dc03e4c4af41e5987d84bfcb4f6bb533eb1950d3754f5bb62a786cf5596a" + }, + { + "path": "ci-logs/37307467923.json", + "bytes": 15058, + "sha256": "85b304636a5db031f806a39636188f1809c9ae3114b24b3c522490f2dffb113d" + }, + { + "path": "ci-logs/37307467923.log", + "bytes": 174267, + "sha256": "e70a4ed546411e55838bc3b8d163d96b23c93f16345c062fa6fcdcf2fe0d79aa" + }, + { + "path": "ci-logs/37307467945-jobs.json", + "bytes": 11647, + "sha256": "9ecca04328a88dbc848d61d05607ebe5dc297034c8b2ad37cac5172880cdb9b9" + }, + { + "path": "ci-logs/37307467945.json", + "bytes": 15050, + "sha256": "4102e0a0cf4813bcef99bff98cdb619ae34b7982afbcec935e17ccb1e53f352b" + }, + { + "path": "ci-logs/37307467945.log", + "bytes": 290680, + "sha256": "5816071a955fb6c9c29bf3205249b196938974ea7d05468ae8bd7df7729dd553" + }, + { + "path": "ci-logs/37307467957-jobs.json", + "bytes": 12263, + "sha256": "b0797becf36423939261361ad903eb50b56b16f376a11ddd4bab2e2eeae4ace8" + }, + { + "path": "ci-logs/37307467957.json", + "bytes": 15048, + "sha256": "e6b207f8fad1addbe284ca117f9e40a3e364ef552dabd10fe6b69f96bfef5215" + }, + { + "path": "ci-logs/37307467957.log", + "bytes": 203505, + "sha256": "6851ffb70bb5c6bbf98fafc2c797208945faa4fc6fff865cc013a0ad34fc80ca" + }, + { + "path": "ci-logs/37308332534-jobs.json", + "bytes": 2049, + "sha256": "32867fa12614a494827b3208070fff8bcac82b5be0f326fd72234b724ffbd5d9" + }, + { + "path": "ci-logs/37308332534.json", + "bytes": 15079, + "sha256": "9a85bbee8bad15b16241d57d170b04c84e2b00386d2c59937358fadb81fa1bbc" + }, + { + "path": "ci-logs/37308332534.log", + "bytes": 29417, + "sha256": "68e6b5be5b2bc360569fa529ec22b89e9f1473f7a5393dc15a81accae1ae9526" + }, + { + "path": "ci-logs/37308336389-jobs.json", + "bytes": 6379, + "sha256": "7fc22c30036b9e4d453780e1a4715f0aecd47fb8e0330bb7896a7a49db9c1fbc" + }, + { + "path": "ci-logs/37308336389.json", + "bytes": 15081, + "sha256": "d8e7c23f90e5125aad4a1170a007eba3f892fa8e75949535a5c1532d844696cf" + }, + { + "path": "ci-logs/37308336389.log", + "bytes": 236202, + "sha256": "0532dd94a5b0bc413b2710364091087b88f2d45363143d9bd9cd059032ed6874" + }, + { + "path": "ci-logs/37308336462-jobs.json", + "bytes": 11647, + "sha256": "27f493e868249e0b1a653a8d4ab24807223dbab695fe914494bf69f3a972fab6" + }, + { + "path": "ci-logs/37308336462.json", + "bytes": 15062, + "sha256": "bd34eb4226bba26e953d11e736aea2e20de725a9d5cf395b252f3c02eb9a1f73" + }, + { + "path": "ci-logs/37308336462.log", + "bytes": 290532, + "sha256": "50ae0be6f07f082a9cfe4db047094a71e80fc912a37409d7e60b03c2fac54670" + }, + { + "path": "ci-logs/37308336511-jobs.json", + "bytes": 9290, + "sha256": "c1f9bbd63ffa43c12d2350ee85a7a5748cc99cb6e9e0a30e7c628caa67ee5447" + }, + { + "path": "ci-logs/37308336511.json", + "bytes": 15070, + "sha256": "3ffd1fd1b4edd534b65245228aa3ab9f30cb663a57a729833ce5930df55e1d3f" + }, + { + "path": "ci-logs/37308336511.log", + "bytes": 174272, + "sha256": "a1ce15b4e2afe253989744f84038432098abd3cd617a93403313b52a702fa064" + }, + { + "path": "ci-logs/37308336521-jobs.json", + "bytes": 12263, + "sha256": "7ad09fd6583685f41fc78c2128ff4c8536a4057d0cb1e2eed42c899a8b5c4439" + }, + { + "path": "ci-logs/37308336521.json", + "bytes": 15060, + "sha256": "2e75ff49e3ecbd0b803737a58209c4370176a101386adab7e36b48093cdebfaf" + }, + { + "path": "ci-logs/37308336521.log", + "bytes": 203194, + "sha256": "26f32909f5e31288331757ca92e036b4fec08b6100b5489cb48cebf7d4c0cce0" + }, + { + "path": "ci-logs/37308336637-jobs.json", + "bytes": 37407, + "sha256": "bbf037c169cbdd50f76b365a6a6011546a3a4e3a3be1194054186ada9379a514" + }, + { + "path": "ci-logs/37308336637.json", + "bytes": 15074, + "sha256": "e9c237eafcb3db7736892a56ef014ad3925832e0cd36151ff60b011b4fd585f2" + }, + { + "path": "ci-logs/37308336637.log", + "bytes": 1027991, + "sha256": "c8dd13d2b57ab674990e1ef9af5f58f4e6220dd8ec34cff7492fa1c6775f616a" + }, + { + "path": "ci-logs/37309451401-jobs.json", + "bytes": 37407, + "sha256": "84f79a323c6f6856559acbd5c95dc8fe765a134f3a4036d8af2898e37d5565e4" + }, + { + "path": "ci-logs/37309451401.json", + "bytes": 15071, + "sha256": "1975c4190f6601db716dfff97b0228723d34a3e63ee482b24b9e88b03ce7fb26" + }, + { + "path": "ci-logs/37309451401.log", + "bytes": 1028377, + "sha256": "ff8c60a47bb57709b18cbe18fbed0aa743b4b99ee74544cdc0f6b2fae3820c0f" + }, + { + "path": "ci-logs/37309451448-jobs.json", + "bytes": 11647, + "sha256": "9d203b6c98525fa37a65cb4c29284cd8ba0caf6b6e8b96fdd3624692db9d2371" + }, + { + "path": "ci-logs/37309451448.json", + "bytes": 15059, + "sha256": "89c41994c1e6d00b00e629cb9cfe9293db03d28289864c6c2a8a203dcc46c43e" + }, + { + "path": "ci-logs/37309451448.log", + "bytes": 290839, + "sha256": "d8e628c91969c24afd39bddf333ba47c1b507f1a8e1f701d7c417d99c154479c" + }, + { + "path": "ci-logs/37309451530-jobs.json", + "bytes": 12263, + "sha256": "7ed108dfc31273990636bcfe7647823b00cafda0e6451a6609d96097f0b2523c" + }, + { + "path": "ci-logs/37309451530.json", + "bytes": 15057, + "sha256": "8539b3f3e6d7fa616dcc7127e4ee6113e3d87616a88826eb08f5d28ebe206b87" + }, + { + "path": "ci-logs/37309451530.log", + "bytes": 203465, + "sha256": "192aed165e677f957317d7f7ed53edf5dc8b303be45f19b1451fa65e8ef96f87" + }, + { + "path": "ci-logs/37309451588-jobs.json", + "bytes": 9290, + "sha256": "ffef8f427c406a05611ed27358b4446659bb05b2261f65e000b7fe13b0fc3a05" + }, + { + "path": "ci-logs/37309451588.json", + "bytes": 15067, + "sha256": "3e87987e4e13da76e09e574b9ab318f6b0c891cc75a1b991078aad2892ee6338" + }, + { + "path": "ci-logs/37309451588.log", + "bytes": 174257, + "sha256": "928a5fa85d436788e8b9deb9d55731ab435081a29da01ae05b012a06501d8992" + }, + { + "path": "ci-logs/37309451621-jobs.json", + "bytes": 6379, + "sha256": "ee391cf0df6dc2b6e1c14e7917ba913a9633577030d4baaaa1a60c7abb92df6c" + }, + { + "path": "ci-logs/37309451621.json", + "bytes": 15078, + "sha256": "b41e5b61754c2acafb8c7c2f6aa9785c49665b3d8c5e65a1142ddcc8e62d6662" + }, + { + "path": "ci-logs/37309451621.log", + "bytes": 236219, + "sha256": "2a67c7c1566d0d9564a52f7a2e7532fd2c8f9dd31af541e68ad2d7379eea1ec8" + }, + { + "path": "ci-logs/37311813175-jobs.json", + "bytes": 37407, + "sha256": "c61d379cc55572c3ab6b7a9a552c901d5ab0ca4ab8a14f48b07f1c847a442e89" + }, + { + "path": "ci-logs/37311813175.json", + "bytes": 15073, + "sha256": "50dc93b6b071928c1eb29e8528256b2179b30d1f466c1aacfff70d01469bf996" + }, + { + "path": "ci-logs/37311813175.log", + "bytes": 1028020, + "sha256": "bc826786615d9c16e75a1ec363efb87e981b27b29d36dbaecb628ad64b05b167" + }, + { + "path": "ci-logs/37311813182-jobs.json", + "bytes": 12263, + "sha256": "edd9cdf2d3c01c85680774d10d98f6b32fc70bc5595d7e626168ecc8d2ad6339" + }, + { + "path": "ci-logs/37311813182.json", + "bytes": 15059, + "sha256": "995de8b8088a1444522c1e581a2ae325050e080c26072f5c0cf37c9a3df1bf9f" + }, + { + "path": "ci-logs/37311813182.log", + "bytes": 203349, + "sha256": "11a145ad8f214d363c376e57fe9d6938207e9bd07138ace9f2bf3d12a70a7c8e" + }, + { + "path": "ci-logs/37311813265-jobs.json", + "bytes": 11647, + "sha256": "ca39fa3a40f40fe2158595dd8a17785b33fa72d1abe5e4bb6f16deebbd77062a" + }, + { + "path": "ci-logs/37311813265.json", + "bytes": 15061, + "sha256": "9c740d6e893b21538f8c2ec724967a9ae3fd664353c698201e1e973081ca198b" + }, + { + "path": "ci-logs/37311813265.log", + "bytes": 290846, + "sha256": "4cc9e9acda9e4aa005b3692c781f0d75168ca58be2672708ea13e2f41034a218" + }, + { + "path": "ci-logs/37311813324-jobs.json", + "bytes": 9665, + "sha256": "15b72cdc4be5dc60590393b1a15497e35d3c451ba9d4fce6970671e101bd272f" + }, + { + "path": "ci-logs/37311813324.json", + "bytes": 15069, + "sha256": "0479d428e6499ad19f4535f561246c387ac9907482e83f2e6ba6210936d4284e" + }, + { + "path": "ci-logs/37311813324.log", + "bytes": 179209, + "sha256": "5f0f51c581c505b31079704c8b9ed45e1413965bb65a3746e4062955ba630472" + }, + { + "path": "ci-logs/37311813457-jobs.json", + "bytes": 6379, + "sha256": "ee08a80530a3c355311775b59e0b9ffabc40a27993757bba147faba47224cef3" + }, + { + "path": "ci-logs/37311813457.json", + "bytes": 15080, + "sha256": "76545860c5301a8612d36305478fb6e29662975ae277252567ec9c2650ff6c6a" + }, + { + "path": "ci-logs/37311813457.log", + "bytes": 236202, + "sha256": "53b1fa9a0608a1fa66aed5488c97b4e898ddc13ee48823b00d59d999e14a40c2" + }, + { + "path": "ci-logs/benchmarks-37302748167.log", + "bytes": 1026148, + "sha256": "f86ddafc21ac39c428e0586ce2f502cef29b643f67a4053322944969ce9427ca" + }, + { + "path": "ci-logs/csharp-37302748255.log", + "bytes": 203432, + "sha256": "b7d9fde783fc16111ad4ec8eb7ca30bc979938363b4adff534c4c68cecb7a87d" + }, + { + "path": "ci-logs/dependencies-37302748240.log", + "bytes": 236209, + "sha256": "9c1783f58aafc94cdfbcbf2082555355214fbb087126cb71d3ccf1d409d4b1f7" + }, + { + "path": "ci-logs/diagnostics.json", + "bytes": 19975, + "sha256": "7421a6c00388be8b0315c41f24ec86c60d2243eab6bd718c343042053a1799c4" + }, + { + "path": "ci-logs/diagnostics.md", + "bytes": 7927, + "sha256": "6bf48c8c45e7d1b0195c60085ad60c64d9b0291c6dedfb38fe84553bb15e0bbf" + }, + { + "path": "ci-logs/pre-packaging-diagnostic-index.json", + "bytes": 586307, + "sha256": "57dab2fa515a9afe2707a4e82d2681a80635579aa7ca156fc1f2665b6e9ee910" + }, + { + "path": "ci-logs/quality-37302748264.log", + "bytes": 153910, + "sha256": "536cc5842371937a76e2aa7b67ad042cc86708c22ac135e0bde3fefa814591cd" + }, + { + "path": "ci-logs/quality-37305441174.log", + "bytes": 160503, + "sha256": "5f8f654bd6d7050b789481fec77a996caac3c0f775adf0b16f51186f87d6fab3" + }, + { + "path": "ci-logs/rust-37302748314.log", + "bytes": 291003, + "sha256": "2177469861cab1a077bacce42d236b6df1592069524892f2edae5d8fdb33fa13" + }, + { + "path": "collection.log", + "bytes": 10282, + "sha256": "97ee4ea250e1fd92b69c42ece1e91f1e6caeb33893aebec05c3bb6e473246f80" + }, + { + "path": "github/archive-4311-checks.json", + "bytes": 103506, + "sha256": "25689e1f9a4a54d2329e609e1af100b2c494e7118bfc0f7d1d75e237c0238db5" + }, + { + "path": "github/branch-runs-before-push.json", + "bytes": 140, + "sha256": "83de25e8be6282e0eaab82cb25dfe149204ab6277ebdbc18b8c2c9781a1ed0b8" + }, + { + "path": "github/branch-runs.json", + "bytes": 929, + "sha256": "bb9865405a7d65c802e45128a33f1a467f04778dccb98f0ff77330f5275ff1cd" + }, + { + "path": "github/codefactor-annotations.json", + "bytes": 1298, + "sha256": "75ebe3dd5939a5e2c1268d33a8e9a55c6eb92f2f508d20276dbb5e645fe7ea54" + }, + { + "path": "github/commit-timeline.txt", + "bytes": 4027, + "sha256": "e984fa3c330bf62dcb1072643cb45ec7dafd1edb057e339d33d6a5ee8470f925" + }, + { + "path": "github/fetch-main.log", + "bytes": 160, + "sha256": "7cc52ec4e9fcbbb9b0a3a2ac3c31e3ff4ec53266468e1cb14d41f72b1f0afc9c" + }, + { + "path": "github/final-default-merge.txt", + "bytes": 363, + "sha256": "1d07325fedda11f8fede5e795ed381897fab9a55370914dd431aa650c2c6a5a2" + }, + { + "path": "github/implementation-check-runs.json", + "bytes": 106552, + "sha256": "952e3543b643cd5679d00c88bbf1a452568458d6ae03a4f924d186b31a312499" + }, + { + "path": "github/implementation-final-checks.json", + "bytes": 103543, + "sha256": "53647ed8eaae911bae01b3a6de05a03fb87c3dbe4a362965e67af8dcf4e068dd" + }, + { + "path": "github/implementation-final-pr.json", + "bytes": 101, + "sha256": "1c69479c19074ad1e79e5058eae452fc3d1254bb823db8bfedf8ed2f3728f69d" + }, + { + "path": "github/implementation-final-runs.json", + "bytes": 929, + "sha256": "8520ed3dd6fab6c2a975d71d1fed2b2f0ba18696d41f34fb955713d7af1dd28f" + }, + { + "path": "github/implementation-measured-merge.json", + "bytes": 2795, + "sha256": "124ec99c8845e0d394dc24bfdf8e9d3d109bca34350056d03555529a89501292" + }, + { + "path": "github/implementation-pre-warning-cleanup-checks.json", + "bytes": 103543, + "sha256": "cf2c510a4a127cb8455438949e0316abac3238d9bb8c7f7c90ecfafe88860bbf" + }, + { + "path": "github/implementation-pre-warning-cleanup-pr.json", + "bytes": 101, + "sha256": "00fc8c1bc5e8bb1b1cae6ee6e3516110c469d51569e860efd54b77bcefec882c" + }, + { + "path": "github/implementation-pre-warning-cleanup-runs.json", + "bytes": 929, + "sha256": "8ced08b40a41264e4b58ec3aaeb443e2d7089fb276ff0869f12b714ff5b6083b" + }, + { + "path": "github/implementation-runs.json", + "bytes": 692, + "sha256": "91242ad914505c94401841f50a925c3c7da5c883524eb37e76fb8cfffe44d5f1" + }, + { + "path": "github/implementation-statuses.json", + "bytes": 5675, + "sha256": "223c4639500f95bf73fc5a1a4cb43bb86a0bea6d4225d66cf8de96311d5bbb6a" + }, + { + "path": "github/issue-110.json", + "bytes": 3752, + "sha256": "137fbec630de75ac561f440c505337d7dec5ea6070a2d2c2e07f711ee966e5ae" + }, + { + "path": "github/issue-comments.json", + "bytes": 4, + "sha256": "cf1cbb66a638b4860a516671fb74850e6ccf787fe6c4c8d29e9c04efe880bd05" + }, + { + "path": "github/packaged-6eff-checks.json", + "bytes": 103543, + "sha256": "74a2c64958d7b5b24bb9b9118e8269a853dbb6b9198e105427bc51350ebb0ac3" + }, + { + "path": "github/packaged-6eff-pr.diff", + "bytes": 754861, + "sha256": "a0b2c8a7356769283c694be890983e2f68e240e430370122f4e6455f20edfd40" + }, + { + "path": "github/packaged-6eff-pr.json", + "bytes": 12944, + "sha256": "4a4634ad003361d327979887154377366207e2bdb7f9076b9693872fd3262ade" + }, + { + "path": "github/packaged-6eff-runs.json", + "bytes": 929, + "sha256": "83dc61fa73c3271804df45f9aa59136e1e8c6c73d1806abc7293f76ffda0b8cf" + }, + { + "path": "github/pr-106.json", + "bytes": 15971, + "sha256": "cb0e30f7616ce9710df3857588f8d97d5974f5323416f66bb400b02f42831ea8" + }, + { + "path": "github/pr-108-comments.json", + "bytes": 21753, + "sha256": "db66599d959f8c7cf9c21fe05381622416aef908df0ab97dda8d33ff7601d466" + }, + { + "path": "github/pr-108-review-comments.json", + "bytes": 4, + "sha256": "cf1cbb66a638b4860a516671fb74850e6ccf787fe6c4c8d29e9c04efe880bd05" + }, + { + "path": "github/pr-108-reviews.json", + "bytes": 4, + "sha256": "cf1cbb66a638b4860a516671fb74850e6ccf787fe6c4c8d29e9c04efe880bd05" + }, + { + "path": "github/pr-108.json", + "bytes": 31836, + "sha256": "3e13c102792311a8a46449304a92ba096217139584d835d1afd9ce85298d7daa" + }, + { + "path": "github/pr-109.json", + "bytes": 5205, + "sha256": "34cf96fc6ab9a4848fff81b9c76cd6a7498090817b70df4cd587aa9421a22f2d" + }, + { + "path": "github/pr-111.json", + "bytes": 15703, + "sha256": "86a15e370a49b50ab94007a7b6366880796a355d65442493ae163fb90e62c663" + }, + { + "path": "github/pr-body.md", + "bytes": 4035, + "sha256": "c2d1c5d3f8499771069e4ccb8d975a2fb6f54a8246af4242ef72c489c504c48e" + }, + { + "path": "github/pr-comments.json", + "bytes": 4, + "sha256": "cf1cbb66a638b4860a516671fb74850e6ccf787fe6c4c8d29e9c04efe880bd05" + }, + { + "path": "github/pr-files.json", + "bytes": 4258778, + "sha256": "6ec2cb369f41d588fbba818a620f6b9dd191769415087d69b96470eac804d8b7" + }, + { + "path": "github/pr-final-diff.error.txt", + "bytes": 304, + "sha256": "84e2a35000ec43e359e948b17fcab8b6ee29507abde267e0da4043568ea5ae1c" + }, + { + "path": "github/pr-final-source.diff", + "bytes": 122094, + "sha256": "32ae78d8b9dfb78c857b121e9c8e321a94dbde4d254645730c1d681c6deb859e" + }, + { + "path": "github/pr-implementation.diff", + "bytes": 107458, + "sha256": "16ce0f92d1920b848e334876db952e40b0fcfae86beec16d880d548f5057eaba" + }, + { + "path": "github/pr-initial.diff", + "bytes": 340, + "sha256": "352601f36e582eb8974382aaab089a098a8032cb868a1f05183a99fbc6b48782" + }, + { + "path": "github/pr-packaged-source.diff", + "bytes": 122952, + "sha256": "8a2de2c27f77dad53c1032dc5159e0f22966d80f092e1933994d26489889d1dc" + }, + { + "path": "github/pr-review-comments.json", + "bytes": 4, + "sha256": "cf1cbb66a638b4860a516671fb74850e6ccf787fe6c4c8d29e9c04efe880bd05" + }, + { + "path": "github/pr-reviews.json", + "bytes": 4, + "sha256": "cf1cbb66a638b4860a516671fb74850e6ccf787fe6c4c8d29e9c04efe880bd05" + }, + { + "path": "github/pr.diff", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "path": "github/pr.diff.error.txt", + "bytes": 304, + "sha256": "84e2a35000ec43e359e948b17fcab8b6ee29507abde267e0da4043568ea5ae1c" + }, + { + "path": "github/pre-packaging-741-checks.json", + "bytes": 99767, + "sha256": "366bda22f62a53059410aeb5e36f4f990380664106b32df7f17698618cddab1f" + }, + { + "path": "github/pre-packaging-741-runs.json", + "bytes": 929, + "sha256": "7a3cdfcf8652fb80794d1d331b5d12fa8223a99aacce186b4808884e67ebf4c0" + }, + { + "path": "github/pre-packaging-pr-diff.error.txt", + "bytes": 304, + "sha256": "84e2a35000ec43e359e948b17fcab8b6ee29507abde267e0da4043568ea5ae1c" + }, + { + "path": "github/pre-packaging-pr.diff", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "path": "github/quality-python-annotations.json", + "bytes": 323, + "sha256": "cb1f540a4fd5d96575fc3461327b3bbbb33e9514979f224b24cd1f64985e1a09" + }, + { + "path": "github/recent-pulls.json", + "bytes": 506119, + "sha256": "beef1b82a2e7352fafda91379db690b5a2f9987ee3b22a5e676d1d7d1279f642" + }, + { + "path": "github/recent-runs.json", + "bytes": 1466692, + "sha256": "b16e8eced285ef0a035e7dd884e072bba6a140853a118a80bf12dbe6533c0736" + }, + { + "path": "github/repository-files.txt", + "bytes": 3111, + "sha256": "3b6dcf7788362d906f181e69d02dbeec292115eeac50abf93710e9998d32d1b9" + }, + { + "path": "github/repository.json", + "bytes": 8242, + "sha256": "fddd45341c72d3eecc11e2f4142997243a216dda434737c64077d10ce1752f90" + }, + { + "path": "github/warning-cleanup-checks.json", + "bytes": 100330, + "sha256": "a4c279c6812f5fc53280d90253d0ad3d41b2f86d125b61ba06d6bf147e84eca0" + }, + { + "path": "github/warning-cleanup-status.json", + "bytes": 5673, + "sha256": "0b392ddb42b9ab0f09550a4b83278a44f1f0396915c967ef8bf0efc05550d28b" + }, + { + "path": "raw-evidence.tar.gz", + "bytes": 13242156, + "sha256": "aab7230f4bf928dfda429e720fe7305342340fd26989caf835a1c2e997a0c01c" + }, + { + "path": "research/CI-CD-BEST-PRACTICES.md", + "bytes": 32220, + "sha256": "ae04cf3e98847c48e3c588238cdfc3a8bf8173cae910658b3d67b3d330ea146f" + }, + { + "path": "research/action-pins.json", + "bytes": 852, + "sha256": "899876c23076e39d2b49650161ab05de4c253333ccda61b74e91f2e77c2df656" + }, + { + "path": "research/bandit-baseloader-issues.json", + "bytes": 3, + "sha256": "37517e5f3dc66819f61f5a7bb8ace1921282415f10551d2defa5c3eb0985b570" + }, + { + "path": "research/bandit-nosec-existing-issues.json", + "bytes": 58323, + "sha256": "8db2bda0c513f6ec3393c957b11ab649fd63372f62e1caafd2f6bd474cce894e" + }, + { + "path": "research/bandit-nosec-issue-1041.json", + "bytes": 4765, + "sha256": "1a8a5e0e0e4554c5f22e68056dbedab9b8cdfb7428766439d39c4ec42d220acf" + }, + { + "path": "research/bandit-nosec-report-url.txt", + "bytes": 68, + "sha256": "df27b91a2f775553297c1cd0bb68d4386a895929cfcc2b1135f838aa01e6ab52" + }, + { + "path": "research/bandit-nosec-report.md", + "bytes": 1757, + "sha256": "4f8dfdb2ff636fc59dd4e8e545c42f87907c372c9b6d383b989b84851c0aae9d" + }, + { + "path": "research/bandit-report-url.txt", + "bytes": 44, + "sha256": "71dcb2e791a6d34d4674651e55c4f324d5e2c89ef85c3fd2dda1128e39c30df3" + }, + { + "path": "research/bandit-report.md", + "bytes": 2004, + "sha256": "b73d26ef8bbce47d742bde4add92c4131944466e5997511c477da947980fd24b" + }, + { + "path": "research/bandit-yaml-loader.txt", + "bytes": 2404, + "sha256": "6ce7c264139c49707700020d25bbaf70790779ba3eab2332038d79e4b827c768" + }, + { + "path": "research/best-practices-revision.json", + "bytes": 3624, + "sha256": "1ee8ac92a6e15b3fa75c7be2feaa42f6a494a1a01708cc9b798189784327bef6" + }, + { + "path": "research/codacy-4311-issues.json", + "bytes": 64, + "sha256": "1d3ad5ff70b384b4b53b94c0f7cee59495fb4082b09adf77dbcc5936e858b66d" + }, + { + "path": "research/codacy-4311-logs.json", + "bytes": 3703, + "sha256": "e611bcc9ca378eab7d85f90f777d754dcd6ff73606c0516807b157a7528c84c7" + }, + { + "path": "research/codacy-4311-pr.json", + "bytes": 615, + "sha256": "189caefe77a35361e97b02039a8291591129731f6b3e6acec10616c91255d3e8" + }, + { + "path": "research/codacy-741-commit-logs.json", + "bytes": 3755, + "sha256": "b7f014f5f0c427e5b7e336e222202100ea7edf55b8bd9a1edfc97bf0982dd511" + }, + { + "path": "research/codacy-741-issues.json", + "bytes": 64, + "sha256": "1d3ad5ff70b384b4b53b94c0f7cee59495fb4082b09adf77dbcc5936e858b66d" + }, + { + "path": "research/codacy-741-pr-logs.json", + "bytes": 724, + "sha256": "0575c3cfccaec1de50a3f07c801d22e9558264cec9cbe755d8fffebb7aea1450" + }, + { + "path": "research/codacy-741-quality-gate.json", + "bytes": 59, + "sha256": "e77b8a78c2854aa35b20af69ec4b6f1374d7c023033db5f4a4e76c6731c8feac" + }, + { + "path": "research/codacy-741-snapshot.txt", + "bytes": 1393, + "sha256": "e9f2c224281ba78fd4e8fbc1e64aa09ae385fb8ae24438c36fd3579dd0549ced" + }, + { + "path": "research/codacy-initial-issues.json", + "bytes": 23090, + "sha256": "439b5963c3651a4773c3aa13e97c80a3300199e447124ae3394e9bf7632758d5" + }, + { + "path": "research/codacy-initial-snapshot.txt", + "bytes": 38907, + "sha256": "cda5dc1fed1c99654df390bb41ba3755bca43448aa57e4fa48153075066e49c1" + }, + { + "path": "research/codacy-initial.txt", + "bytes": 7142, + "sha256": "d4def30d9608227a8e5e04b5031507b1469bb06333c4f148fcae229c0267c987" + }, + { + "path": "research/codacy-markdownlint-config.txt", + "bytes": 2193, + "sha256": "a5323772fc634f37c1a2674e9650f7ea855e610014a8c5a7758ac820fedee1ce" + }, + { + "path": "research/codacy-markdownlint-engine.txt", + "bytes": 778, + "sha256": "ead891442c5fc7745f56caea09b749c04d6aa6d1495ad3eea018aec4a86d0800" + }, + { + "path": "research/codacy-markdownlint-patterns.json", + "bytes": 13530, + "sha256": "b15311218a07f0db81fe2b33a929f3dd667cd1b904060e5a55412764e4c52001" + }, + { + "path": "research/codacy-markdownlint-readme.txt", + "bytes": 10563, + "sha256": "20ccdb37761c2cb71b85a2bb0dd04b58aedd1c305d4f829c647b4f9d138918d2" + }, + { + "path": "research/codacy-packaged-6eff-issues.json", + "bytes": 64, + "sha256": "1d3ad5ff70b384b4b53b94c0f7cee59495fb4082b09adf77dbcc5936e858b66d" + }, + { + "path": "research/codacy-packaged-6eff-pr-logs.json", + "bytes": 727, + "sha256": "cff0c15348e6c6e0fa887abc7a96e5f2591af80842c62956f548d16c50705593" + }, + { + "path": "research/codacy-second-issues.json", + "bytes": 1497, + "sha256": "9689e276c292c4dce7dd10d43ea1bb0a429e42586cb024e6f55316c70606e7d6" + }, + { + "path": "research/codefactor-final-snapshot.txt", + "bytes": 4330, + "sha256": "8333fb89a116f9b5e899a5a4e431d6fcbe3afd25eaf04e25feec78d7b20eb684" + }, + { + "path": "research/codefactor-initial.txt", + "bytes": 8660, + "sha256": "eedd2c69786357f82d4b62339cf647a4dc9a662fb692071682c72891c69ea130" + }, + { + "path": "research/csharp-runner-created-issue.json", + "bytes": 1725, + "sha256": "25d6b63f7cfe968398fe04e9983e043b8b5c737ead35eccf3a89510cd608d8a6" + }, + { + "path": "research/csharp-runner-report-error.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "path": "research/csharp-runner-report-url.txt", + "bytes": 92, + "sha256": "769601f60d6cc37efa53a473087a22849f2b96069b8349645141388933332ee2" + }, + { + "path": "research/csharp-runner-report.md", + "bytes": 1485, + "sha256": "b7ad6f71b5a34d372bf4ede342e6afb3cfc84be35f770acf7751d1b89db460e5" + }, + { + "path": "research/csharp-template-issues.json", + "bytes": 2, + "sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945" + }, + { + "path": "research/dependabot-cooldown-verification.md", + "bytes": 578, + "sha256": "79d13838ca3c6def66437122caea73210bc36a98969326220ec0ce5d26887dec" + }, + { + "path": "research/dependabot-rehash-search.json", + "bytes": 3, + "sha256": "37517e5f3dc66819f61f5a7bb8ace1921282415f10551d2defa5c3eb0985b570" + }, + { + "path": "research/doublets-current-cargo.base64", + "bytes": 2547, + "sha256": "0da5f42a5d7a3104b4a49e869d70f6fb70948e8dfe243c81bbd65779ba6d753b" + }, + { + "path": "research/doublets-current-cargo.txt", + "bytes": 1877, + "sha256": "042d29a81a46cac0e9ece44ee2b2cb4557c7619d28f1d91488a3fbfe62176b7c" + }, + { + "path": "research/doublets-current-mem.base64", + "bytes": 1368, + "sha256": "42159dec1cc67ffe280f30e4f4b02a1a85694ca4acc01fdaa98705909fe3866e" + }, + { + "path": "research/doublets-current-mem.txt", + "bytes": 1006, + "sha256": "5658d1405672baee0455e688c1f44652c99f17676c8c752d3ad6195cb688b9ee" + }, + { + "path": "research/doublets-growth-created-issue.json", + "bytes": 2725, + "sha256": "6cc49c929dd0b8ee2da5e07e39bc91a07bd35bcf6d8fff5da0eb8550b96c9404" + }, + { + "path": "research/doublets-growth-report-error.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "path": "research/doublets-growth-report-url.txt", + "bytes": 55, + "sha256": "9d70fc006d6c83cb3180d8aea09d7cdd5f0eaef150aa5528685d373ebb45742a" + }, + { + "path": "research/doublets-growth-report.md", + "bytes": 2480, + "sha256": "1ef3c037edd49371a22ab6ff872d2851eda53ae6924f083e190a6c178359eb32" + }, + { + "path": "research/doublets-issues.json", + "bytes": 408167, + "sha256": "9312d46060fc6bcf6d3f0ec4f98f72e22942b3b0843561625694c2bd5238bf28" + }, + { + "path": "research/doublets-main-cargo.base64", + "bytes": 233, + "sha256": "9b2bc2804f1484f713417bd86c4ce57c187027e834eb9b72b6b5e6c13f244024" + }, + { + "path": "research/doublets-main-cargo.txt", + "bytes": 171, + "sha256": "30fe69bf819630ade19b98053c506d24048c07c84baaf6632a8427958a16cae6" + }, + { + "path": "research/doublets-main-mem.base64", + "bytes": 127, + "sha256": "e45906ce02e79f16fb87a838d86bb4e497e37a9591f97608fa013bbcd8b9cbc2" + }, + { + "path": "research/doublets-main-mem.txt", + "bytes": 75, + "sha256": "8271b9f7e58149d47f7ce352cf07f51c42db1ec7aa363ed7f614d76785fea56c" + }, + { + "path": "research/doublets-main-tree.json", + "bytes": 51312, + "sha256": "f92c63ce8e48e395575c6ce56dee80ea3f054fdccac9a4161845c4fc30df0554" + }, + { + "path": "research/fetch-metadata-action.base64", + "bytes": 4015, + "sha256": "066f58c1eab3e130c44dba3e4c204d377968bd0286cb70a3e91b62dc9e508a04" + }, + { + "path": "research/fetch-metadata-action.txt", + "bytes": 2961, + "sha256": "0f675ddec733f5ae6f6bcb1475a58be11c904fc5008de79fb76f907c0ca6e8ce" + }, + { + "path": "research/fetch-metadata-v3.json", + "bytes": 347, + "sha256": "6572a08a2bb253c4c1c7f81e80ad8378952c76e3ff0caa67d1df09a1cb67bd5c" + }, + { + "path": "research/gh-api-help.txt", + "bytes": 7770, + "sha256": "c6136b139e05d1b4e9271a1edf08473b6f57df6ff01dc6da64b7079f53852e82" + }, + { + "path": "research/github-repository-limits.html", + "bytes": 215079, + "sha256": "16b17333c046901a6d61120bf31a42ced95cbc5496f0742b7ae7a5b1141ddfd2" + }, + { + "path": "research/pr-108-auth-failure.log", + "bytes": 15086567, + "sha256": "5e3145a16643789c2bd642e62c7e5bb58459bff483f46cca54dcab5ac4416c47" + }, + { + "path": "research/pr-108-final-session.log", + "bytes": 7942422, + "sha256": "3982a577ab17dafdc3d6e570d90034ccee2c43b0c9eb0ee1ef4bab60a9edc99e" + }, + { + "path": "research/pr-108-killed-session.log", + "bytes": 9810988, + "sha256": "8fd2ea308eea01df10419edd3eaebe56fe08a9e5648108f0e352d035934a063d" + }, + { + "path": "research/pr-108-session-diagnostics.json", + "bytes": 24030, + "sha256": "53913a4c6b7e1575c3a16305cd518dedb4c70724a504df2e4b3552a356c15f94" + }, + { + "path": "research/python-template-issues.json", + "bytes": 2, + "sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945" + }, + { + "path": "research/rust-runner-existing-issue.json", + "bytes": 2062, + "sha256": "66a4fd6ef09eb7bdbd10acf18592cfa525a2ab389e597aa20d76032cd8ee7c61" + }, + { + "path": "research/rust-template-issues.json", + "bytes": 23707, + "sha256": "f314cd7b29cdccef0545e9f3c1093ce9c324624ebde926730798fa8af047673c" + }, + { + "path": "templates/csharp-ci-review.txt", + "bytes": 25076, + "sha256": "0eb8f091f5d42015153b325e9536cfd0d9c82f689213c4e542fe658c9e9eb98b" + }, + { + "path": "templates/csharp-clone.log", + "bytes": 49, + "sha256": "dd08200747d0ec1c738d99c82e44aa0ceed69227afcaac79508cc32ebd4cfc21" + }, + { + "path": "templates/csharp-full-tree-comparison.tsv", + "bytes": 11275, + "sha256": "5eb42c92e1e0dd34577e0377577b9fecab6cdde78148f9edec56106cef128939" + }, + { + "path": "templates/csharp-repository.json", + "bytes": 9023, + "sha256": "8fbd331d0c7a6ee3cd4bbce80b541fde8cf2a10f76b1845cd9cffdbd97ca8f52" + }, + { + "path": "templates/csharp-sha.txt", + "bytes": 41, + "sha256": "382cebb615e324e5348a5aab038a431d828fffce7e7cd3a962e5d2bb148bc238" + }, + { + "path": "templates/csharp-snapshot.tar.gz", + "bytes": 114166, + "sha256": "ee4782416c7ad89b196e7bcf0fa2084498b54f421a959a461a8c72a4e7f244e9" + }, + { + "path": "templates/python-ci-review.txt", + "bytes": 39985, + "sha256": "f0a3a0d57d366e417a244f7b3778fa760456e9a8526e95a739ad1a365cd2aaa9" + }, + { + "path": "templates/python-clone.log", + "bytes": 49, + "sha256": "b079884ddffc9d7e11f0a2a4fb8cd54f43e746ba0753d3d7daf7360bcb4cf867" + }, + { + "path": "templates/python-full-tree-comparison.tsv", + "bytes": 16121, + "sha256": "5374b641b17eceb54628c73f7b61d87f70ded6e4e37842058976ba482b7cafa4" + }, + { + "path": "templates/python-repository.json", + "bytes": 9013, + "sha256": "61fef6196cd631286930ae003ec25d4d2bfb4420dc878aff90fa377152f7626e" + }, + { + "path": "templates/python-sha.txt", + "bytes": 41, + "sha256": "28f493f6ac7ea0f336e6efc27fc6670aec4f8087600453c40f50a50a758206f6" + }, + { + "path": "templates/python-snapshot.tar.gz", + "bytes": 112872, + "sha256": "a4617abc7821b4175cfd939aca77df918cc00ddd382ad8d5682b36e70eed3d9c" + }, + { + "path": "templates/rust-ci-review.txt", + "bytes": 169737, + "sha256": "fab20daf6b47782eb4324906c7a3d8037e3534b6f1d9ef1c35b6e7b606de4d9f" + }, + { + "path": "templates/rust-clone.log", + "bytes": 47, + "sha256": "319905e48f47b5a084067bfda30d2fd9a6f39ff416d4268ef806a4895ded40c8" + }, + { + "path": "templates/rust-full-tree-comparison.tsv", + "bytes": 25898, + "sha256": "669b4302b5dc5ddda63a50a83dcd7549e029b0d7deddf7c74fe899cd483475b1" + }, + { + "path": "templates/rust-repository.json", + "bytes": 8932, + "sha256": "42af12d6f1bb638b2172de66b6ef921739b970acc97a44bd14a6746c72c8824a" + }, + { + "path": "templates/rust-sha.txt", + "bytes": 41, + "sha256": "9e439020ca93962ef89f36b0ba1cbfa50738d042e6db80d1628e7537195dcfa1" + }, + { + "path": "templates/rust-snapshot.tar.gz", + "bytes": 870826, + "sha256": "2737cd9ccdbbb9d6f3e8a330debff33f44cc041acff8dae3144d4a39a53a8107" + }, + { + "path": "validation/actionlint-after.log", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "path": "validation/actionlint-before.log", + "bytes": 2781, + "sha256": "d1700cfbcffe5001d20b70e62999058a0868214c6244d2280cb3921b0ff14954" + }, + { + "path": "validation/actionlint-final.log", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "path": "validation/actionlint-self-syntax.log", + "bytes": 294, + "sha256": "f0ca24e2d87c8401558659f52bfdea56c2d1de141cccbf3e2c75d758435889f8" + }, + { + "path": "validation/artifact-reproduction.log", + "bytes": 983, + "sha256": "1e31f4707d8c38af9d2401a66cc9bcbbe16558861eecab789794d1d91b9b044b" + }, + { + "path": "validation/bandit-comment-draft.log", + "bytes": 14660, + "sha256": "24c1682882aff069957cad5333f3ec8627c7baf620c652f17c7a9bdab58460e4" + }, + { + "path": "validation/bandit-final.json", + "bytes": 9510, + "sha256": "5588ba05aedc9fa0a4e460c7bbbbf0597b034d97320fa1091396c78f4488c340" + }, + { + "path": "validation/bandit-final.log", + "bytes": 152, + "sha256": "82545cad2075b66a954c9474dbda750b66caab3ffdde9e60d9ac5ddac75fc25d" + }, + { + "path": "validation/bandit-install.log", + "bytes": 1058, + "sha256": "c8e4eea9965b75b21e1370563be4429805f94e6521f124a0c242ca74a0216d5b" + }, + { + "path": "validation/bandit-loader-reproduction.log", + "bytes": 1660, + "sha256": "c912e647ce77fe60be66f955b1b89f6416fa02fe3eb7c617b14c79dc4f60daa8" + }, + { + "path": "validation/bandit-nosec-reproduction.log", + "bytes": 241, + "sha256": "1270396f370c401a66cff65ddd0f793fd55b16a6954d115390438bdef769ffec" + }, + { + "path": "validation/bandit-passing-python313.json", + "bytes": 7435, + "sha256": "810e10bcd20c53b769a98065feb75a8e4bbb63da58edda37cd00e736345965b8" + }, + { + "path": "validation/bandit-passing-python313.log", + "bytes": 470, + "sha256": "db51f6590a7c4dd9af5bfe0a74e7d791a16c2028b76601d51999cf5e264c034b" + }, + { + "path": "validation/bandit-passing-python314.log", + "bytes": 207, + "sha256": "0ec9c85072f1561d8390d2879981ab717f460bb9522f711bd87c71bc24e36a25" + }, + { + "path": "validation/bandit-python313-reproduction.json", + "bytes": 9510, + "sha256": "b9e30f57a79b64761a167bc4d48ae9c8e33c14d6a18ce0a0ca0892cc46a372a4" + }, + { + "path": "validation/bandit-python313-reproduction.log", + "bytes": 268, + "sha256": "0208b96c5bced025b3d764612f96797de40b6712ba88e610d65cd9c6bb79b1e1" + }, + { + "path": "validation/bandit-python314-reproduction.json", + "bytes": 9510, + "sha256": "09ac11ed60827d7e0a09d11acf2af2f34f8f062ff2cdc23edce6d646bf6af0bb" + }, + { + "path": "validation/bandit-python314-reproduction.log", + "bytes": 268, + "sha256": "db2178d165e78227211bf08deccd2766b02e76351dde51c399afaf1e601b59ef" + }, + { + "path": "validation/bandit-single-file-reproduction.json", + "bytes": 1891, + "sha256": "b6589720dbacfa397494ec487fcd6125dc973c8f278da4774c839f525f27679f" + }, + { + "path": "validation/benchmark-smoke-final.log", + "bytes": 11726, + "sha256": "ccdc533fb080c16212269c59dab5baea790313dc8acac80dde13f0dcf714f4d2" + }, + { + "path": "validation/benchmark-smoke.log", + "bytes": 10425, + "sha256": "ebd0bb15d14de9e59fdb987c003207a2e973d6cf0e5b0c17ff7029eecde2d8db" + }, + { + "path": "validation/cargo-audit-install.log", + "bytes": 19752, + "sha256": "e98a29be7710d6bba9ce10fca796030fbde63f36599cd5ee8608d50b68c123d2" + }, + { + "path": "validation/ci-tools-install.log", + "bytes": 7424, + "sha256": "6a282d38a9cbd333c670c5f08391afd41932a63badb21c91b9b6f544e86e3423" + }, + { + "path": "validation/collector-final-tests.log", + "bytes": 7467, + "sha256": "879e3944beb4f5e13531594be867830b6060e4f0a8042679a84e2848d9d67d5b" + }, + { + "path": "validation/csharp-build-before.log", + "bytes": 1279, + "sha256": "7bc4a5ea402c70811e2ae62fb6f9d55ced52bd8ec724e35fa9abf4a3805bb340" + }, + { + "path": "validation/csharp-build-final.log", + "bytes": 607, + "sha256": "fca3d293fb99e7dcc5ee49d1e86ac437f9d69aae89044ecb14504e1ce2bb17a6" + }, + { + "path": "validation/csharp-experiment-format.log", + "bytes": 276, + "sha256": "fbf9b7bc33fcec9cffb9c8a448fdeddb98f04d17a4c6c390f8a4e42bfb96fd3f" + }, + { + "path": "validation/csharp-format-before.log", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "path": "validation/csharp-format-final.log", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "path": "validation/csharp-tests-before.log", + "bytes": 1632, + "sha256": "582fd863b7b3c8c3d272f80cfbbaf8549a5abaf7cd6ad7bf7a32848213577427" + }, + { + "path": "validation/csharp-tests-final.log", + "bytes": 1390, + "sha256": "b885fc9ca7a302421424cf4992fc6bfb82db694a65ac0390f244fa6e8ef49e72" + }, + { + "path": "validation/csharp-timeout-from-project.log", + "bytes": 1941, + "sha256": "3268d895a347c70b3a076e2f9523657f1455b70649db2329653738b38124e1b0" + }, + { + "path": "validation/csharp-timeout.log", + "bytes": 605, + "sha256": "da20191eb12b26e2b6dbe0774225fb22143c3a0c133b2178824f78f4c8230253" + }, + { + "path": "validation/default-results-markdown.log", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "path": "validation/evidence-final-refresh.log", + "bytes": 15633, + "sha256": "f4d1ae13f72c532c9f575467cf6ea2f92e4a4f47652737c99d9cd0acfa7336c3" + }, + { + "path": "validation/evidence-packaging-tests.log", + "bytes": 862, + "sha256": "f57e2939f71f716fcb5e5c44d53da3ca75fe89585e3af900f84859f5fed777e8" + }, + { + "path": "validation/evidence-refresh.log", + "bytes": 12922, + "sha256": "b708fed9f1974935f2dbe63673d26ab17b1aa830dfa678acc9ada4257823437b" + }, + { + "path": "validation/experiment-format.log", + "bytes": 3456, + "sha256": "815a9717fa75209d3d0c0e3523053faff1875c0a73918e70953d1727894bf22c" + }, + { + "path": "validation/format-after.log", + "bytes": 27, + "sha256": "d41ae50829b47e318b0787bc39d2a2ea2d52b518cfc7900d2efd569e6d26ab88" + }, + { + "path": "validation/format-final.log", + "bytes": 27, + "sha256": "ba72d5ff990b6755459efa6266bf58b9f38733d193f2c3339b32245e476e5994" + }, + { + "path": "validation/hosted-artifact-verification.log", + "bytes": 683, + "sha256": "c4a0abe04460cf959a9c255422f80bcc5355a8d3df64b69e2ba9e7c5114a48b4" + }, + { + "path": "validation/hosted-smoke-results/links-csharp-32-1000.json", + "bytes": 23835, + "sha256": "6d5f1eb87b046b81e9403209f99b78f8ad7d9c5d65c6b2d195fa2e0678debf18" + }, + { + "path": "validation/hosted-smoke-results/links-csharp-64-1000.json", + "bytes": 23757, + "sha256": "5dfca9b553139f06f00bdcbd38523bd950ca5adcf5da10e52fc7756ad14b12cb" + }, + { + "path": "validation/hosted-smoke-results/links-rust-32-1000.json", + "bytes": 18828, + "sha256": "ddcbca663d494515d0c99da2b2135f3b3fb2aa1b7ec43f5be62bb345dac51578" + }, + { + "path": "validation/hosted-smoke-results/links-rust-64-1000.json", + "bytes": 18734, + "sha256": "d3ba63d56e629de41ab05cef2c16e96a48f32c92458d5415bfa51de536a44ef3" + }, + { + "path": "validation/hosted-smoke-results/objects-csharp-32-1000.json", + "bytes": 19727, + "sha256": "a88ff7016c47f8df724d7c28423b076201d00bd90275af35dae6ab05a034dfbf" + }, + { + "path": "validation/hosted-smoke-results/objects-csharp-64-1000.json", + "bytes": 19718, + "sha256": "34ba2d88849a5801d58afab6154f7b6faf07705eec66f9d76bcf725c15dd4441" + }, + { + "path": "validation/hosted-smoke-results/objects-rust-32-1000.json", + "bytes": 17024, + "sha256": "77aea9f138865c92f10a0473397af97cd003bccc93b907584a0170b8cff5466d" + }, + { + "path": "validation/hosted-smoke-results/objects-rust-64-1000.json", + "bytes": 17038, + "sha256": "c96cb41164cc0a040d647b93f54aafdd8febdebeadfdd89b6bd83e1b316ce754" + }, + { + "path": "validation/install-tools.log", + "bytes": 12783, + "sha256": "687ef590a662d74dbb774dda994043e3be5027cd9093fb949590618cade441a2" + }, + { + "path": "validation/job-log-download-before.error.txt", + "bytes": 99, + "sha256": "8b6407b2fdbca54bf3d53fb93e79a3560dbe59567fa5044cfee4bed1b5b6e467" + }, + { + "path": "validation/job-log-download-probe.json", + "bytes": 473, + "sha256": "0daa1ac4356461ddefdd31853ad8a541b931702676306add665b23f6b74d72d4" + }, + { + "path": "validation/log-download-outcomes.json", + "bytes": 6531, + "sha256": "58f23547875cacbc96bd459d5c3be941decd70a708978b1cf2ee53b8746bdec7" + }, + { + "path": "validation/main-4528bc4-schema.log", + "bytes": 103, + "sha256": "067d7a38e158ea9145a67055af0b9ba6b293439304eadb8bac3600f21edaf116" + }, + { + "path": "validation/main-result-snapshot/links-csharp-32-100000.json", + "bytes": 19151, + "sha256": "87b2368c659057aa4c98957b3f5c5730d398059812e3bb70ea7acb7f4dc899d3" + }, + { + "path": "validation/main-result-snapshot/links-csharp-32-1000000.json", + "bytes": 12185, + "sha256": "ee0353820855ae4a901d3684041a35fd8368dcf239942d8ea2ab582c1c3c6ae2" + }, + { + "path": "validation/main-result-snapshot/links-csharp-32-10000000.json", + "bytes": 10339, + "sha256": "992addfe96ecc809d3b7b5c82a328bed230a3637730b02dcea18a4964ce5d7c0" + }, + { + "path": "validation/main-result-snapshot/links-csharp-64-100000.json", + "bytes": 19134, + "sha256": "d664f2045f676b9f669decf3a22d26f655d2ebbeadf9c28d610256ed59cd946b" + }, + { + "path": "validation/main-result-snapshot/links-csharp-64-1000000.json", + "bytes": 12215, + "sha256": "06faabd3e0b8d5136f358b42fd553c01a2f00e0243fe284930d96286471b5ead" + }, + { + "path": "validation/main-result-snapshot/links-csharp-64-10000000.json", + "bytes": 10347, + "sha256": "16df53fe5fce689768b45dd284105eaf60806cada3138822832d7f0b8a73f4fe" + }, + { + "path": "validation/main-result-snapshot/links-rust-32-100000.json", + "bytes": 19943, + "sha256": "0afb876a0758ef864ffe1b1e19eff4405ec95514a7b56b336fbdd4afb93a78e6" + }, + { + "path": "validation/main-result-snapshot/links-rust-32-1000000.json", + "bytes": 12719, + "sha256": "a0f279298bcda2575e3f80d2ab6810b50acbb1f26e794f14b32ca3fc49a6d33d" + }, + { + "path": "validation/main-result-snapshot/links-rust-32-10000000.json", + "bytes": 10693, + "sha256": "d025dd92836b016d26cd7cfdef2ad5b95bf7e6cb8d608cd3bff74223c877ec3c" + }, + { + "path": "validation/main-result-snapshot/links-rust-64-100000.json", + "bytes": 20035, + "sha256": "ff566822c03797b729f89e88f90b3b2dbc6291a7b22991dae4555d55e9be000b" + }, + { + "path": "validation/main-result-snapshot/links-rust-64-1000000.json", + "bytes": 12771, + "sha256": "efc11aea22eab1e6a074b1bae641314e2f7724c1ccf014738ba287b2c6f03c3d" + }, + { + "path": "validation/main-result-snapshot/links-rust-64-10000000.json", + "bytes": 10683, + "sha256": "0fe684d530f29774169b255a8d994d2e97a51ad04ede33351e547c6cfe1d463d" + }, + { + "path": "validation/main-result-snapshot/objects-csharp-32-100000.json", + "bytes": 12743, + "sha256": "4547426724576fb091e669e41bd3ff07207fee6917b92abef4135064b8c7a695" + }, + { + "path": "validation/main-result-snapshot/objects-csharp-32-1000000.json", + "bytes": 9298, + "sha256": "d1a09036858ca324544d8d02d83481626a62f8ad8d472f6eb44b60ca3d8afce8" + }, + { + "path": "validation/main-result-snapshot/objects-csharp-64-100000.json", + "bytes": 12749, + "sha256": "3872ad5e6ce5e854fa00e794f7a3c6eb71504c844e88e67ea3d55d40257e8070" + }, + { + "path": "validation/main-result-snapshot/objects-csharp-64-1000000.json", + "bytes": 9294, + "sha256": "ed1ba1be794056b454ec6ce5ac38677638ef02bd95536745ebb892084f57af90" + }, + { + "path": "validation/main-result-snapshot/objects-rust-32-100000.json", + "bytes": 13138, + "sha256": "d2d1d2053a0bb6e6b679aa0a5785bfa9b66a2f43388b1b694bbb15f3c570bae0" + }, + { + "path": "validation/main-result-snapshot/objects-rust-32-1000000.json", + "bytes": 9502, + "sha256": "679e2c37754f4d89b8e07133459b87e58fbf3ca06cafa6758c4598c4a90b8a9c" + }, + { + "path": "validation/main-result-snapshot/objects-rust-64-100000.json", + "bytes": 13109, + "sha256": "1e1bb7b6c009d0a52876e5ce4ac4a063cec631e5e44ade42f3086703bcd1b035" + }, + { + "path": "validation/main-result-snapshot/objects-rust-64-1000000.json", + "bytes": 9510, + "sha256": "27a415235059c3e16458d9a03a5e40fed54fdfb28a77cf93599aa4f070953790" + }, + { + "path": "validation/main-result-snapshot/provenance.json", + "bytes": 215, + "sha256": "3f3c4eea8c8e2ef419eb0d83141b4c6f3e90608596dee3fadb878a8bbf59a3a5" + }, + { + "path": "validation/main-result-snapshot-4528bc4/links-csharp-32-100000.json", + "bytes": 25477, + "sha256": "4ed4f4c12fd1f71cb8fbab543996e84f33d24c5515f9b36d903f73cef2e721a4" + }, + { + "path": "validation/main-result-snapshot-4528bc4/links-csharp-32-1000000.json", + "bytes": 16460, + "sha256": "3c90daab0f06106bdba7eaf54bfff83ec39dc6ae233b21b5ea084cb0dcc88eaa" + }, + { + "path": "validation/main-result-snapshot-4528bc4/links-csharp-32-10000000.json", + "bytes": 13913, + "sha256": "b95c7ada4a65379292399a0317bd57d5fd5d5681a6ed94cbe19f9d78ee57e4f3" + }, + { + "path": "validation/main-result-snapshot-4528bc4/links-csharp-64-100000.json", + "bytes": 25781, + "sha256": "f4a0d08c2dcd0f662d67a48c375487e3fb488d1ccdb1dad559f340c9caff1158" + }, + { + "path": "validation/main-result-snapshot-4528bc4/links-csharp-64-1000000.json", + "bytes": 16486, + "sha256": "6114e2369023dc60723caa76257b13af90ddb2e001ee3e8df38926b50d909f6e" + }, + { + "path": "validation/main-result-snapshot-4528bc4/links-csharp-64-10000000.json", + "bytes": 13921, + "sha256": "ecdcd93b0500d9a74689bbb878924ccc87a344f1928c4fe918f9277127de5a8f" + }, + { + "path": "validation/main-result-snapshot-4528bc4/links-rust-32-100000.json", + "bytes": 19927, + "sha256": "192fbb54f8a16fd66632c903d2c7ab424e507d2b406a66ede38daff5b786e75a" + }, + { + "path": "validation/main-result-snapshot-4528bc4/links-rust-32-1000000.json", + "bytes": 12715, + "sha256": "0ca858ab2ebe99c45b7c3034d7a51576d8025e46b8057965f3fab1da492191f2" + }, + { + "path": "validation/main-result-snapshot-4528bc4/links-rust-32-10000000.json", + "bytes": 10675, + "sha256": "3e6059283ff7597b249dd83303355eed405709a04f5441dde0a403bb977422e1" + }, + { + "path": "validation/main-result-snapshot-4528bc4/links-rust-64-100000.json", + "bytes": 20083, + "sha256": "83bb5955e5e3e95042b96080f19c782ce95854c62b50ba0bcc18ced8f6053abd" + }, + { + "path": "validation/main-result-snapshot-4528bc4/links-rust-64-1000000.json", + "bytes": 12738, + "sha256": "478bac9cf3c1dcb88b087162e3f73931fbfeb996381c9d4b6194e9b31689d288" + }, + { + "path": "validation/main-result-snapshot-4528bc4/links-rust-64-10000000.json", + "bytes": 10687, + "sha256": "d05f40b80a3c55daa2dc9c1aa9ae4f043398f04e081bf1047af7b8a219a3e09a" + }, + { + "path": "validation/main-result-snapshot-4528bc4/objects-csharp-32-100000.json", + "bytes": 15374, + "sha256": "6818f6da6dec3287310b32164435c712be7ad5fefabaa8b80729862465849e6e" + }, + { + "path": "validation/main-result-snapshot-4528bc4/objects-csharp-32-1000000.json", + "bytes": 11288, + "sha256": "7fe7ce2e63bda7290c62cb4f5f0eda157f3881a7998b38f0b85a7c60b72d4b4e" + }, + { + "path": "validation/main-result-snapshot-4528bc4/objects-csharp-64-100000.json", + "bytes": 15402, + "sha256": "8d82df1b000813563c2ae5010978a0d450a6d701260394fe8a6ac20e37d718ad" + }, + { + "path": "validation/main-result-snapshot-4528bc4/objects-csharp-64-1000000.json", + "bytes": 11272, + "sha256": "892c7ec7f00ec6a74ffba3bd612991e124ac49091eb09755e74ff4a570a05c52" + }, + { + "path": "validation/main-result-snapshot-4528bc4/objects-rust-32-100000.json", + "bytes": 13082, + "sha256": "bc66e18c94fc319c20afb3a8cf3dc1190c836f8439014ea5ac5089f092f4744d" + }, + { + "path": "validation/main-result-snapshot-4528bc4/objects-rust-32-1000000.json", + "bytes": 9518, + "sha256": "837047ed00bbef6fbc2330b0b325c6ff3c9d95fef60a6ee426004174546fe4cb" + }, + { + "path": "validation/main-result-snapshot-4528bc4/objects-rust-64-100000.json", + "bytes": 13180, + "sha256": "91d9863465710b18fc54d382deb41651f4005008bf10dc8583f8afc841332364" + }, + { + "path": "validation/main-result-snapshot-4528bc4/objects-rust-64-1000000.json", + "bytes": 9510, + "sha256": "8d913b1c4f8197f8cde9caa49b9694ab3c45bdb9af8ddc9ae0437206f4755e3e" + }, + { + "path": "validation/main-result-snapshot-4528bc4/provenance.json", + "bytes": 281, + "sha256": "505b581e152239ecd7f22b9e29163e28f073f65bf458cfe28ccd979fce616d4e" + }, + { + "path": "validation/markdown-after.log", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "path": "validation/markdown-final.log", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "path": "validation/mypy-after.log", + "bytes": 44, + "sha256": "8b88f6d12bd312c1b024b66d07a7f7619a68482ac4d64e475759b1823199faa5" + }, + { + "path": "validation/mypy-draft.log", + "bytes": 1213, + "sha256": "0fc61eebcd613bd64d49479314a2bbb8abe90931fd04c8cc49238d1dbf360664" + }, + { + "path": "validation/mypy-final.log", + "bytes": 44, + "sha256": "ca16d6d1a06c6903f5407ba5268cb8b5eb5d8c7811b7532282916ec31807c328" + }, + { + "path": "validation/nuget-audit-final.log", + "bytes": 2666, + "sha256": "debb220f593c083ea0e8f0b0ce55f8d3cd91398ce4efc8a13dbd8c2cfbc53fa0" + }, + { + "path": "validation/nuget-audit.log", + "bytes": 1794, + "sha256": "2d9ba9145dcfcca215b091596d16d81f702f14fb103dc4fc47a809c0e86fd454" + }, + { + "path": "validation/packaging-actionlint.log", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "path": "validation/packaging-core-tests.log", + "bytes": 7467, + "sha256": "e9282aceef81fbc717a266bf386dcf9064225bf603659671928491b97eeda573" + }, + { + "path": "validation/packaging-markdown.log", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "path": "validation/packaging-secretlint.log", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "path": "validation/packaging-unextracted-reproduction.log", + "bytes": 1612, + "sha256": "1deb6d6dbda28ff9a59ad703e359f6363251165a69bcb3da356251e8314995c8" + }, + { + "path": "validation/packaging-zizmor.log", + "bytes": 79474, + "sha256": "4cf7b9522865c3d253ee789169c95fec091d78be0c62da68c1e7421263f127ff" + }, + { + "path": "validation/policies-after.log", + "bytes": 76, + "sha256": "51cd1e788b44d88331c045cc511acd6e43bd41cfef2dc819728462bc2c328cfa" + }, + { + "path": "validation/policies-final.log", + "bytes": 76, + "sha256": "51cd1e788b44d88331c045cc511acd6e43bd41cfef2dc819728462bc2c328cfa" + }, + { + "path": "validation/policy-reproduction.log", + "bytes": 714, + "sha256": "a687bc4307d62cb424516a8ac3e442e42c91083b4d31ee39048b621d6bca6d3c" + }, + { + "path": "validation/provider-reports-final.log", + "bytes": 7551, + "sha256": "c72db81b67cff081aaa6ec8bde61cdec1066d3222bbd0a9eed5f84ea40c9d002" + }, + { + "path": "validation/publish-reproduction.log", + "bytes": 1036, + "sha256": "1fa3b68d721a70873f58061b99168c76703fe93572f99d484d772b6fcbfe4689" + }, + { + "path": "validation/python-audit-final.log", + "bytes": 31, + "sha256": "15950a68a7ed99c59779717acefdceb3f69cfd31bde67d2c954f2a3cea4d7955" + }, + { + "path": "validation/python-audit.log", + "bytes": 31, + "sha256": "15950a68a7ed99c59779717acefdceb3f69cfd31bde67d2c954f2a3cea4d7955" + }, + { + "path": "validation/python-tests-after.log", + "bytes": 6481, + "sha256": "5e0be2f582a83d492df5e1823b86e90ca93e8ca2341ff15a2642a3ce6f5464e4" + }, + { + "path": "validation/python-tests-draft.log", + "bytes": 3763, + "sha256": "acb253a65c0bb6955437a5627f9b1a8a58ca0e7760904837eba6768fd471910f" + }, + { + "path": "validation/python-tests-final.log", + "bytes": 7467, + "sha256": "bfaedcf884e2dc7ef879ca66866060fc16444fb78b00aeb21c816869a4b9003d" + }, + { + "path": "validation/python313-final.log", + "bytes": 7840, + "sha256": "a790253ad991c57fb5c6e3de0a3df4fafdd5dd8391b4bc2c90c3a9730a8c3416" + }, + { + "path": "validation/python313-install.log", + "bytes": 1036059, + "sha256": "7beb554b05492db04b5d6e699a39e073c4f7eb22160a84a3599db8d24007a465" + }, + { + "path": "validation/python313-warning-cleanup.log", + "bytes": 7633, + "sha256": "e39a57773db4124e650d24b1e1915eedb353a66fc99d6918b1f2b63a83ffea78" + }, + { + "path": "validation/report-reproduction.log", + "bytes": 6645, + "sha256": "d23f018d53ae31e4b9bf986d6c42fe594ec2a74b566303972f528cafbbae5c4a" + }, + { + "path": "validation/ruff-after.log", + "bytes": 19, + "sha256": "82b3e6a6c090a57601d22943bd23fca9218d1031dbe5a7b754092f9a156b4f18" + }, + { + "path": "validation/ruff-before.log", + "bytes": 2760, + "sha256": "49942f237f702e0b1072468589114900bc2ef30c453d839c71c861c8e12e7dbe" + }, + { + "path": "validation/ruff-final.log", + "bytes": 19, + "sha256": "82b3e6a6c090a57601d22943bd23fca9218d1031dbe5a7b754092f9a156b4f18" + }, + { + "path": "validation/ruff-fix.log", + "bytes": 38, + "sha256": "aac3a0503d8b95052cc85fb9f1717dc82b74aa55853a5aa9749b41e30275d472" + }, + { + "path": "validation/ruff-format.log", + "bytes": 44, + "sha256": "bc9ed4a653411cf571bb8e6dfe2e6c1f084778c67f9260750f64868594447b5a" + }, + { + "path": "validation/rust-audit-final.log", + "bytes": 1278, + "sha256": "291f3a22f8030ba977a1b6c41834dd5d68d8436aa6100e44f08c6b6a2c866bea" + }, + { + "path": "validation/rust-audit.log", + "bytes": 589293, + "sha256": "5a7dcbac36d0a125b29fe97396760a932d2ad7afbdbf281e381028e528585d3f" + }, + { + "path": "validation/rust-build.log", + "bytes": 62, + "sha256": "a8c02d189dd24ac20a662d0f024dd8fa4856927ec1b99ac33e00f565be5f2984" + }, + { + "path": "validation/rust-clippy-before.log", + "bytes": 2990, + "sha256": "30cdfb5c0ef21cc6f1b6fc060cae51559a7d142fbc61f36f0e53419ae26f9e94" + }, + { + "path": "validation/rust-fmt-before.log", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "path": "validation/rust-tests-before.log", + "bytes": 2470, + "sha256": "d8de24ec77f76c7ae5fe95f6f552977babb83ce72b06b63057126dba6ab69859" + }, + { + "path": "validation/secretlint-final.log", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "path": "validation/secretlint.log", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "path": "validation/smoke-results/links-csharp-32-1000.json", + "bytes": 12783, + "sha256": "8367424882e3ea3e3d87461b28353b2fb97668ef7089c1e5f50ef64b05916737" + }, + { + "path": "validation/smoke-results/links-csharp-64-1000.json", + "bytes": 12807, + "sha256": "d4382cbdd775ab65a92fe53062e3b228076fa3a2e853ec3e51203b8ee83f8941" + }, + { + "path": "validation/smoke-results/links-rust-32-1000.json", + "bytes": 9697, + "sha256": "d1b9a3787a63fe21fc3b885f06d2f7fe8c929a7621310007e9b4db9bf57ec977" + }, + { + "path": "validation/smoke-results/links-rust-64-1000.json", + "bytes": 9713, + "sha256": "15ee64d0b501ecdaaaac318564e09ba14e566e65d5f98c5468989aaf98253edc" + }, + { + "path": "validation/smoke-results/objects-csharp-32-1000.json", + "bytes": 10607, + "sha256": "462eb05f93b8e17bf1de7eb08ef592181667dceef255ce3b04b2d0264124fd64" + }, + { + "path": "validation/smoke-results/objects-csharp-64-1000.json", + "bytes": 10607, + "sha256": "c33d443a656f4a2f345cc82b42a3e5a37bb5f9c41c590e91c3f46723fa2c4f8f" + }, + { + "path": "validation/smoke-results/objects-rust-32-1000.json", + "bytes": 8932, + "sha256": "dddcc88e104f0e9cb009f4c5e0593a31a10f93e1c1da3a9c2df1232ab6458a3d" + }, + { + "path": "validation/smoke-results/objects-rust-64-1000.json", + "bytes": 8936, + "sha256": "374ccc456f73f66c1eed8240a5748944c4b163b678add6f0bfc7c29b5a18ee33" + }, + { + "path": "validation/tool-versions.json", + "bytes": 2178, + "sha256": "e0bb0e1820919663a2382a064efef23c981b4511c01b786c7199779f3291e507" + }, + { + "path": "validation/unit-store-bare.log", + "bytes": 2094, + "sha256": "5a164d48e96966ed38be3364b57595589a1d0a955306366eadad2b020fd50105" + }, + { + "path": "validation/unit-store-build.log", + "bytes": 1632, + "sha256": "76300f5d3ab2ac055ec067c0eed238ad506d98625cee25253cb7ea374ce78aeb" + }, + { + "path": "validation/unit-store-whole.log", + "bytes": 689, + "sha256": "6870d35dd271e1c77602f9e8f88764fd50b401403f2bb71ff4ff0f6072b48dae" + }, + { + "path": "validation/variant-reproduction.log", + "bytes": 1996, + "sha256": "80cc159c447208e423499c26d11b27970bca1f90bc96ab65e6b441a2403a1804" + }, + { + "path": "validation/yaml-policy-reproduction.log", + "bytes": 3331, + "sha256": "606b79bfaf27a4355e448b982711cb64b41d961c3a6ea9de81daed8c16c09743" + }, + { + "path": "validation/zizmor-after.json", + "bytes": 2, + "sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945" + }, + { + "path": "validation/zizmor-after.log", + "bytes": 39659, + "sha256": "7aa8845629db56ad9103868b070cca3e1bc5302cb41c29b4577623c43f5ba82c" + }, + { + "path": "validation/zizmor-before.json", + "bytes": 128641, + "sha256": "c1c3989210c18863b6e44a98b009d14c7aa46456b8e8977de1706698c4a4afab" + }, + { + "path": "validation/zizmor-draft.json", + "bytes": 17608, + "sha256": "fa506a45ea394c76ea521a32689b9999c5cc417eb3641c1318271e8b1f08fba8" + }, + { + "path": "validation/zizmor-final.log", + "bytes": 39737, + "sha256": "32c36611688cca34e8966a59b3aad8cbcad08b4a6451cee65e60277b51590ea0" + }, + { + "path": "validation/zizmor-pedantic.log", + "bytes": 39737, + "sha256": "8c44ceee4ab9ee1cd2bb452009888d2c67523fa427698a9f768b54cd2f44f6a2" + } +] diff --git a/dev/log/issues/110/pulls/111/raw-evidence.tar.gz b/dev/log/issues/110/pulls/111/raw-evidence.tar.gz new file mode 100644 index 0000000..d4756eb Binary files /dev/null and b/dev/log/issues/110/pulls/111/raw-evidence.tar.gz differ diff --git a/experiments/ci/bandit_loader_probe.py b/experiments/ci/bandit_loader_probe.py new file mode 100644 index 0000000..602b90d --- /dev/null +++ b/experiments/ci/bandit_loader_probe.py @@ -0,0 +1,32 @@ +"""Reproduce B506 on a loader that cannot construct Python objects.""" + +import subprocess # nosec B404 # fixed local probe commands run without a shell. +import sys +import tempfile +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[2] +sys.path.insert(0, str(ROOT / "scripts")) +from ci_process import executable # noqa: E402 + +FIXTURE = """import yaml +print(yaml.load("!!python/object:collections.Counter {}", Loader=yaml.BaseLoader)) +""" + + +def main(): + with tempfile.TemporaryDirectory(prefix="bandit-loader-") as temporary: + path = Path(temporary) / "fixture.py" + path.write_text(FIXTURE, encoding="utf-8") + subprocess.run( # nosec B603 # fixed harmless fixture and the current Python executable. + [sys.executable, str(path)], check=True + ) + result = subprocess.run( # nosec B603 # fixed analyzer options and generated fixture path. + [executable("bandit"), "-t", "B506", "-f", "json", str(path)], check=False + ) + if result.returncode != 1: + raise SystemExit(f"Expected a B506 false positive, got exit {result.returncode}") + + +if __name__ == "__main__": + main() diff --git a/experiments/ci/bandit_nosec_probe.py b/experiments/ci/bandit_nosec_probe.py new file mode 100644 index 0000000..cd49717 --- /dev/null +++ b/experiments/ci/bandit_nosec_probe.py @@ -0,0 +1,46 @@ +"""Reproduce an unnecessary-nosec warning on a correctly annotated nested call.""" + +import json +import subprocess # nosec B404 # fixed local analyzer commands run without a shell. +import sys +import tempfile +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[2] +sys.path.insert(0, str(ROOT / "scripts")) +from ci_process import executable # noqa: E402 + +FIXTURES = { + "unannotated": 'import subprocess\nvalue = subprocess.run(["/usr/bin/true"]).stdout.strip()\n', + "nested": ('import subprocess\nvalue = subprocess.run(["/usr/bin/true"]).stdout.strip() # nosec B603\n'), + "separate": ( + 'import subprocess\nresult = subprocess.run(["/usr/bin/true"]) # nosec B603\n' + "value = result.stdout.strip()\n" + ), +} + + +def main(): + with tempfile.TemporaryDirectory(prefix="bandit-nosec-") as temporary: + for name, source in FIXTURES.items(): + path = Path(temporary) / f"{name}.py" + path.write_text(source, encoding="utf-8") + result = subprocess.run( # nosec B603 # fixed analyzer options and generated fixture path. + [executable("bandit"), "-q", "-t", "B603", "-f", "json", str(path)], + capture_output=True, + text=True, + check=False, + ) + findings = json.loads(result.stdout)["results"] + expected = 1 if name == "unannotated" else 0 + if len(findings) != expected or result.returncode != expected: + raise SystemExit(f"Unexpected {name} result: {result.stdout}{result.stderr}") + warning = "nosec encountered (B603), but no failed test" in result.stderr + if warning != (name == "nested"): + raise SystemExit(f"Unexpected {name} warning: {result.stderr}") + print(f"{name}: exit {result.returncode}, findings {len(findings)}, warning {warning}") + print(result.stderr, end="") + + +if __name__ == "__main__": + main() diff --git a/experiments/ci/collect_evidence.py b/experiments/ci/collect_evidence.py new file mode 100644 index 0000000..56efce2 --- /dev/null +++ b/experiments/ci/collect_evidence.py @@ -0,0 +1,152 @@ +"""Collect reproducible GitHub CI evidence for issue 110 without logging tokens.""" + +import concurrent.futures +import json +import subprocess # nosec B404 # collector invokes the authenticated CLI with fixed API paths and no shell. +import sys +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[2] +OUT = ROOT / "dev/log/issues/110/pulls/111" +REPO = "linksplatform/Comparisons.SQLiteVSDoublets" +sys.path.insert(0, str(ROOT / "scripts")) +from ci_process import executable # noqa: E402 + + +def capture(name, *args): + path = OUT / name + path.parent.mkdir(parents=True, exist_ok=True) + result = subprocess.run( # nosec B603 # all callers construct fixed CLI/API queries as argument lists. + [executable(args[0]), *args[1:]], capture_output=True, text=True, check=False + ) + path.write_text(result.stdout) + if result.returncode: + path.with_suffix(path.suffix + ".error.txt").write_text(result.stderr) + print(f"{name}: exit {result.returncode}, {len(result.stdout)} bytes", flush=True) + return result + + +def capture_job_log(run_id, job_id): + prefix = OUT / f"ci-logs/{run_id}-job-{job_id}" + result = subprocess.run( # nosec B603 # fixed API path and numeric job ID, no shell. + [ + executable("gh"), + "api", + "--allow-escape-sequences", + f"repos/{REPO}/actions/jobs/{job_id}/logs", + ], + capture_output=True, + check=False, + ) + if result.returncode == 0: + prefix.with_suffix(".log").write_bytes(result.stdout) + else: + prefix.with_suffix(".error.txt").write_bytes(result.stderr) + print(f"job {job_id}: exit {result.returncode}, {len(result.stdout)} bytes", flush=True) + + +def main(): + queries = { + "issue-110.json": [ + "gh", + "issue", + "view", + "110", + "--repo", + REPO, + "--json", + "number,title,body,comments,createdAt,updatedAt,state,author,url", + ], + "pr-111.json": [ + "gh", + "pr", + "view", + "111", + "--repo", + REPO, + "--json", + "number,title,body,comments,createdAt,updatedAt,state,isDraft,headRefName,baseRefName,commits,statusCheckRollup,url", + ], + "issue-comments.json": ["gh", "api", f"repos/{REPO}/issues/110/comments", "--paginate", "--slurp"], + "pr-comments.json": ["gh", "api", f"repos/{REPO}/issues/111/comments", "--paginate", "--slurp"], + "pr-review-comments.json": ["gh", "api", f"repos/{REPO}/pulls/111/comments", "--paginate", "--slurp"], + "pr-reviews.json": ["gh", "api", f"repos/{REPO}/pulls/111/reviews", "--paginate", "--slurp"], + "recent-pulls.json": [ + "gh", + "api", + f"repos/{REPO}/pulls?state=closed&sort=updated&direction=desc&per_page=20", + ], + "recent-runs.json": [ + "gh", + "api", + f"repos/{REPO}/actions/runs?created=>=2026-10-03&per_page=100", + "--paginate", + "--slurp", + ], + "branch-runs.json": [ + "gh", + "run", + "list", + "--repo", + REPO, + "--branch", + "issue-110-e1f96d946132", + "--limit", + "5", + "--json", + "databaseId,conclusion,createdAt,headSha,status,workflowName", + ], + "repository.json": ["gh", "api", f"repos/{REPO}"], + "pr.diff": ["gh", "pr", "diff", "111", "--repo", REPO], + } + with concurrent.futures.ThreadPoolExecutor(max_workers=4) as pool: + futures = [pool.submit(capture, f"github/{name}", *args) for name, args in queries.items()] + for future in futures: + future.result() + pages = json.loads((OUT / "github/recent-runs.json").read_text()) + ids = {run["id"] for page in pages for run in page["workflow_runs"]} + ids.update([37294124568, 37293779105, 37293771868, 37293771766, 37293771933]) + + def collect_run(run_id): + prefix = f"ci-logs/{run_id}" + metadata = capture(prefix + ".json", "gh", "api", f"repos/{REPO}/actions/runs/{run_id}") + jobs = capture( + prefix + "-jobs.json", + "gh", + "api", + f"repos/{REPO}/actions/runs/{run_id}/jobs?filter=all&per_page=100", + "--paginate", + "--slurp", + ) + if metadata.returncode == 0 and json.loads(metadata.stdout)["status"] == "completed": + capture(prefix + ".log", "gh", "run", "view", str(run_id), "--repo", REPO, "--log") + else: + if jobs.returncode == 0: + pages = json.loads(jobs.stdout) + for page in pages: + for job in page["jobs"]: + if job["status"] != "completed": + continue + capture_job_log(run_id, job["id"]) + print(f"run {run_id}: preserved available job logs; refresh after completion", flush=True) + + with concurrent.futures.ThreadPoolExecutor(max_workers=4) as pool: + for future in [pool.submit(collect_run, run_id) for run_id in sorted(ids)]: + future.result() + # Keep the original error as evidence and recover downloads from earlier runs, + # including jobs whose workflow has now completed and has a combined log. + with concurrent.futures.ThreadPoolExecutor(max_workers=4) as pool: + futures = [] + for path in (OUT / "ci-logs").glob("*-job-*.error.txt"): + if "terminal escape sequences" not in path.read_text(): + continue + run_id, job_id = path.name.removesuffix(".error.txt").split("-job-") + if run_id.isdigit() and job_id.isdigit(): + futures.append(pool.submit(capture_job_log, int(run_id), int(job_id))) + for future in futures: + future.result() + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/experiments/ci/index_evidence.py b/experiments/ci/index_evidence.py new file mode 100644 index 0000000..c5681fd --- /dev/null +++ b/experiments/ci/index_evidence.py @@ -0,0 +1,53 @@ +"""Index preserved issue evidence without loading large logs into memory.""" + +import argparse +import hashlib +import json +import re +from itertools import islice +from pathlib import Path + +DIAGNOSTIC = re.compile( + r"##\[(?:error|warning)\]|\bFAILED\b|\bpanic(?:ked)?\b|\bMSB\d+\b|" + r"timed? out|404 Not Found|\berror\[|\bwarning:", + re.IGNORECASE, +) +SECRET = re.compile(r"\b(?:gh[pousr]_[A-Za-z0-9]{36,}|github_pat_[A-Za-z0-9_]{40,})\b") + + +def index(directory): + files, diagnostics = [], [] + for path in sorted(directory.rglob("*")): + if not path.is_file() or path.name in ("manifest.json", "diagnostic-index.json"): + continue + digest = hashlib.sha256() + with path.open("rb") as source: + for block in iter(lambda: source.read(65536), b""): + digest.update(block) + relative = str(path.relative_to(directory)) + files.append({"path": relative, "bytes": path.stat().st_size, "sha256": digest.hexdigest()}) + if path.suffix not in (".log", ".txt", ".md", ".json", ".tsv"): + continue + with path.open(encoding="utf-8", errors="replace") as source: + line_number = 0 + while chunk := list(islice(source, 1500)): + for line in chunk: + line_number += 1 + if SECRET.search(line): + raise ValueError(f"Unredacted token pattern in {relative}:{line_number}") + if path.suffix == ".log" and DIAGNOSTIC.search(line): + # Keep the readable index within GitHub's per-file diff budget; + # original, unabridged lines remain in the archived logs. + diagnostics.append({"path": relative, "line": line_number, "text": line[:500]}) + (directory / "manifest.json").write_text(json.dumps(files, indent=2) + "\n", encoding="utf-8") + (directory / "diagnostic-index.json").write_text( + json.dumps(diagnostics, indent=2) + "\n", encoding="utf-8" + ) + print(f"Indexed {len(files)} files ({sum(item['bytes'] for item in files):,} bytes)") + print(f"Preserved {len(diagnostics)} diagnostic matches with original paths and line numbers") + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("directory", type=Path) + index(parser.parse_args().directory) diff --git a/experiments/ci/package_evidence.py b/experiments/ci/package_evidence.py new file mode 100644 index 0000000..56bef51 --- /dev/null +++ b/experiments/ci/package_evidence.py @@ -0,0 +1,77 @@ +"""Package and verify raw evidence while keeping GitHub PR diffs reviewable.""" + +import argparse +import gzip +import hashlib +import json +import tarfile +from pathlib import Path + +DIRECTORIES = ("ci-logs", "github", "research", "templates", "validation") +ARCHIVE = "raw-evidence.tar.gz" + + +def package(directory): + missing = [name for name in DIRECTORIES if not (directory / name).is_dir()] + if missing: + raise FileNotFoundError(f"Extract {ARCHIVE} before packaging; missing directories: {missing}") + target = directory / ARCHIVE + count = 0 + with target.open("wb") as destination: + with gzip.GzipFile(filename="", fileobj=destination, mode="wb", mtime=0) as compressed: + with tarfile.open(fileobj=compressed, mode="w") as archive: + for name in DIRECTORIES: + for path in sorted((directory / name).rglob("*")): + if path.is_symlink(): + raise ValueError(f"Evidence must not contain symbolic links: {path}") + if not path.is_file(): + continue + info = archive.gettarinfo(str(path), arcname=path.relative_to(directory).as_posix()) + info.uid = info.gid = info.mtime = 0 + info.uname = info.gname = "" + with path.open("rb") as source: + archive.addfile(info, source) + count += 1 + print(f"Packaged {count} raw files in {target} ({target.stat().st_size:,} bytes)") + + +def verify_member(archive, member, record): + if member.size != record["bytes"]: + raise ValueError(f"Evidence size mismatch: {member.name}") + digest = hashlib.sha256() + source = archive.extractfile(member) + if source is None: + raise ValueError(f"Unreadable evidence member: {member.name}") + with source: + while block := source.read(65536): + digest.update(block) + if digest.hexdigest() != record["sha256"]: + raise ValueError(f"Evidence hash mismatch: {member.name}") + + +def verify(directory): + records = json.loads((directory / "manifest.json").read_text()) + expected = { + record["path"]: record for record in records if record["path"].split("/", 1)[0] in DIRECTORIES + } + seen = set() + with tarfile.open(directory / ARCHIVE, mode="r:gz") as archive: + for member in archive: + if member.name not in expected or member.name in seen or not member.isfile(): + raise ValueError(f"Unexpected evidence member: {member.name}") + verify_member(archive, member, expected[member.name]) + seen.add(member.name) + if seen != set(expected): + raise ValueError(f"Missing evidence members: {sorted(set(expected) - seen)}") + print(f"Verified all {len(seen)} archived files against their original SHA-256 hashes") + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("directory", type=Path) + parser.add_argument("--verify", action="store_true") + options = parser.parse_args() + if options.verify: + verify(options.directory) + else: + package(options.directory) diff --git a/experiments/ci/run_smoke.py b/experiments/ci/run_smoke.py new file mode 100644 index 0000000..29394b0 --- /dev/null +++ b/experiments/ci/run_smoke.py @@ -0,0 +1,58 @@ +"""Run all eight small benchmark cells and validate their real JSON artifacts.""" + +import json +import subprocess # nosec B404 # only local benchmark binaries and fixed Git queries run, without a shell. +import sys +import tempfile +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[2] +sys.path.insert(0, str(ROOT / "scripts")) +import benchmark_ci as ci # noqa: E402 +from ci_process import executable # noqa: E402 + +OUT = ROOT / "dev/log/issues/110/pulls/111/validation/smoke-results" + + +def main(): + OUT.mkdir(parents=True, exist_ok=True) + revision = subprocess.run( # nosec B603 # resolved Git executable and fixed read-only arguments. + [executable("git"), "rev-parse", "HEAD"], cwd=ROOT, text=True, capture_output=True, check=True + ) + sha = revision.stdout.strip() + for row in ci.matrix([1000]): + binary = ( + [str(ROOT / "rust/target/release/sqlite-vs-doublets")] + if row["language"] == "rust" + else [ + executable("dotnet"), + str(ROOT / "csharp/SQLiteVSDoublets/bin/Release/net10.0/sqlite-vs-doublets.dll"), + ] + ) + output = OUT / ci.filename(row) + with tempfile.TemporaryDirectory(prefix="benchmark-smoke-") as directory: + print(f"Running {output.name}", flush=True) + subprocess.run( # nosec B603 # bounded matrix values and generated temporary paths, no shell. + [ + *binary, + row["category"], + str(row["bits"]), + str(row["size"]), + "--repetitions", + "1", + "--directory", + directory, + "--output", + str(output), + ], + cwd=ROOT, + check=True, + ) + data = json.loads(output.read_text()) + data.update(source_sha=sha, machine="local bounded smoke test", date="2026-10-05") + output.write_text(json.dumps(data, indent=2) + "\n") + ci.verify(OUT, [1000], sha, verbose=True) + + +if __name__ == "__main__": + main() diff --git a/experiments/ci/test_package_evidence.py b/experiments/ci/test_package_evidence.py new file mode 100644 index 0000000..d89d709 --- /dev/null +++ b/experiments/ci/test_package_evidence.py @@ -0,0 +1,70 @@ +"""Ensure packaging preserves original bytes and detects incomplete evidence.""" + +import contextlib +import io +import tarfile +import tempfile +import unittest +from pathlib import Path + +from index_evidence import index +from package_evidence import ARCHIVE, DIRECTORIES, package, verify + + +class EvidencePackageTests(unittest.TestCase): + def setUp(self): + self.temporary = tempfile.TemporaryDirectory() + self.root = Path(self.temporary.name) + for name in DIRECTORIES: + (self.root / name).mkdir() + (self.root / "ci-logs/result.log").write_bytes(b"\x00\xffsample\n") + (self.root / "github/issue.json").write_text('{"issue": 110}\n') + with contextlib.redirect_stdout(io.StringIO()): + package(self.root) + index(self.root) + + def tearDown(self): + self.temporary.cleanup() + + def replace_archive(self, members): + with tarfile.open(self.root / ARCHIVE, "w:gz") as archive: + for name, content in members: + member = tarfile.TarInfo(name) + member.size = len(content) + archive.addfile(member, io.BytesIO(content)) + + def test_binary_and_text_evidence_round_trip(self): + with contextlib.redirect_stdout(io.StringIO()): + verify(self.root) + + def test_unextracted_directory_preserves_existing_archive(self): + before = (self.root / ARCHIVE).read_bytes() + (self.root / "templates").rmdir() + with self.assertRaisesRegex(FileNotFoundError, "Extract"): + package(self.root) + self.assertEqual((self.root / ARCHIVE).read_bytes(), before) + + def test_changed_bytes_fail_even_with_original_size(self): + self.replace_archive([("ci-logs/result.log", b"\x00\xffSample\n")]) + with self.assertRaisesRegex(ValueError, "hash mismatch"): + verify(self.root) + + def test_missing_members_fail(self): + self.replace_archive([]) + with self.assertRaisesRegex(ValueError, "Missing evidence members"): + verify(self.root) + + def test_unexpected_members_fail(self): + self.replace_archive([("other.log", b"unexpected")]) + with self.assertRaisesRegex(ValueError, "Unexpected evidence member"): + verify(self.root) + + def test_duplicate_members_fail(self): + member = ("ci-logs/result.log", b"\x00\xffsample\n") + self.replace_archive([member, member]) + with self.assertRaisesRegex(ValueError, "Unexpected evidence member"): + verify(self.root) + + +if __name__ == "__main__": + unittest.main() diff --git a/experiments/split_store_delete/src/main.rs b/experiments/split_store_delete/src/main.rs index d440380..dc45266 100644 --- a/experiments/split_store_delete/src/main.rs +++ b/experiments/split_store_delete/src/main.rs @@ -25,15 +25,35 @@ fn run>(mut store: D, steps: &[Step]) -> u32 { fn main() { let scenarios: [(&str, Vec); 6] = [ - ("point: update to itself, delete", vec![("create", 1, 1, 1), ("update", 1, 1, 1), ("delete", 1, 0, 0)]), - ("point: delete", vec![("create", 1, 1, 1), ("delete", 1, 0, 0)]), + ( + "point: update to itself, delete", + vec![ + ("create", 1, 1, 1), + ("update", 1, 1, 1), + ("delete", 1, 0, 0), + ], + ), + ( + "point: delete", + vec![("create", 1, 1, 1), ("delete", 1, 0, 0)], + ), ( "swap a link that references itself, delete", - vec![("create", 1, 1, 1), ("create", 2, 1, 2), ("update", 2, 2, 1), ("delete", 2, 0, 0), ("delete", 1, 0, 0)], + vec![ + ("create", 1, 1, 1), + ("create", 2, 1, 2), + ("update", 2, 2, 1), + ("delete", 2, 0, 0), + ("delete", 1, 0, 0), + ], ), ( "swap a link that references itself, no delete", - vec![("create", 1, 1, 1), ("create", 2, 1, 2), ("update", 2, 2, 1)], + vec![ + ("create", 1, 1, 1), + ("create", 2, 1, 2), + ("update", 2, 2, 1), + ], ), ( "swap links without self references, delete", @@ -51,7 +71,14 @@ fn main() { ), ( "create a link that references itself, delete", - vec![("create", 1, 1, 1), ("create", 2, 1, 2), ("create", 3, 3, 1), ("delete", 2, 0, 0), ("delete", 3, 0, 0), ("delete", 1, 0, 0)], + vec![ + ("create", 1, 1, 1), + ("create", 2, 1, 2), + ("create", 3, 3, 1), + ("delete", 2, 0, 0), + ("delete", 3, 0, 0), + ("delete", 1, 0, 0), + ], ), ]; let kind = std::env::args().nth(1).unwrap_or_default(); @@ -70,12 +97,20 @@ fn main() { } eprintln!("after {operation} {id} {from} {to}:"); for link in 1..=3 { - eprintln!(" {link}: {:?} {:?} unused={}", store.get_data_part(link), store.get_index_part(link), store.is_unused(link)); + eprintln!( + " {link}: {:?} {:?} unused={}", + store.get_data_part(link), + store.get_index_part(link), + store.is_unused(link) + ); } } store.count() } - _ => run(split::Store::::new(Global::new(), Global::new()).unwrap(), steps), + _ => run( + split::Store::::new(Global::new(), Global::new()).unwrap(), + steps, + ), }; println!("ok, count = {count}"); } diff --git a/experiments/system_data_sqlite/check_reports.py b/experiments/system_data_sqlite/check_reports.py index b562297..52926be 100644 --- a/experiments/system_data_sqlite/check_reports.py +++ b/experiments/system_data_sqlite/check_reports.py @@ -3,6 +3,7 @@ import json import shutil + # Only this repository's fixed benchmark command is executed. import subprocess # nosec B404 import tempfile @@ -13,7 +14,16 @@ BENCHMARK = ROOT / "csharp/SQLiteVSDoublets/bin/Release/net10.0/sqlite-vs-doublets.dll" VARIANTS = ("SQLite_Memory", "SQLite_File", "SystemDataSQLite_Memory", "SystemDataSQLite_File") OPERATIONS = { - "links": {"create", "query_all", "query_by_id", "query_by_from_to", "query_by_from", "query_by_to", "update", "delete"}, + "links": { + "create", + "query_all", + "query_by_id", + "query_by_from_to", + "query_by_from", + "query_by_to", + "update", + "delete", + }, "objects": {"create", "read_all", "read_by_id", "delete"}, } @@ -31,25 +41,54 @@ def test_reports(self): with self.subTest(category=category, bits=bits): output = Path(directory) / f"{category}-{bits}.json" # Arguments are constants and owned temporary paths; no shell is used. - subprocess.run([ # nosec B603 - dotnet, str(BENCHMARK), category, str(bits), "1000", - "--repetitions", "3", "--variants", ",".join(VARIANTS), - "--directory", directory, "--output", str(output), - ], check=True) + subprocess.run( + [ # nosec B603 + dotnet, + str(BENCHMARK), + category, + str(bits), + "1000", + "--repetitions", + "3", + "--variants", + ",".join(VARIANTS), + "--directory", + directory, + "--output", + str(output), + ], + check=True, + ) report = json.loads(output.read_text(encoding="utf-8")) self.assertEqual( - (report["language"], report["category"], report["bits"], report["size"], report["repetitions"]), + ( + report["language"], + report["category"], + report["bits"], + report["size"], + report["repetitions"], + ), ("C#", category, bits, 1000, 3), ) providers = report["sqlite_providers"] self.assertEqual(set(providers), {"Microsoft.Data.Sqlite", "System.Data.SQLite"}) self.assertTrue(all(provider["provider_version"] for provider in providers.values())) - self.assertEqual({provider["sqlite_version"] for provider in providers.values()}, {report["sqlite_version"]}) + self.assertEqual( + {provider["sqlite_version"] for provider in providers.values()}, + {report["sqlite_version"]}, + ) self.assertEqual([result["variant"] for result in report["results"]], list(VARIANTS)) for result in report["results"]: self.assertEqual(set(result["operations"]), operations) - self.assertTrue(all(len(operation["samples_ns"]) == 3 for operation in result["operations"].values())) - self.assertEqual(result["file_bytes"] is None, result["variant"].endswith("_Memory")) + self.assertTrue( + all( + len(operation["samples_ns"]) == 3 + for operation in result["operations"].values() + ) + ) + self.assertEqual( + result["file_bytes"] is None, result["variant"].endswith("_Memory") + ) if result["file_bytes"] is not None: self.assertGreater(result["file_bytes"], 0) diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..0d46e10 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,12 @@ +[tool.ruff] +target-version = "py313" +line-length = 110 +include = ["scripts/**/*.py", "experiments/**/*.py"] + +[tool.ruff.lint] +select = ["E4", "E7", "E9", "F", "I", "B", "UP"] + +[tool.mypy] +files = ["scripts"] +check_untyped_defs = true +ignore_missing_imports = true diff --git a/scripts/audit_dotnet.py b/scripts/audit_dotnet.py new file mode 100644 index 0000000..655cb1f --- /dev/null +++ b/scripts/audit_dotnet.py @@ -0,0 +1,64 @@ +"""Fail CI on direct or transitive NuGet vulnerabilities (dotnet itself exits zero).""" + +import json +import subprocess # nosec B404 # all calls use a resolved tool and argument lists without a shell. +from pathlib import Path + +from ci_process import executable + + +def vulnerabilities(report): + if report.get("errors") or not report.get("projects"): + raise ValueError("NuGet audit did not produce a complete project report") + found = [] + for project in report["projects"]: + for framework in project.get("frameworks", []): + for group in ("topLevelPackages", "transitivePackages"): + for package in framework.get(group, []): + for advisory in package.get("vulnerabilities", []): + found.append( + (project["path"], package["id"], advisory["severity"], advisory["advisoryurl"]) + ) + return found + + +def main(): + root = Path(__file__).resolve().parents[1] + projects = sorted( + path + for directory in ("csharp", "experiments") + for path in (root / directory).rglob("*.csproj") + if not any(part in ("bin", "obj") for part in path.parts) + ) + if not projects: + raise SystemExit("No NuGet projects found") + findings = [] + for project in projects: + subprocess.run( # nosec B603 # tracked project paths are separate arguments to the fixed restore command. + [executable("dotnet"), "restore", str(project), "-warnaserror"], check=True + ) + result = subprocess.run( # nosec B603 # fixed audit options and a tracked project path; no shell. + [ + executable("dotnet"), + "list", + str(project), + "package", + "--vulnerable", + "--include-transitive", + "--format", + "json", + ], + capture_output=True, + text=True, + check=True, + ) + print(result.stdout) + findings.extend(vulnerabilities(json.loads(result.stdout))) + for path, package, severity, url in findings: + print(f"{path}: {package}: {severity}: {url}") + if findings: + raise SystemExit("NuGet dependency audit failed") + + +if __name__ == "__main__": + main() diff --git a/scripts/benchmark_ci.py b/scripts/benchmark_ci.py new file mode 100644 index 0000000..da086b2 --- /dev/null +++ b/scripts/benchmark_ci.py @@ -0,0 +1,109 @@ +"""Plan bounded benchmark jobs and verify all artifacts before publication.""" + +import argparse +import itertools +import json +import sys +from pathlib import Path + +import benchmark_report + +VARIANTS = { + "links": {"SQLite_Memory", "SQLite_File"} + | { + f"Doublets_{layout}_{durability}" + for layout, durability in itertools.product(("United", "Split"), ("Volatile", "NonVolatile")) + }, + "objects": {"SQLite_Memory", "SQLite_File"} + | { + f"Doublets_{layout}_{durability}_{cache}" + for layout, durability, cache in itertools.product( + ("United", "Split"), ("Volatile", "NonVolatile"), ("Cached", "Uncached") + ) + }, +} + + +def expected_variants(category, language): + """C# also benchmarks the System.Data.SQLite provider introduced on main.""" + variants = VARIANTS[category] + if language in ("C#", "csharp"): + variants = variants | {"SystemDataSQLite_Memory", "SystemDataSQLite_File"} + return variants + + +def matrix(sizes): + if not isinstance(sizes, list) or not 1 <= len(sizes) <= 32: + raise ValueError("sizes must contain between 1 and 32 integers (at most 256 jobs)") + if any( + not isinstance(size, int) or isinstance(size, bool) or not 1 <= size <= 10000000 for size in sizes + ): + raise ValueError("sizes must be integers between 1 and 10,000,000") + if len(sizes) != len(set(sizes)): + raise ValueError("sizes must be unique") + return [ + dict(language=language, category=category, bits=bits, size=size) + for language, category, bits, size in itertools.product( + ("rust", "csharp"), ("links", "objects"), (32, 64), sizes + ) + if category != "objects" or size <= 1000000 + ] + + +def filename(row): + return f"{row['category']}-{row['language']}-{row['bits']}-{row['size']}.json" + + +def verify(directory, sizes, sha, verbose=False, tree=None): + rows = matrix(sizes) + expected = {filename(row) for row in rows} + actual = {path.name for path in directory.glob("*.json")} + if expected - actual: + raise ValueError(f"Missing benchmark artifacts: {sorted(expected - actual)}") + if actual - expected: + raise ValueError(f"Unexpected benchmark artifacts: {sorted(actual - expected)}") + benchmark_report.load(directory) + for row in rows: + path = directory / filename(row) + data = json.loads(path.read_text(encoding="utf-8")) + if data.get("source_sha") != sha: + raise ValueError(f"{path}: source_sha does not match measured commit {sha}") + if tree is not None and data.get("tree_sha") != tree: + raise ValueError(f"{path}: tree_sha differs from the validated merge tree {tree}") + identity = (data["category"], data["language"], data["bits"], data["size"]) + expected_identity = ( + row["category"], + "Rust" if row["language"] == "rust" else "C#", + row["bits"], + row["size"], + ) + if identity != expected_identity: + raise ValueError(f"{path}: table identity {identity} differs from {expected_identity}") + variants = {result["variant"] for result in data["results"]} + if variants != expected_variants(row["category"], row["language"]): + raise ValueError(f"{path}: storage variants differ from the complete benchmark plan") + if verbose: + print(f"Verified {path.name} from {sha}", file=sys.stderr) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("command", choices=("matrix", "verify")) + parser.add_argument("--sizes", required=True, help="JSON array of benchmark sizes") + parser.add_argument("--directory", type=Path) + parser.add_argument("--sha") + parser.add_argument("--tree") + parser.add_argument("--verbose", action="store_true") + args = parser.parse_args() + sizes = json.loads(args.sizes) + if args.command == "matrix": + print(json.dumps({"include": matrix(sizes)}, separators=(",", ":"))) + else: + if args.directory is None or not args.sha: + parser.error("verify requires --directory and --sha") + verify(args.directory, sizes, args.sha, args.verbose, args.tree) + print(f"Verified all {len(matrix(sizes))} benchmark artifacts") + + +if __name__ == "__main__": + main() diff --git a/scripts/benchmark_report.py b/scripts/benchmark_report.py index 7bdc188..3f0cfe5 100644 --- a/scripts/benchmark_report.py +++ b/scripts/benchmark_report.py @@ -10,9 +10,11 @@ import argparse import json +import math import re import statistics from pathlib import Path +from typing import Any START_MARKER = "" END_MARKER = "" @@ -46,7 +48,7 @@ def russian_plural(count, one, few, many): return few if 2 <= count % 10 <= 4 and not 12 <= count % 100 <= 14 else many -TEXT = { +TEXT: dict[str, dict[str, Any]] = { "en": { "category": { "links": "Doublets vs SQLite as storage for links", @@ -123,13 +125,68 @@ def load(directory): reports = {} for path in sorted(Path(directory).glob("*.json")): report = json.loads(path.read_text(encoding="utf-8")) + validate(report, path) key = (report["category"], report["language"], report["bits"], report["size"]) if key in reports: raise ValueError(f"{path} duplicates the results of {key}") reports[key] = report + if not reports: + raise ValueError(f"No benchmark reports found in {directory}") return reports +def validate(report, path): + """Reject incomplete measurements before publishing tables or charts.""" + try: + validate_metadata(report) + validate_variants(report["results"]) + for result in report["results"]: + if set(result["operations"]) != set(OPERATIONS[report["category"]]): + raise ValueError("missing or unexpected operations") + for measurement in result["operations"].values(): + validate_measurement(measurement) + except (KeyError, TypeError, ValueError) as error: + raise ValueError(f"Invalid benchmark report {path}: {error}") from error + + +def validate_metadata(report): + if report["category"] not in CATEGORIES or report["language"] not in LANGUAGES: + raise ValueError("unknown category or language") + if report["bits"] not in BITS or not positive_integer(report["size"]): + raise ValueError("invalid bits or size") + if not positive_integer(report["repetitions"]): + raise ValueError("invalid repetitions") + if not report["sqlite_version"]: + raise ValueError("missing SQLite version") + + +def validate_variants(results): + variants = [result["variant"] for result in results] + if len(variants) != len(set(variants)): + raise ValueError("duplicate variants") + if not {"SQLite_Memory", "SQLite_File"}.issubset(variants): + raise ValueError("missing SQLite baseline") + + +def positive_integer(value): + return isinstance(value, int) and not isinstance(value, bool) and value > 0 + + +def validate_measurement(measurement): + values = [measurement[key] for key in ("median_ns", "min_ns", "max_ns")] + values += measurement["samples_ns"] + if not measurement["samples_ns"] or any( + not isinstance(value, (int, float)) + or isinstance(value, bool) + or not math.isfinite(value) + or value <= 0 + for value in values + ): + raise ValueError("measurements must be finite and positive") + if not measurement["min_ns"] <= measurement["median_ns"] <= measurement["max_ns"]: + raise ValueError("median must be between min and max") + + def baseline(variant): """Compare with Microsoft.Data.Sqlite of the same durability, including the System.Data.SQLite provider.""" if variant.startswith("SQLite"): @@ -175,7 +232,9 @@ def comparison(measured, reference, text): # are not called a difference. (low, high), (reference_low, reference_high) = quartiles(measured), quartiles(reference) overlapping = low <= reference_high and reference_low <= high - ratio = max(measured["median_ns"], reference["median_ns"]) / min(measured["median_ns"], reference["median_ns"]) + ratio = max(measured["median_ns"], reference["median_ns"]) / min( + measured["median_ns"], reference["median_ns"] + ) if overlapping or ratio < 1 + NOISE: return text["same"] if measured["median_ns"] <= reference["median_ns"]: @@ -186,7 +245,11 @@ def comparison(measured, reference, text): def table(report, text): operations = OPERATIONS[report["category"]] by_variant = {result["variant"]: result for result in report["results"]} - header = [text["storage"], *(text["operations"][operation] for operation in operations), text["file_size"]] + header = [ + text["storage"], + *(text["operations"][operation] for operation in operations), + text["file_size"], + ] lines = ["| " + " | ".join(header) + " |", "| --- |" + " ---: |" * (len(header) - 1)] for variant, result in by_variant.items(): reference = by_variant.get(baseline(variant)) @@ -242,7 +305,9 @@ def section(reports, language_code, charts_link): ] if charts_link is not None: name = chart_name(category, language, bits) - title = text["chart"].format(language=language, bits=bits, category=text["nouns"][category]) + title = text["chart"].format( + language=language, bits=bits, category=text["nouns"][category] + ) lines += [f"![{title}]({charts_link}/{name})", ""] return "\n".join(lines).rstrip() + "\n" @@ -274,7 +339,7 @@ def charts(reports, directory): figure, axes = plt.subplots( 1, len(sizes), figsize=(6 * len(sizes), 5), squeeze=False, sharey=False ) - for axis, count in zip(axes[0], sizes): + for axis, count in zip(axes[0], sizes, strict=True): results = reports[(category, language, bits, count)]["results"] width = 0.8 / len(results) for index, result in enumerate(results): @@ -312,7 +377,11 @@ def main(arguments=None): charts(reports, options.charts) for readme in options.readme: language_code = "ru" if readme.name.endswith(".ru.md") else "en" - link = None if options.charts is None else options.charts.resolve().relative_to(readme.resolve().parent).as_posix() + link = ( + None + if options.charts is None + else options.charts.resolve().relative_to(readme.resolve().parent).as_posix() + ) document = readme.read_text(encoding="utf-8") readme.write_text(replace_section(document, section(reports, language_code, link)), encoding="utf-8") if not options.readme: diff --git a/scripts/check_pipeline_status.py b/scripts/check_pipeline_status.py new file mode 100644 index 0000000..85c07c4 --- /dev/null +++ b/scripts/check_pipeline_status.py @@ -0,0 +1,54 @@ +"""Make failed jobs and unexpected timeouts visible in the terminal status check.""" + +import json +import os +import subprocess # nosec B404 # only a fixed git query is executed, without a shell. +from pathlib import Path + +from ci_process import executable +from workflow_yaml import load_workflow + + +def failures(needs, workflow, superseded=False): + if not needs: + raise ValueError("Empty pipeline status") + failed = [] + for name, details in needs.items(): + result = details.get("result", "unknown") + if result in ("success", "skipped"): + continue + policy = ( + workflow.get("jobs", {}) + .get(name, {}) + .get("concurrency", workflow.get("concurrency", {})) + .get("cancel-in-progress") + ) + if result == "cancelled" and superseded and str(policy).lower() == "true": + print(f"{name}: superseded reader cancelled as configured") + continue + failed.append(f"{name}: {result}") + return failed + + +def main(): + needs = json.loads(os.environ["NEEDS_JSON"]) + workflow = load_workflow(Path(os.environ["WORKFLOW_FILE"]).read_text()) + superseded = False + if any(details.get("result") == "cancelled" for details in needs.values()): + # GitHub's ref is a separate argument to this fixed read-only query; no shell. + query = subprocess.run( # nosec B603 # resolved Git executable, fixed query and separate ref argument. + [executable("git"), "ls-remote", "origin", os.environ["RUN_REF"]], + capture_output=True, + text=True, + check=True, + ) + remote = query.stdout.split() + superseded = bool(remote and remote[0] != os.environ["RUN_SHA"]) + errors = failures(needs, workflow, superseded) + if errors: + raise SystemExit("Pipeline failed: " + "; ".join(errors)) + print("Pipeline passed") + + +if __name__ == "__main__": + main() diff --git a/scripts/ci_checks.py b/scripts/ci_checks.py new file mode 100644 index 0000000..5af8607 --- /dev/null +++ b/scripts/ci_checks.py @@ -0,0 +1,102 @@ +"""Check repository CI invariants and local documentation links.""" + +import re +from pathlib import Path + +from workflow_yaml import load_workflow + +ROOT = Path(__file__).resolve().parents[1] +WRITER_GROUP = "main-writer-${{ github.repository }}-main" +DOCUMENT_SECTIONS = { + "README.md": ( + "## Benchmarks", + "## Original comparison", + "", + "", + ), + "README.ru.md": ( + "## Тесты производительности", + "## Исходное сравнение", + "", + "", + ), + "CONTRIBUTING.md": ("## Local checks", "## Dependencies and diagnostics"), + "cpp/README.md": ("# C++ placeholder",), +} + + +def workflow_errors(workflow): + errors = [] + if workflow.get("permissions") != {"contents": "read"}: + errors.append("workflow must default to contents: read") + for name, job in workflow.get("jobs", {}).items(): + if not job.get("timeout-minutes"): + errors.append(f"{name}: missing job timeout") + matrix = job.get("strategy", {}).get("matrix", {}) + runners = [job.get("runs-on", "")] + (matrix.get("os", []) if isinstance(matrix, dict) else []) + if any("latest" in runner for runner in runners): + errors.append(f"{name}: mutable runner label") + if str(job.get("continue-on-error")).lower() == "true": + errors.append(f"{name}: continue-on-error hides failed checks") + writes = "write" in job.get("permissions", {}).values() + if writes: + concurrency = job.get("concurrency", {}) + if ( + concurrency.get("group") != WRITER_GROUP + or str(concurrency.get("cancel-in-progress")).lower() != "false" + ): + errors.append(f"{name}: writer must serialize without cancellation") + if "concurrency" in workflow: + errors.append(f"{name}: workflow concurrency can cancel a writer") + if "pull_request_target" in workflow.get("on", {}): + if any("checkout@" in step.get("uses", "") for step in job.get("steps", [])): + errors.append(f"{name}: privileged pull_request_target must not check out code") + return errors + + +def local_link_errors(document, root=ROOT): + errors = [] + for link in re.findall(r"!?\[[^\]]*\]\(([^\s)]+)(?:\s+[^)]*)?\)", document.read_text(encoding="utf-8")): + if re.match(r"\w+://|mailto:|#", link): + continue + target = link.split("#", 1)[0].split("?", 1)[0] + if target and not (document.parent / target).exists(): + errors.append(f"{document.relative_to(root)}: missing local link {target}") + return errors + + +def main(): + errors = [] + for path in sorted((ROOT / ".github/workflows").glob("*.yml")): + workflow = load_workflow(path.read_text(encoding="utf-8")) + errors += [f"{path.name}: {error}" for error in workflow_errors(workflow)] + if (ROOT / ".github/workflows/cpp.yml").exists() and not (ROOT / "cpp/CMakeLists.txt").exists(): + errors.append("C++ build workflow has no CMake project") + for directory in ("scripts", "rust/src", "rust/tests", "csharp", "experiments"): + for path in (ROOT / directory).rglob("*"): + if path.suffix not in (".py", ".rs", ".cs", ".sh") or any( + part in ("bin", "obj", "target") for part in path.parts + ): + continue + lines = len(path.read_text(encoding="utf-8").splitlines()) + if lines > 1500: + errors.append(f"{path.relative_to(ROOT)}: {lines} lines exceeds 1500") + for name, sections in DOCUMENT_SECTIONS.items(): + path = ROOT / name + if not path.is_file(): + errors.append(f"Missing required document: {name}") + continue + errors += local_link_errors(path) + content = path.read_text(encoding="utf-8") + errors += [ + f"{name}: missing required section {section}" for section in sections if section not in content + ] + if len(path.read_text(encoding="utf-8").splitlines()) > 2500: + errors.append(f"{name}: exceeds 2500 lines") + if errors: + raise SystemExit("\n".join(errors)) + print("Workflow policies, source line limits, and local documentation links passed") + + +if __name__ == "__main__": + main() diff --git a/scripts/ci_process.py b/scripts/ci_process.py new file mode 100644 index 0000000..d200ed5 --- /dev/null +++ b/scripts/ci_process.py @@ -0,0 +1,11 @@ +"""Resolve trusted CI tools to absolute paths before invoking argument lists.""" + +import shutil +from pathlib import Path + + +def executable(name: str) -> str: + path = shutil.which(name) + if path is None: + raise FileNotFoundError(f"Required CI executable not found: {name}") + return str(Path(path).absolute()) diff --git a/scripts/publish_benchmarks.py b/scripts/publish_benchmarks.py new file mode 100644 index 0000000..2583821 --- /dev/null +++ b/scripts/publish_benchmarks.py @@ -0,0 +1,116 @@ +"""Publish validated benchmark results, recomputing documents after a lost race.""" + +import argparse +import json +import shutil +import subprocess # nosec B404 # resolved CI tools use argument lists; no subprocess enables a shell. +import tempfile +from pathlib import Path + +import benchmark_ci +import benchmark_report +from ci_process import executable + + +def is_race(message): + blocked = ("GH006", "GH013", "protected branch", "rule violations", "pre-receive hook declined") + return not any(item in message for item in blocked) and any( + item in message for item in ("non-fast-forward", "fetch first") + ) + + +def git(*args, cwd=None, check=True): + # Callers supply fixed Git operations and separately validated artifact/CI metadata. + result = subprocess.run( # nosec B603 # argument-list invocation, no shell or command from PR data. + [executable("git"), *args], cwd=cwd, capture_output=True, text=True, check=False + ) + if result.returncode and check: + raise RuntimeError(f"git {args[0]} failed:\n{result.stdout}{result.stderr}") + return result + + +def publish(directory, sizes, sha, branch="main", verbose=False): + benchmark_ci.verify(directory, sizes, sha, verbose) + root = Path(git("rev-parse", "--show-toplevel").stdout.strip()) + for attempt in range(1, 4): + git("fetch", "origin", branch, cwd=root) + # New source must be measured before its documentation is replaced. + changed = git( + "diff", + "--name-only", + sha, + f"origin/{branch}", + "--", + "rust", + "csharp", + "scripts", + ".github/workflows/benchmarks.yml", + cwd=root, + ).stdout.strip() + if changed: + raise RuntimeError(f"Benchmark source changed since {sha}; rerun benchmarks:\n{changed}") + with tempfile.TemporaryDirectory(prefix="benchmark-publish-") as temporary: + worktree = Path(temporary) / "report" + git("worktree", "add", "--detach", str(worktree), f"origin/{branch}", cwd=root) + try: + results = worktree / "docs/benchmarks/results" + results.mkdir(parents=True, exist_ok=True) + for path in directory.glob("*.json"): + shutil.copy2(path, results / path.name) + reports = benchmark_report.load(results) + benchmark_report.charts(reports, worktree / "docs/benchmarks") + for name in ("README.md", "README.ru.md"): + readme = worktree / name + text = benchmark_report.section( + reports, "ru" if ".ru." in name else "en", "docs/benchmarks" + ) + readme.write_text( + benchmark_report.replace_section(readme.read_text(encoding="utf-8"), text), + encoding="utf-8", + ) + subprocess.run( # nosec B603 # fixed versioned Markdown tool and document names, no shell. + [executable("npx"), "--yes", "markdownlint-cli@0.49.1", "README.md", "README.ru.md"], + cwd=worktree, + check=True, + ) + git("add", "README.md", "README.ru.md", "docs/benchmarks", cwd=worktree) + if git("diff", "--staged", "--quiet", cwd=worktree, check=False).returncode == 0: + print("Benchmark report is already current") + return + git( + "-c", + "user.email=linksplatform@gmail.com", + "-c", + "user.name=LinksPlatformBencher", + "commit", + "-m", + "Update benchmark results [skip ci]", + cwd=worktree, + ) + pushed = git("push", "origin", f"HEAD:{branch}", cwd=worktree, check=False) + message = pushed.stdout + pushed.stderr + if pushed.returncode == 0: + print(f"Published benchmark report on attempt {attempt}") + return + if not is_race(message) or attempt == 3: + raise RuntimeError(f"Benchmark publication failed:\n{message}") + print(f"Publication lost a branch race on attempt {attempt}; fetching and regenerating") + if verbose: + print(message) + finally: + git("worktree", "remove", "--force", str(worktree), cwd=root) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("directory", type=Path) + parser.add_argument("--sizes", required=True) + parser.add_argument("--sha", required=True) + parser.add_argument("--branch", default="main") + parser.add_argument("--verbose", action="store_true") + args = parser.parse_args() + publish(args.directory.resolve(), json.loads(args.sizes), args.sha, args.branch, args.verbose) + + +if __name__ == "__main__": + main() diff --git a/scripts/requirements-ci.txt b/scripts/requirements-ci.txt new file mode 100644 index 0000000..59e937b --- /dev/null +++ b/scripts/requirements-ci.txt @@ -0,0 +1,7 @@ +ruff==0.16.10 +mypy==2.4.0 +PyYAML==6.0.3 +types-PyYAML==6.0.12.20250915 +pip-audit==2.10.1 +zizmor==1.30.1 +bandit==1.9.4 diff --git a/scripts/test_audit_dotnet.py b/scripts/test_audit_dotnet.py new file mode 100644 index 0000000..514dc4f --- /dev/null +++ b/scripts/test_audit_dotnet.py @@ -0,0 +1,42 @@ +"""NuGet's successful process exit is not proof of a clean dependency graph.""" + +import unittest + +from audit_dotnet import vulnerabilities + + +class AuditTests(unittest.TestCase): + def test_transitive_advisories_fail_the_audit(self): + report = { + "projects": [ + { + "path": "tests.csproj", + "frameworks": [ + { + "transitivePackages": [ + { + "id": "Vulnerable.Package", + "vulnerabilities": [ + {"severity": "High", "advisoryurl": "https://example.org/advisory"} + ], + } + ] + } + ], + } + ] + } + self.assertEqual(vulnerabilities(report)[0][1], "Vulnerable.Package") + + def test_clean_graph_is_accepted(self): + self.assertEqual(vulnerabilities({"projects": [{"path": "app.csproj", "frameworks": []}]}), []) + + def test_incomplete_audit_is_rejected(self): + reports: list[dict] = [{}, {"projects": []}, {"errors": ["offline"], "projects": [{}]}] + for report in reports: + with self.subTest(report=report), self.assertRaises(ValueError): + vulnerabilities(report) + + +if __name__ == "__main__": + unittest.main() diff --git a/scripts/test_benchmark_ci.py b/scripts/test_benchmark_ci.py new file mode 100644 index 0000000..09df74c --- /dev/null +++ b/scripts/test_benchmark_ci.py @@ -0,0 +1,109 @@ +"""Regression tests for complete, current-run benchmark artifacts.""" + +import copy +import json +import tempfile +import unittest +from pathlib import Path + +import benchmark_ci as ci +from test_benchmark_report import sample + + +def complete_sample(category, language, bits, size, **extra): + data = sample(category, language, bits, size, **extra) + measured = data["results"][0] + data["results"] = [ + dict(copy.deepcopy(measured), variant=variant) + for variant in sorted(ci.expected_variants(category, language)) + ] + return data + + +class ArtifactTests(unittest.TestCase): + def setUp(self): + temporary = tempfile.TemporaryDirectory() + self.addCleanup(temporary.cleanup) + self.root = Path(temporary.name) + self.sha = "a" * 40 + for row in ci.matrix([1000]): + data = complete_sample( + row["category"], + "Rust" if row["language"] == "rust" else "C#", + row["bits"], + 1000, + source_sha=self.sha, + ) + (self.root / ci.filename(row)).write_text(json.dumps(data), encoding="utf-8") + + def test_complete_current_run(self): + ci.verify(self.root, [1000], self.sha) + + def test_missing_artifact_fails_even_when_other_tables_are_valid(self): + next(self.root.glob("*.json")).unlink() + with self.assertRaisesRegex(ValueError, "Missing"): + ci.verify(self.root, [1000], self.sha) + + def test_missing_storage_variant_fails_even_with_valid_baselines(self): + path = next(self.root.glob("*.json")) + data = json.loads(path.read_text()) + data["results"] = [result for result in data["results"] if result["variant"].startswith("SQLite")] + path.write_text(json.dumps(data), encoding="utf-8") + with self.assertRaisesRegex(ValueError, "variants"): + ci.verify(self.root, [1000], self.sha) + + def test_stale_result_is_not_a_substitute_for_a_failed_job(self): + path = next(self.root.glob("*.json")) + data = json.loads(path.read_text()) + data["source_sha"] = "b" * 40 + path.write_text(json.dumps(data), encoding="utf-8") + with self.assertRaisesRegex(ValueError, "source_sha"): + ci.verify(self.root, [1000], self.sha) + + def test_different_merge_trees_are_rejected(self): + for path in self.root.glob("*.json"): + data = json.loads(path.read_text()) + data["tree_sha"] = "b" * 40 + path.write_text(json.dumps(data), encoding="utf-8") + with self.assertRaisesRegex(ValueError, "tree_sha"): + ci.verify(self.root, [1000], self.sha, tree="c" * 40) + + def test_wrong_table_cannot_hide_behind_expected_filename(self): + path = next(self.root.glob("*.json")) + data = json.loads(path.read_text()) + data["size"] = 2000 + path.write_text(json.dumps(data), encoding="utf-8") + with self.assertRaisesRegex(ValueError, "table identity"): + ci.verify(self.root, [1000], self.sha) + + def test_extra_old_artifacts_are_rejected(self): + (self.root / "stale.json").write_text("{}", encoding="utf-8") + with self.assertRaisesRegex(ValueError, "Unexpected"): + ci.verify(self.root, [1000], self.sha) + + +class MatrixTests(unittest.TestCase): + def test_csharp_preserves_both_sqlite_providers(self): + for category in ("links", "objects"): + self.assertEqual( + ci.expected_variants(category, "C#") - ci.expected_variants(category, "Rust"), + {"SystemDataSQLite_Memory", "SystemDataSQLite_File"}, + ) + + def test_default_matrix_preserves_twenty_tables(self): + rows = ci.matrix([100000, 1000000, 10000000]) + self.assertEqual(len(rows), 20) + self.assertFalse(any(row["category"] == "objects" and row["size"] > 1000000 for row in rows)) + + def test_invalid_or_unbounded_inputs_fail_before_starting_jobs(self): + for sizes in ([], [0], [-1], [True], [1.5], [1000, 1000], [100000000], "1000"): + with self.subTest(sizes=sizes), self.assertRaises(ValueError): + ci.matrix(sizes) + + def test_matrix_cannot_exceed_github_job_limit(self): + with self.assertRaisesRegex(ValueError, "256 jobs"): + ci.matrix(list(range(1, 34))) + + +if __name__ == "__main__": + unittest.main() diff --git a/scripts/test_benchmark_report.py b/scripts/test_benchmark_report.py index 311207d..a82eb11 100644 --- a/scripts/test_benchmark_report.py +++ b/scripts/test_benchmark_report.py @@ -13,8 +13,8 @@ def measurement(median, *samples): - samples = sorted(samples or [median]) - return {"median_ns": median, "min_ns": samples[0], "max_ns": samples[-1], "samples_ns": samples} + ordered = sorted(samples or [median]) + return {"median_ns": median, "min_ns": ordered[0], "max_ns": ordered[-1], "samples_ns": ordered} def results(category, variants, file_bytes=None): @@ -57,8 +57,10 @@ def test_sizes(self): def test_russian_plurals(self): repetitions = report.TEXT["ru"]["repetitions"] - self.assertEqual([repetitions(count) for count in (1, 3, 5, 11, 21)], - ["1 повтор", "3 повтора", "5 повторов", "11 повторов", "21 повтор"]) + self.assertEqual( + [repetitions(count) for count in (1, 3, 5, 11, 21)], + ["1 повтор", "3 повтора", "5 повторов", "11 повторов", "21 повтор"], + ) class ComparisonTests(unittest.TestCase): @@ -77,16 +79,24 @@ def test_clear_differences(self): def test_system_data_sqlite_is_compared_with_the_matching_provider_storage(self): self.assertEqual(report.baseline("SystemDataSQLite_Memory"), "SQLite_Memory") self.assertEqual(report.baseline("SystemDataSQLite_File"), "SQLite_File") - data = results("objects", { - "SQLite_Memory": 1000, "SQLite_File": 2000, - "SystemDataSQLite_Memory": 500, "SystemDataSQLite_File": 500, - }) + data = results( + "objects", + { + "SQLite_Memory": 1000, + "SQLite_File": 2000, + "SystemDataSQLite_Memory": 500, + "SystemDataSQLite_File": 500, + }, + ) table = report.table(data, self.text).splitlines() self.assertEqual(table[4].count("2× faster"), 4) self.assertEqual(table[5].count("4× faster"), 4) def test_overlapping_interquartile_ranges_are_not_a_difference(self): - measured, reference = measurement(150, 90, 100, 150, 200, 300), measurement(190, 150, 180, 190, 210, 260) + measured, reference = ( + measurement(150, 90, 100, 150, 200, 300), + measurement(190, 150, 180, 190, 210, 260), + ) self.assertEqual(report.quartiles(measured), (100, 200)) self.assertEqual(report.comparison(measured, reference, self.text), "≈ same") @@ -116,38 +126,50 @@ def test_hierarchy_is_category_language_bits_size(self): ("links", "Rust", 64, 100_000): sample(), ("objects", "C#", 32, 100_000): sample("objects", "C#", 32), } - headings = [line for line in report.section(reports, "en", "docs").splitlines() if line.startswith("#")] - self.assertEqual(headings, [ - "## Doublets vs SQLite as storage for links", - "### Rust doublets vs SQLite", - "#### 32 bit address/id space benchmarks", - "#### 64 bit address/id space benchmarks", - "##### 100,000 links", - "##### 1,000,000 links", - "### C# doublets vs SQLite", - "#### 32 bit address/id space benchmarks", - "#### 64 bit address/id space benchmarks", - "## Doublets vs SQLite as storage for objects", - "### Rust doublets vs SQLite", - "#### 32 bit address/id space benchmarks", - "#### 64 bit address/id space benchmarks", - "### C# doublets vs SQLite", - "#### 32 bit address/id space benchmarks", - "##### 100,000 blog posts", - "#### 64 bit address/id space benchmarks", - ]) + headings = [ + line for line in report.section(reports, "en", "docs").splitlines() if line.startswith("#") + ] + self.assertEqual( + headings, + [ + "## Doublets vs SQLite as storage for links", + "### Rust doublets vs SQLite", + "#### 32 bit address/id space benchmarks", + "#### 64 bit address/id space benchmarks", + "##### 100,000 links", + "##### 1,000,000 links", + "### C# doublets vs SQLite", + "#### 32 bit address/id space benchmarks", + "#### 64 bit address/id space benchmarks", + "## Doublets vs SQLite as storage for objects", + "### Rust doublets vs SQLite", + "#### 32 bit address/id space benchmarks", + "#### 64 bit address/id space benchmarks", + "### C# doublets vs SQLite", + "#### 32 bit address/id space benchmarks", + "##### 100,000 blog posts", + "#### 64 bit address/id space benchmarks", + ], + ) def test_missing_groups_and_provenance(self): url = "https://github.com/linksplatform/Comparisons.SQLiteVSDoublets/actions/runs/1" - reports = {("links", "Rust", 64, 100_000): sample(run_url=url, date="2026-10-04", machine="ubuntu-24.04")} + reports = { + ("links", "Rust", 64, 100_000): sample(run_url=url, date="2026-10-04", machine="ubuntu-24.04") + } text = report.section(reports, "en", None) self.assertEqual(text.count("_No results yet._"), 7) - self.assertIn(f"_3 repetitions after a warm-up, median time per operation. SQLite 3.53.2, ubuntu-24.04, " - f"[GitHub Actions run]({url}) on 2026-10-04._", text) + self.assertIn( + f"_3 repetitions after a warm-up, median time per operation. SQLite 3.53.2, ubuntu-24.04, " + f"[GitHub Actions run]({url}) on 2026-10-04._", + text, + ) self.assertNotIn("![", text) def test_charts_are_linked_per_category_language_and_bits(self): - text = report.section({("objects", "C#", 32, 100_000): sample("objects", "C#", 32)}, "ru", "docs/benchmarks") + text = report.section( + {("objects", "C#", 32, 100_000): sample("objects", "C#", 32)}, "ru", "docs/benchmarks" + ) self.assertIn("(docs/benchmarks/objects-csharp-32.png)", text) self.assertIn("## Дуплеты против SQLite как хранилище объектов", text) self.assertIn("локальный запуск", text) @@ -161,16 +183,20 @@ def setUp(self): def test_only_the_marked_section_is_replaced(self): document = f"before\n{report.START_MARKER}\nold\n{report.END_MARKER}\nafter\n" - self.assertEqual(report.replace_section(document, "new\n"), - f"before\n{report.START_MARKER}\n{report.LINT_OFF}\nnew\n{report.LINT_ON}\n" - f"{report.END_MARKER}\nafter\n") + self.assertEqual( + report.replace_section(document, "new\n"), + f"before\n{report.START_MARKER}\n{report.LINT_OFF}\nnew\n{report.LINT_ON}\n" + f"{report.END_MARKER}\nafter\n", + ) with self.assertRaises(ValueError): report.replace_section("no markers", "new\n") def test_usage_starts_with_the_summary(self): with contextlib.redirect_stdout(io.StringIO()) as output, self.assertRaises(SystemExit): report.main(["--help"]) - self.assertIn("Turns the benchmark JSON reports into the README results sections and charts.", output.getvalue()) + self.assertIn( + "Turns the benchmark JSON reports into the README results sections and charts.", output.getvalue() + ) def test_duplicate_reports_are_rejected(self): for name in ("a.json", "b.json"): @@ -178,6 +204,26 @@ def test_duplicate_reports_are_rejected(self): with self.assertRaises(ValueError): report.load(self.root) + def test_empty_artifact_download_cannot_generate_a_successful_report(self): + with self.assertRaisesRegex(ValueError, "No benchmark reports"): + report.load(self.root) + + def test_incomplete_and_nonfinite_measurements_are_rejected(self): + for broken in ("missing operation", "missing baseline", "NaN", "negative"): + with self.subTest(broken=broken): + data = sample() + if broken == "missing operation": + del data["results"][0]["operations"]["create"] + elif broken == "missing baseline": + data["results"] = data["results"][2:] + else: + data["results"][0]["operations"]["create"]["median_ns"] = ( + float("nan") if broken == "NaN" else -1 + ) + (self.root / "broken.json").write_text(json.dumps(data), encoding="utf-8") + with self.assertRaises(ValueError): + report.load(self.root) + @unittest.skipUnless(importlib.util.find_spec("matplotlib"), "matplotlib is not installed") def test_main_updates_readmes_and_writes_charts(self): results_directory = self.root / "results" @@ -185,11 +231,24 @@ def test_main_updates_readmes_and_writes_charts(self): for index, data in enumerate((sample(), sample(size=1_000_000), sample("objects", "C#", 32))): (results_directory / f"{index}.json").write_text(json.dumps(data), encoding="utf-8") for name in ("README.md", "README.ru.md"): - (self.root / name).write_text(f"intro\n{report.START_MARKER}\n{report.END_MARKER}\n", encoding="utf-8") - report.main([str(results_directory), "--readme", str(self.root / "README.md"), - "--readme", str(self.root / "README.ru.md"), "--charts", str(self.root / "docs")]) - self.assertEqual(sorted(path.name for path in (self.root / "docs").iterdir()), - ["links-rust-64.png", "objects-csharp-32.png"]) + (self.root / name).write_text( + f"intro\n{report.START_MARKER}\n{report.END_MARKER}\n", encoding="utf-8" + ) + report.main( + [ + str(results_directory), + "--readme", + str(self.root / "README.md"), + "--readme", + str(self.root / "README.ru.md"), + "--charts", + str(self.root / "docs"), + ] + ) + self.assertEqual( + sorted(path.name for path in (self.root / "docs").iterdir()), + ["links-rust-64.png", "objects-csharp-32.png"], + ) english = (self.root / "README.md").read_text(encoding="utf-8") self.assertIn("![Rust doublets vs SQLite, 64 bit, links](docs/links-rust-64.png)", english) self.assertIn("Дуплеты на C# против SQLite", (self.root / "README.ru.md").read_text(encoding="utf-8")) diff --git a/scripts/test_check_pipeline_status.py b/scripts/test_check_pipeline_status.py new file mode 100644 index 0000000..c7796b1 --- /dev/null +++ b/scripts/test_check_pipeline_status.py @@ -0,0 +1,37 @@ +"""A cancelled writer or an unproven timeout must never become a green pipeline.""" + +import unittest + +from check_pipeline_status import failures + + +class StatusTests(unittest.TestCase): + def test_success_and_intentional_skips(self): + self.assertEqual(failures({"test": {"result": "success"}, "publish": {"result": "skipped"}}, {}), []) + + def test_timeout_or_failure_fails_current_run(self): + for result in ("failure", "cancelled", "unknown"): + self.assertTrue(failures({"test": {"result": result}}, {})) + + def test_only_proven_superseded_cancellable_readers_are_accepted(self): + workflow = { + "jobs": { + "test": {"concurrency": {"cancel-in-progress": "true"}}, + "publish": {"concurrency": {"cancel-in-progress": "false"}}, + } + } + self.assertEqual(failures({"test": {"result": "cancelled"}}, workflow, True), []) + self.assertTrue(failures({"publish": {"result": "cancelled"}}, workflow, True)) + self.assertTrue(failures({"test": {"result": "cancelled"}}, workflow, False)) + + def test_empty_status_is_an_error(self): + with self.assertRaises(ValueError): + failures({}, {}) + + def test_yaml_boolean_cancellation_policy(self): + workflow = {"concurrency": {"cancel-in-progress": True}} + self.assertEqual(failures({"test": {"result": "cancelled"}}, workflow, True), []) + + +if __name__ == "__main__": + unittest.main() diff --git a/scripts/test_ci_checks.py b/scripts/test_ci_checks.py new file mode 100644 index 0000000..093b5fd --- /dev/null +++ b/scripts/test_ci_checks.py @@ -0,0 +1,62 @@ +"""Behavioral checks for CI permission and cancellation policies.""" + +import copy +import tempfile +import unittest +from pathlib import Path +from typing import Any + +import ci_checks as ci + + +class PolicyTests(unittest.TestCase): + def setUp(self): + self.workflow: dict[str, Any] = { + "permissions": {"contents": "read"}, + "jobs": {"test": {"runs-on": "ubuntu-24.04", "timeout-minutes": "10"}}, + } + + def test_read_only_workflow(self): + self.assertEqual(ci.workflow_errors(self.workflow), []) + + def test_writer_cannot_be_cancelled_or_race_another_workflow(self): + job = self.workflow["jobs"]["test"] + job["permissions"] = {"contents": "write"} + self.assertTrue(ci.workflow_errors(self.workflow)) + job["concurrency"] = {"group": ci.WRITER_GROUP, "cancel-in-progress": "false"} + self.assertEqual(ci.workflow_errors(self.workflow), []) + self.workflow["concurrency"] = {"cancel-in-progress": "true"} + self.assertTrue(ci.workflow_errors(self.workflow)) + + def test_matrix_runner_aliases_are_checked(self): + self.workflow["jobs"]["test"]["strategy"] = {"matrix": {"os": ["windows-latest"]}} + self.assertIn("mutable runner", " ".join(ci.workflow_errors(self.workflow))) + + def test_privileged_event_rejects_checkout(self): + self.workflow["on"] = {"pull_request_target": {}} + self.workflow["jobs"]["test"]["steps"] = [{"uses": "actions/checkout@" + "a" * 40}] + self.assertIn("must not check out", " ".join(ci.workflow_errors(self.workflow))) + + def test_failure_suppression_is_rejected(self): + broken = copy.deepcopy(self.workflow) + broken["jobs"]["test"]["continue-on-error"] = "true" + self.assertIn("hides failed checks", " ".join(ci.workflow_errors(broken))) + + def test_explicit_false_does_not_suppress_failures(self): + self.workflow["jobs"]["test"]["continue-on-error"] = "false" + self.assertEqual(ci.workflow_errors(self.workflow), []) + + def test_local_missing_link_is_a_failure(self): + with tempfile.TemporaryDirectory() as temporary: + root = Path(temporary) + path = root / "README.md" + path.write_text( + "[code](missing.py) [web](https://example.com) [section](#local)", encoding="utf-8" + ) + self.assertEqual(len(ci.local_link_errors(path, root)), 1) + (root / "missing.py").touch() + self.assertEqual(ci.local_link_errors(path, root), []) + + +if __name__ == "__main__": + unittest.main() diff --git a/scripts/test_ci_process.py b/scripts/test_ci_process.py new file mode 100644 index 0000000..094a897 --- /dev/null +++ b/scripts/test_ci_process.py @@ -0,0 +1,20 @@ +"""Missing CI tools must fail before starting a subprocess.""" + +import unittest +from unittest.mock import patch + +from ci_process import executable + + +class ExecutableTests(unittest.TestCase): + def test_resolved_path_is_used(self): + with patch("ci_process.shutil.which", return_value="/tools/git"): + self.assertEqual(executable("git"), "/tools/git") + + def test_missing_tool_is_an_error(self): + with patch("ci_process.shutil.which", return_value=None), self.assertRaises(FileNotFoundError): + executable("git") + + +if __name__ == "__main__": + unittest.main() diff --git a/scripts/test_publish_benchmarks.py b/scripts/test_publish_benchmarks.py new file mode 100644 index 0000000..706eebf --- /dev/null +++ b/scripts/test_publish_benchmarks.py @@ -0,0 +1,134 @@ +"""A write rejection must retain its actual cause and retry only lost races.""" + +import json +import os +import subprocess # nosec B404 # Git integration tests use only disposable local repositories and no shell. +import tempfile +import unittest +from pathlib import Path +from unittest.mock import patch + +import benchmark_ci +import benchmark_report +import publish_benchmarks as publish +from ci_process import executable +from test_benchmark_ci import complete_sample + + +class PushTests(unittest.TestCase): + def test_only_non_fast_forward_can_be_retried(self): + self.assertTrue(publish.is_race("! [rejected] HEAD -> main (non-fast-forward)")) + self.assertTrue(publish.is_race("! [rejected] HEAD -> main (fetch first)")) + for error in ( + "remote: error: GH013: Repository rule violations found\n! [rejected] (non-fast-forward)", + "remote: error: GH006: Protected branch update failed\n! [rejected] (fetch first)", + "fatal: Authentication failed", + "Could not resolve host: github.com", + "remote: Permission denied", + "pre-receive hook declined", + ): + with self.subTest(error=error): + self.assertFalse(publish.is_race(error)) + + +class PublicationTests(unittest.TestCase): + """Exercise real Git races against a temporary bare origin; never contact GitHub.""" + + def setUp(self): + temporary = tempfile.TemporaryDirectory() + self.addCleanup(temporary.cleanup) + self.root = Path(temporary.name) + self.origin = self.root / "origin.git" + self.local = self.root / "local" + self.other = self.root / "other" + self.command("init", "--bare", "--initial-branch=main", str(self.origin)) + self.command("clone", str(self.origin), str(self.local)) + for name in ("README.md", "README.ru.md"): + (self.local / name).write_text( + f"# Benchmarks\n\n{benchmark_report.START_MARKER}\nold\n{benchmark_report.END_MARKER}\n" + ) + (self.local / "scripts").mkdir() + (self.local / "scripts/source.py").write_text("version = 1\n") + self.commit(self.local, "Initial source") + self.command("push", "origin", "main", cwd=self.local) + self.sha = self.command("rev-parse", "HEAD", cwd=self.local).stdout.strip() + self.command("clone", str(self.origin), str(self.other)) + self.inputs = self.root / "inputs" + self.inputs.mkdir() + for row in benchmark_ci.matrix([1000]): + data = complete_sample( + row["category"], + "Rust" if row["language"] == "rust" else "C#", + row["bits"], + 1000, + source_sha=self.sha, + ) + (self.inputs / benchmark_ci.filename(row)).write_text(json.dumps(data)) + previous = Path.cwd() + os.chdir(self.local) + self.addCleanup(os.chdir, previous) + + def command(self, *args, cwd=None): + return subprocess.run( # nosec B603 # fixed test commands and temporary paths, no untrusted inputs. + [executable("git"), *args], cwd=cwd, capture_output=True, text=True, check=True + ) + + def commit(self, directory, message): + self.command("add", ".", cwd=directory) + self.command( + "-c", + "user.name=Test", + "-c", + "user.email=test@example.org", + "commit", + "-m", + message, + cwd=directory, + ) + + def test_lost_race_refetches_and_preserves_intervening_commit(self): + original = publish.git + pushes = [] + + def race(*args, **kwargs): + if args[0] == "push": + pushes.append(args) + if len(pushes) == 1: + readme = self.other / "README.md" + readme.write_text(readme.read_text() + "\nIntervening documentation update.\n") + self.commit(self.other, "Concurrent documentation") + self.command("push", "origin", "main", cwd=self.other) + return original(*args, **kwargs) + + # Git remains real. Avoid invoking network-dependent Markdown tooling here. + actual_run = subprocess.run + with ( + patch.object(publish, "git", side_effect=race), + patch.object(publish.benchmark_report, "charts"), + patch.object(publish.subprocess, "run", wraps=subprocess.run) as run, + ): + run.side_effect = lambda args, **kw: ( + subprocess.CompletedProcess(args, 0) + if Path(args[0]).name in ("npx", "npx.cmd") + else actual_run(args, **kw) + ) + publish.publish(self.inputs, [1000], self.sha) + self.assertEqual(len(pushes), 2) + readme = self.command("--git-dir", str(self.origin), "show", "main:README.md").stdout + self.assertIn("Intervening documentation update", readme) + self.assertNotIn("\nold\n", readme) + log = self.command("--git-dir", str(self.origin), "log", "--format=%s", "main").stdout + self.assertIn("Concurrent documentation", log) + + def test_new_source_requires_new_measurements(self): + (self.other / "scripts/source.py").write_text("version = 2\n") + self.commit(self.other, "Changed benchmark source") + self.command("push", "origin", "main", cwd=self.other) + with self.assertRaisesRegex(RuntimeError, "source changed"): + publish.publish(self.inputs, [1000], self.sha) + count = self.command("--git-dir", str(self.origin), "rev-list", "--count", "main").stdout.strip() + self.assertEqual(count, "2") + + +if __name__ == "__main__": + unittest.main() diff --git a/scripts/test_workflow_yaml.py b/scripts/test_workflow_yaml.py new file mode 100644 index 0000000..78ff918 --- /dev/null +++ b/scripts/test_workflow_yaml.py @@ -0,0 +1,34 @@ +"""Safe YAML loading must retain event and concurrency policy semantics.""" + +import unittest + +import ci_checks +import yaml +from workflow_yaml import load_workflow + + +class WorkflowYamlTests(unittest.TestCase): + def test_unquoted_privileged_event_is_still_checked(self): + workflow = load_workflow( + "on:\n pull_request_target:\npermissions:\n contents: read\n" + "jobs:\n test:\n runs-on: ubuntu-24.04\n timeout-minutes: 5\n" + " steps:\n - uses: actions/checkout@revision\n" + ) + self.assertIn("must not check out", " ".join(ci_checks.workflow_errors(workflow))) + + def test_quoted_events_and_boolean_policy(self): + workflow = load_workflow("'on': [push]\nconcurrency:\n cancel-in-progress: false\n") + self.assertEqual(workflow["on"], ["push"]) + self.assertIs(workflow["concurrency"]["cancel-in-progress"], False) + + def test_python_object_tags_are_rejected(self): + with self.assertRaises(yaml.constructor.ConstructorError): + load_workflow("!!python/object:collections.Counter {}") + + def test_non_mapping_is_rejected(self): + with self.assertRaises(ValueError): + load_workflow("[]") + + +if __name__ == "__main__": + unittest.main() diff --git a/scripts/workflow_yaml.py b/scripts/workflow_yaml.py new file mode 100644 index 0000000..886fe43 --- /dev/null +++ b/scripts/workflow_yaml.py @@ -0,0 +1,15 @@ +"""Read workflow YAML safely while preserving GitHub's `on` event key.""" + +from typing import Any + +import yaml + + +def load_workflow(content: str) -> dict[str, Any]: + workflow = yaml.safe_load(content) + if not isinstance(workflow, dict): + raise ValueError("Workflow must be a mapping") + # PyYAML's YAML 1.1 resolver treats an unquoted `on` key as boolean true. + if True in workflow: + workflow["on"] = workflow.pop(True) + return workflow