diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index fc0cd4e4..5c8f732e 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -11,11 +11,13 @@ jobs:
timeout-minutes: 10
steps:
- uses: actions/checkout@v7
+ - uses: dtolnay/rust-toolchain@stable
- uses: actions/setup-node@v6
with:
node-version: 22
cache: npm
- run: npm ci --ignore-scripts --no-audit --no-fund
+ - run: cargo build --locked --release --manifest-path rust/Cargo.toml --package oaf
- run: npm run bootstrap
- run: npm run doctor
- run: npm run ci
diff --git a/.github/workflows/npm-publish.yml b/.github/workflows/npm-publish.yml
index c91a75e4..83813cfa 100644
--- a/.github/workflows/npm-publish.yml
+++ b/.github/workflows/npm-publish.yml
@@ -18,14 +18,20 @@ on:
options:
- trusted-publishing
- npm-token
+ native_run_id:
+ description: Successful Rust workflow run containing the exact attested native release set
+ required: true
+ type: string
permissions:
+ actions: read
+ artifact-metadata: write
+ attestations: write
contents: read
id-token: write
jobs:
- publish:
+ validate:
runs-on: ubuntu-latest
timeout-minutes: 25
- environment: npm-release
steps:
- uses: actions/checkout@v7
- uses: actions/setup-node@v6
@@ -33,11 +39,13 @@ jobs:
node-version: 22.14.0
registry-url: https://registry.npmjs.org
package-manager-cache: false
- - run: npm install -g npm@latest
+ - uses: dtolnay/rust-toolchain@stable
+ - run: npm install -g npm@11.18.0
- name: Validate manual confirmation
env:
INPUT_VERSION: ${{ inputs.version }}
INPUT_CONFIRM: ${{ inputs.confirm }}
+ INPUT_NATIVE_RUN_ID: ${{ inputs.native_run_id }}
run: |
ACTUAL_VERSION="$(node -p "JSON.parse(require('fs').readFileSync('package.json', 'utf8')).version")"
EXPECTED_CONFIRM="publish memory-recall@${ACTUAL_VERSION}"
@@ -49,17 +57,244 @@ jobs:
echo "Confirmation must exactly match: $EXPECTED_CONFIRM" >&2
exit 1
fi
+ if ! printf '%s' "$INPUT_NATIVE_RUN_ID" | grep -Eq '^[1-9][0-9]*$'; then
+ echo "native_run_id must be a positive GitHub Actions run ID" >&2
+ exit 1
+ fi
- run: npm ci --ignore-scripts --no-audit --no-fund
+ - run: cargo build --locked --release --manifest-path rust/Cargo.toml --package oaf
+ - run: npm run bootstrap
- run: npm run ci
- run: npm run native:smoke
- run: npm run consumer:smoke
- run: npm run release:readiness:check
- - run: npm publish --access public --dry-run
- - name: Publish with npm Trusted Publishing
- if: ${{ inputs.auth_mode == 'trusted-publishing' }}
- run: npm publish --access public
- - name: Publish with NPM_TOKEN fallback
- if: ${{ inputs.auth_mode == 'npm-token' }}
- env:
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- run: npm publish --access public --provenance
+ - name: Verify source identity before packing
+ env:
+ RELEASE_COMMIT: ${{ github.sha }}
+ shell: bash
+ run: |
+ test "$(git rev-parse HEAD)" = "$RELEASE_COMMIT"
+ test -z "$(git status --porcelain --untracked-files=all)"
+ - name: Pack exact root release artifact once
+ env:
+ RELEASE_COMMIT: ${{ github.sha }}
+ shell: bash
+ run: |
+ SOURCE_CREATED="$(git show -s --format=%cI "$RELEASE_COMMIT")"
+ CREATED="$(node -e "process.stdout.write(new Date(process.argv[1]).toISOString().replace('.000Z', 'Z'))" "$SOURCE_CREATED")"
+ node scripts/native-release-set.mjs package-root --out output/root-release --commit "$RELEASE_COMMIT" --created "$CREATED"
+ - name: Validate exact root release artifact
+ env:
+ RELEASE_VERSION: ${{ inputs.version }}
+ RELEASE_COMMIT: ${{ github.sha }}
+ run: node scripts/native-release-set.mjs validate-root --artifacts output/root-release --version "$RELEASE_VERSION" --commit "$RELEASE_COMMIT" > output/root-release.validation.json
+ - name: Dry-run exact root tarball
+ shell: bash
+ run: |
+ ROOT_TARBALL="output/root-release/$(node -p "JSON.parse(require('fs').readFileSync('output/root-release/memory-recall-root-release.json', 'utf8')).package.tarball")"
+ npm publish "$ROOT_TARBALL" --access public --dry-run
+ - name: Attest root package provenance
+ uses: actions/attest@v4
+ with:
+ subject-path: output/root-release/*.tgz
+ - name: Attest root package SBOM
+ uses: actions/attest@v4
+ with:
+ subject-path: output/root-release/*.tgz
+ sbom-path: output/root-release/memory-recall-root.spdx.json
+ - name: Upload exact root release artifact
+ uses: actions/upload-artifact@v6
+ with:
+ name: memory-recall-root-release-${{ github.sha }}
+ path: output/root-release/*
+ if-no-files-found: error
+ retention-days: 14
+
+ publish:
+ needs: validate
+ runs-on: ubuntu-latest
+ timeout-minutes: 25
+ environment: npm-release
+ steps:
+ - uses: actions/checkout@v7
+ - uses: actions/setup-node@v6
+ with:
+ node-version: 22.14.0
+ registry-url: https://registry.npmjs.org
+ package-manager-cache: false
+ - run: npm install -g npm@11.18.0
+ - name: Download exact root release artifact
+ uses: actions/download-artifact@v8
+ with:
+ name: memory-recall-root-release-${{ github.sha }}
+ path: output/root-release
+ - name: Validate exact root release artifact
+ env:
+ RELEASE_VERSION: ${{ inputs.version }}
+ RELEASE_COMMIT: ${{ github.sha }}
+ run: node scripts/native-release-set.mjs validate-root --artifacts output/root-release --version "$RELEASE_VERSION" --commit "$RELEASE_COMMIT" > output/root-release.validation.json
+ - name: Verify root provenance signature
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ shell: bash
+ run: |
+ gh attestation verify output/root-release/*.tgz \
+ --repo "$GITHUB_REPOSITORY" \
+ --signer-workflow "$GITHUB_REPOSITORY/.github/workflows/npm-publish.yml" \
+ --signer-digest "$GITHUB_SHA" \
+ --source-digest "$GITHUB_SHA" \
+ --deny-self-hosted-runners
+ - name: Verify root SBOM signature
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ shell: bash
+ run: |
+ gh attestation verify output/root-release/*.tgz \
+ --repo "$GITHUB_REPOSITORY" \
+ --signer-workflow "$GITHUB_REPOSITORY/.github/workflows/npm-publish.yml" \
+ --signer-digest "$GITHUB_SHA" \
+ --source-digest "$GITHUB_SHA" \
+ --predicate-type https://spdx.dev/Document/v2.3 \
+ --deny-self-hosted-runners
+ - name: Verify exact successful Rust workflow run
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ INPUT_NATIVE_RUN_ID: ${{ inputs.native_run_id }}
+ shell: bash
+ run: |
+ RUN_JSON="$(gh api "repos/$GITHUB_REPOSITORY/actions/runs/$INPUT_NATIVE_RUN_ID")"
+ RUN_JSON="$RUN_JSON" node --input-type=module <<'NODE'
+ const run = JSON.parse(process.env.RUN_JSON);
+ const expected = {
+ repository: process.env.GITHUB_REPOSITORY,
+ commit: process.env.GITHUB_SHA,
+ workflow: '.github/workflows/rust.yml'
+ };
+ if (run.head_repository?.full_name !== expected.repository) throw new Error('native run repository mismatch');
+ if (run.path !== expected.workflow) throw new Error('native run workflow mismatch');
+ if (run.status !== 'completed' || run.conclusion !== 'success') throw new Error('native run must be completed successfully');
+ if (run.head_sha !== expected.commit) throw new Error('native run commit mismatch');
+ if (!['push', 'workflow_dispatch'].includes(run.event)) throw new Error('native run event is not release eligible');
+ NODE
+ - name: Download exact native release artifacts
+ uses: actions/download-artifact@v8
+ with:
+ run-id: ${{ inputs.native_run_id }}
+ github-token: ${{ secrets.GITHUB_TOKEN }}
+ name: memory-recall-native-release-set-${{ github.sha }}
+ path: output/native-release
+ - name: Validate complete signed native release set
+ env:
+ RELEASE_VERSION: ${{ inputs.version }}
+ RELEASE_COMMIT: ${{ github.sha }}
+ run: node scripts/native-release-set.mjs validate --artifacts output/native-release --version "$RELEASE_VERSION" --commit "$RELEASE_COMMIT" > output/native-release.validation.json
+ - name: Verify native provenance signatures
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ shell: bash
+ run: |
+ while IFS= read -r -d '' artifact; do
+ gh attestation verify "$artifact" \
+ --repo "$GITHUB_REPOSITORY" \
+ --signer-workflow "$GITHUB_REPOSITORY/.github/workflows/rust.yml" \
+ --signer-digest "$GITHUB_SHA" \
+ --source-digest "$GITHUB_SHA" \
+ --deny-self-hosted-runners
+ done < <(find output/native-release -type f \( -name '*.tgz' -o -name 'native-package-*-receipt.json' \) -print0)
+ - name: Verify native SBOM signatures
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ shell: bash
+ run: |
+ while IFS= read -r -d '' artifact; do
+ gh attestation verify "$artifact" \
+ --repo "$GITHUB_REPOSITORY" \
+ --signer-workflow "$GITHUB_REPOSITORY/.github/workflows/rust.yml" \
+ --signer-digest "$GITHUB_SHA" \
+ --source-digest "$GITHUB_SHA" \
+ --predicate-type https://spdx.dev/Document/v2.3 \
+ --deny-self-hosted-runners
+ done < <(find output/native-release -type f -name '*.tgz' -print0)
+ - name: Prove exact root install, uninstall, and clean reinstall
+ shell: bash
+ run: |
+ export MEMORY_RECALL_ROOT_PACKAGE_TARBALL="$(node -p "require('path').resolve('output/root-release', JSON.parse(require('fs').readFileSync('output/root-release.validation.json', 'utf8')).artifact.tarball)")"
+ export MEMORY_RECALL_NATIVE_PACKAGE_TARBALL="$(node -p "require('path').resolve('output/native-release', JSON.parse(require('fs').readFileSync('output/native-release.validation.json', 'utf8')).artifacts.find(({ target }) => target === 'linux-x64-gnu').tarball)")"
+ test -f "$MEMORY_RECALL_ROOT_PACKAGE_TARBALL"
+ test -f "$MEMORY_RECALL_NATIVE_PACKAGE_TARBALL"
+ node scripts/native-code-intelligence-consumer-smoke.mjs
+ - name: Publish native packages
+ env:
+ RELEASE_VERSION: ${{ inputs.version }}
+ RELEASE_COMMIT: ${{ github.sha }}
+ AUTH_MODE: ${{ inputs.auth_mode }}
+ NODE_AUTH_TOKEN: ${{ inputs.auth_mode == 'npm-token' && secrets.NPM_TOKEN || '' }}
+ run: node scripts/native-release-set.mjs publish-native --artifacts output/native-release --version "$RELEASE_VERSION" --commit "$RELEASE_COMMIT" --auth-mode "$AUTH_MODE"
+ - name: Verify native packages on npm
+ env:
+ RELEASE_VERSION: ${{ inputs.version }}
+ RELEASE_COMMIT: ${{ github.sha }}
+ run: node scripts/native-release-set.mjs verify-registry --artifacts output/native-release --version "$RELEASE_VERSION" --commit "$RELEASE_COMMIT"
+ - name: Dry-run root package after native registry verification
+ shell: bash
+ run: |
+ ROOT_TARBALL="output/root-release/$(node -p "JSON.parse(require('fs').readFileSync('output/root-release/memory-recall-root-release.json', 'utf8')).package.tarball")"
+ npm publish "$ROOT_TARBALL" --access public --dry-run
+ - name: Publish exact root package
+ env:
+ RELEASE_VERSION: ${{ inputs.version }}
+ RELEASE_COMMIT: ${{ github.sha }}
+ AUTH_MODE: ${{ inputs.auth_mode }}
+ NODE_AUTH_TOKEN: ${{ inputs.auth_mode == 'npm-token' && secrets.NPM_TOKEN || '' }}
+ run: node scripts/native-release-set.mjs publish-root --artifacts output/root-release --native-artifacts output/native-release --version "$RELEASE_VERSION" --commit "$RELEASE_COMMIT" --auth-mode "$AUTH_MODE"
+ - name: Verify root package on npm
+ env:
+ RELEASE_VERSION: ${{ inputs.version }}
+ RELEASE_COMMIT: ${{ github.sha }}
+ run: node scripts/native-release-set.mjs verify-root-registry --artifacts output/root-release --version "$RELEASE_VERSION" --commit "$RELEASE_COMMIT"
+
+ registry-consumer:
+ name: Published package consumer (${{ matrix.target }})
+ needs: publish
+ runs-on: ${{ matrix.runner }}
+ timeout-minutes: 30
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - target: darwin-arm64
+ runner: macos-15
+ - target: darwin-x64
+ runner: macos-15-intel
+ - target: linux-arm64-gnu
+ runner: ubuntu-22.04-arm
+ - target: linux-x64-gnu
+ runner: ubuntu-22.04
+ - target: win32-x64
+ runner: windows-2025
+ steps:
+ - uses: actions/checkout@v7
+ - uses: actions/setup-node@v6
+ with:
+ node-version: 22.14.0
+ registry-url: https://registry.npmjs.org
+ package-manager-cache: false
+ - run: npm install -g npm@11.18.0
+ - run: npm ci --ignore-scripts --no-audit --no-fund
+ - name: Fetch the published root and matching native package
+ env:
+ RELEASE_VERSION: ${{ inputs.version }}
+ NATIVE_TARGET: ${{ matrix.target }}
+ shell: bash
+ run: |
+ mkdir -p output/registry-consumer
+ npm pack "memory-recall@${RELEASE_VERSION}" --pack-destination output/registry-consumer --json > output/registry-consumer/root.json
+ npm pack "@memory-recall/native-${NATIVE_TARGET}@${RELEASE_VERSION}" --pack-destination output/registry-consumer --json > output/registry-consumer/native.json
+ ROOT_TARBALL="$(node -e "const [pack]=JSON.parse(require('fs').readFileSync('output/registry-consumer/root.json', 'utf8')); process.stdout.write(require('path').resolve('output/registry-consumer', pack.filename));")"
+ NATIVE_TARBALL="$(node -e "const [pack]=JSON.parse(require('fs').readFileSync('output/registry-consumer/native.json', 'utf8')); process.stdout.write(require('path').resolve('output/registry-consumer', pack.filename));")"
+ test -f "$ROOT_TARBALL"
+ test -f "$NATIVE_TARBALL"
+ printf 'MEMORY_RECALL_ROOT_PACKAGE_TARBALL=%s\n' "$ROOT_TARBALL" >> "$GITHUB_ENV"
+ printf 'MEMORY_RECALL_NATIVE_PACKAGE_TARBALL=%s\n' "$NATIVE_TARBALL" >> "$GITHUB_ENV"
+ - name: Prove clean global install, MCP, uninstall, and reinstall
+ run: node scripts/native-code-intelligence-consumer-smoke.mjs
diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml
index e9dd098d..7dda7482 100644
--- a/.github/workflows/rust.yml
+++ b/.github/workflows/rust.yml
@@ -3,8 +3,13 @@ on:
pull_request:
push:
branches: [main]
+ workflow_dispatch:
permissions:
+ actions: read
+ artifact-metadata: write
+ attestations: write
contents: read
+ id-token: write
jobs:
rust:
runs-on: ubuntu-latest
@@ -19,8 +24,310 @@ jobs:
- run: cargo test --manifest-path rust/Cargo.toml
- run: cargo build --release --manifest-path rust/Cargo.toml
- run: node scripts/rust-recall-conformance.mjs
+
+ rust-ingest-graph-quality:
+ needs: rust
+ runs-on: ubuntu-latest
+ timeout-minutes: 20
+ steps:
+ - uses: actions/checkout@v7
+ - uses: dtolnay/rust-toolchain@stable
+ - uses: actions/setup-node@v6
+ with:
+ node-version: 22
+ - run: cargo build --release --manifest-path rust/Cargo.toml
- run: node scripts/rust-ingest-quality.mjs
- run: node scripts/rust-graph-query-quality.mjs
+
+ rust-intelligence-eval:
+ needs: rust
+ runs-on: ubuntu-latest
+ timeout-minutes: 20
+ steps:
+ - uses: actions/checkout@v7
+ - uses: dtolnay/rust-toolchain@stable
+ - uses: actions/setup-node@v6
+ with:
+ node-version: 22
+ - run: cargo build --release --manifest-path rust/Cargo.toml
- run: node scripts/rust-intelligence-quality.mjs
- run: node scripts/rust-distribution-quality.mjs
- run: node scripts/rust-eval.mjs
+
+ native-artifacts:
+ name: Native artifact (${{ matrix.target }})
+ runs-on: ${{ matrix.runner }}
+ timeout-minutes: 45
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - target: darwin-arm64
+ runner: macos-15
+ binary: rust/target/release/oaf
+ platform: darwin
+ arch: arm64
+ libc: ''
+ - target: darwin-x64
+ runner: macos-15-intel
+ binary: rust/target/release/oaf
+ platform: darwin
+ arch: x64
+ libc: ''
+ - target: linux-arm64-gnu
+ runner: ubuntu-22.04-arm
+ binary: rust/target/release/oaf
+ platform: linux
+ arch: arm64
+ libc: glibc
+ - target: linux-x64-gnu
+ runner: ubuntu-22.04
+ binary: rust/target/release/oaf
+ platform: linux
+ arch: x64
+ libc: glibc
+ - target: win32-x64
+ runner: windows-2025
+ binary: rust/target/release/oaf.exe
+ platform: win32
+ arch: x64
+ libc: ''
+ steps:
+ - uses: actions/checkout@v7
+ - uses: dtolnay/rust-toolchain@stable
+ - uses: actions/setup-node@v6
+ with:
+ node-version: 22
+ - name: Verify native runner identity
+ env:
+ EXPECTED_PLATFORM: ${{ matrix.platform }}
+ EXPECTED_ARCH: ${{ matrix.arch }}
+ run: node -e "const assert=require('node:assert/strict'); assert.equal(process.platform, process.env.EXPECTED_PLATFORM); assert.equal(process.arch, process.env.EXPECTED_ARCH);"
+ - name: Build locked release binary
+ shell: bash
+ run: cargo build --locked --release --manifest-path rust/Cargo.toml --package oaf
+ - name: Stage unsigned platform package
+ shell: bash
+ run: |
+ node -e "require('fs').mkdirSync('output', { recursive: true })"
+ node scripts/package-native-platform.mjs \
+ --target '${{ matrix.target }}' \
+ --binary '${{ matrix.binary }}' \
+ --out output/native-packages \
+ > output/native-package-report.json
+ - name: Verify packed platform package
+ shell: bash
+ env:
+ EXPECTED_TARGET: ${{ matrix.target }}
+ EXPECTED_PLATFORM: ${{ matrix.platform }}
+ EXPECTED_ARCH: ${{ matrix.arch }}
+ EXPECTED_LIBC: ${{ matrix.libc }}
+ run: |
+ TARBALL="$(node -p "JSON.parse(require('fs').readFileSync('output/native-package-report.json', 'utf8')).tarball")"
+ npm install --prefix output/verify "$TARBALL" --ignore-scripts --no-audit --no-fund
+ node --input-type=module <<'NODE'
+ import assert from 'node:assert/strict';
+ import { createHash } from 'node:crypto';
+ import { spawnSync } from 'node:child_process';
+ import { readdirSync, readFileSync, statSync } from 'node:fs';
+ import path from 'node:path';
+
+ const report = JSON.parse(readFileSync('output/native-package-report.json', 'utf8'));
+ assert.equal(report.target, process.env.EXPECTED_TARGET);
+ assert.equal(report.entryCount, 5);
+ assert.equal(statSync(report.tarball).isFile(), true);
+
+ const packageRoot = path.join('output', 'verify', 'node_modules', ...report.packageName.split('/'));
+ const packageJson = JSON.parse(readFileSync(path.join(packageRoot, 'package.json'), 'utf8'));
+ const manifest = JSON.parse(readFileSync(path.join(packageRoot, 'native-manifest.json'), 'utf8'));
+ assert.equal(packageJson.name, report.packageName);
+ assert.equal(packageJson.version, report.version);
+ assert.deepEqual(packageJson.os, [process.env.EXPECTED_PLATFORM]);
+ assert.deepEqual(packageJson.cpu, [process.env.EXPECTED_ARCH]);
+ assert.deepEqual(packageJson.libc ?? [], process.env.EXPECTED_LIBC ? [process.env.EXPECTED_LIBC] : []);
+ assert.deepEqual(Object.keys(manifest).sort(), [
+ 'binary', 'packageName', 'packageVersion', 'schemaVersion', 'sha256', 'target'
+ ]);
+ assert.equal(manifest.schemaVersion, '1.0.0');
+ assert.equal(manifest.packageName, report.packageName);
+ assert.equal(manifest.packageVersion, report.version);
+ assert.equal(manifest.target, process.env.EXPECTED_TARGET);
+
+ const binary = path.join(packageRoot, manifest.binary);
+ const checksum = `sha256:${createHash('sha256').update(readFileSync(binary)).digest('hex')}`;
+ assert.equal(manifest.sha256, checksum);
+ assert.equal(report.binarySha256, checksum);
+ const version = spawnSync(binary, ['--version'], { encoding: 'utf8', windowsHide: true });
+ assert.equal(version.status, 0, version.stderr || version.error?.message);
+ assert.equal(version.stdout.trim(), `oaf ${report.version}`);
+
+ const files = [];
+ const walk = (directory, relative = '') => {
+ for (const entry of readdirSync(directory, { withFileTypes: true })) {
+ const next = relative ? `${relative}/${entry.name}` : entry.name;
+ if (entry.isDirectory()) walk(path.join(directory, entry.name), next);
+ else files.push(next);
+ }
+ };
+ walk(packageRoot);
+ assert.deepEqual(files.sort(), [
+ 'LICENSE', 'NOTICE', manifest.binary, 'native-manifest.json', 'package.json'
+ ].sort());
+ const expectedFiles = new Map(report.files.map((file) => [file.path, file]));
+ assert.equal(expectedFiles.size, files.length);
+ for (const file of files) {
+ const bytes = readFileSync(path.join(packageRoot, file));
+ const expected = expectedFiles.get(file);
+ assert(expected, `missing package report checksum for ${file}`);
+ assert.equal(createHash('sha1').update(bytes).digest('hex'), expected.sha1);
+ assert.equal(createHash('sha256').update(bytes).digest('hex'), expected.sha256);
+ }
+ NODE
+ - name: Record Linux ABI baseline
+ if: ${{ matrix.platform == 'linux' }}
+ shell: bash
+ run: |
+ ldd --version
+ file '${{ matrix.binary }}'
+ - name: Verify exact artifact in installed consumer
+ shell: bash
+ run: |
+ export MEMORY_RECALL_NATIVE_PACKAGE_TARBALL="$(node -p "JSON.parse(require('fs').readFileSync('output/native-package-report.json', 'utf8')).tarball")"
+ node scripts/native-code-intelligence-consumer-smoke.mjs
+ - name: Generate deterministic native SPDX SBOM
+ shell: bash
+ env:
+ GIT_COMMIT: ${{ github.sha }}
+ run: |
+ export SOURCE_CREATED="$(git show -s --format=%cI "$GIT_COMMIT")"
+ node --input-type=module <<'NODE'
+ import { createHash } from 'node:crypto';
+ import { readFileSync, writeFileSync } from 'node:fs';
+ import { buildNativeSpdxSbom } from './scripts/package-native-platform.mjs';
+
+ const packageReport = JSON.parse(readFileSync('output/native-package-report.json', 'utf8'));
+ const tarballSha256 = `sha256:${createHash('sha256').update(readFileSync(packageReport.tarball)).digest('hex')}`;
+ const sbom = buildNativeSpdxSbom({
+ packageReport,
+ commit: process.env.GIT_COMMIT,
+ created: new Date(process.env.SOURCE_CREATED).toISOString().replace('.000Z', 'Z'),
+ tarballSha256
+ });
+ writeFileSync(`output/native-package-${packageReport.target}.spdx.json`, `${JSON.stringify(sbom, null, 2)}\n`);
+ NODE
+ - name: Attest native package provenance
+ if: ${{ github.event_name != 'pull_request' }}
+ id: attest-package
+ uses: actions/attest@v4
+ with:
+ subject-path: output/native-packages/*.tgz
+ - name: Attest native package SBOM
+ if: ${{ github.event_name != 'pull_request' }}
+ uses: actions/attest@v4
+ with:
+ subject-path: output/native-packages/*.tgz
+ sbom-path: output/native-package-${{ matrix.target }}.spdx.json
+ - name: Record sanitized native package receipt
+ shell: bash
+ env:
+ EXPECTED_TARGET: ${{ matrix.target }}
+ EXPECTED_RUNNER: ${{ matrix.runner }}
+ GIT_COMMIT: ${{ github.sha }}
+ PACKAGE_ATTESTATION_ID: ${{ steps.attest-package.outputs.attestation-id }}
+ PACKAGE_ATTESTATION_URL: ${{ steps.attest-package.outputs.attestation-url }}
+ run: |
+ node --input-type=module <<'NODE'
+ import { createHash } from 'node:crypto';
+ import { readFileSync, writeFileSync } from 'node:fs';
+ import { buildNativeDistributionReceipt } from './scripts/package-native-platform.mjs';
+
+ const packageReport = JSON.parse(readFileSync('output/native-package-report.json', 'utf8'));
+ if (packageReport.target !== process.env.EXPECTED_TARGET) throw new Error('native package report target mismatch');
+ const tarballSha256 = `sha256:${createHash('sha256').update(readFileSync(packageReport.tarball)).digest('hex')}`;
+ const sbom = `output/native-package-${packageReport.target}.spdx.json`;
+ const receipt = buildNativeDistributionReceipt({
+ packageReport,
+ commit: process.env.GIT_COMMIT,
+ runner: process.env.EXPECTED_RUNNER,
+ tarballSha256,
+ sbomReport: {
+ name: `native-package-${packageReport.target}.spdx.json`,
+ sha256: `sha256:${createHash('sha256').update(readFileSync(sbom)).digest('hex')}`
+ },
+ consumerGateResult: 'pass',
+ packageAttestation: process.env.PACKAGE_ATTESTATION_ID ? {
+ id: process.env.PACKAGE_ATTESTATION_ID,
+ url: process.env.PACKAGE_ATTESTATION_URL
+ } : null
+ });
+ writeFileSync(`output/native-package-${receipt.target}-receipt.json`, `${JSON.stringify(receipt, null, 2)}\n`);
+ NODE
+ - name: Attest native receipt provenance
+ if: ${{ github.event_name != 'pull_request' }}
+ uses: actions/attest@v4
+ with:
+ subject-path: output/native-package-*-receipt.json
+ - name: Upload native package and receipt
+ uses: actions/upload-artifact@v6
+ with:
+ name: memory-recall-native-${{ matrix.target }}-${{ github.event_name == 'pull_request' && 'unsigned' || 'attested' }}-${{ github.sha }}
+ path: |
+ output/native-packages/*.tgz
+ output/native-package-*-receipt.json
+ output/native-package-*.spdx.json
+ if-no-files-found: error
+ retention-days: 14
+
+ native-release-set:
+ name: Native release set
+ if: ${{ github.event_name != 'pull_request' }}
+ needs: [rust, rust-ingest-graph-quality, rust-intelligence-eval, native-artifacts]
+ runs-on: ubuntu-latest
+ timeout-minutes: 10
+ steps:
+ - uses: actions/checkout@v7
+ - uses: actions/setup-node@v6
+ with:
+ node-version: 22.14.0
+ - name: Download all attested native packages
+ uses: actions/download-artifact@v8
+ with:
+ pattern: memory-recall-native-*-attested-${{ github.sha }}
+ path: output/native-release
+ merge-multiple: true
+ - name: Validate exact native release set
+ run: node scripts/native-release-set.mjs validate --artifacts output/native-release --version "$(node -p "require('./package.json').version")" --commit "$GITHUB_SHA"
+ - name: Verify native provenance signatures
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ shell: bash
+ run: |
+ while IFS= read -r -d '' artifact; do
+ gh attestation verify "$artifact" \
+ --repo "$GITHUB_REPOSITORY" \
+ --signer-workflow "$GITHUB_REPOSITORY/.github/workflows/rust.yml" \
+ --signer-digest "$GITHUB_SHA" \
+ --source-digest "$GITHUB_SHA" \
+ --deny-self-hosted-runners
+ done < <(find output/native-release -type f \( -name '*.tgz' -o -name 'native-package-*-receipt.json' \) -print0)
+ - name: Verify native SBOM signatures
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ shell: bash
+ run: |
+ while IFS= read -r -d '' artifact; do
+ gh attestation verify "$artifact" \
+ --repo "$GITHUB_REPOSITORY" \
+ --signer-workflow "$GITHUB_REPOSITORY/.github/workflows/rust.yml" \
+ --signer-digest "$GITHUB_SHA" \
+ --source-digest "$GITHUB_SHA" \
+ --predicate-type https://spdx.dev/Document/v2.3 \
+ --deny-self-hosted-runners
+ done < <(find output/native-release -type f -name '*.tgz' -print0)
+ - name: Upload exact native release set
+ uses: actions/upload-artifact@v6
+ with:
+ name: memory-recall-native-release-set-${{ github.sha }}
+ path: output/native-release
+ if-no-files-found: error
+ retention-days: 14
diff --git a/.npmignore b/.npmignore
index 2de09647..bc46b9fa 100644
--- a/.npmignore
+++ b/.npmignore
@@ -19,3 +19,4 @@ adapters/**/UPSTREAM.lock
*.zip
.DS_Store
REPOSITORY_MANIFEST.json.tmp
+REPOSITORY_MANIFEST.json
diff --git a/ASSIGN_TO_AGENT.md b/ASSIGN_TO_AGENT.md
index 7bca3463..c22cf30f 100644
--- a/ASSIGN_TO_AGENT.md
+++ b/ASSIGN_TO_AGENT.md
@@ -1,6 +1,6 @@
# Assignment Brief for the Development Agent
-You are working on **Memory Recall 1.1.0**, currently an unreleased release candidate. Evolve it through small verified changes. Do not rebuild the architecture from scratch and never claim that specified capabilities already exist.
+You are working on **Memory Recall 2.0.0**, currently a major-release candidate. Evolve it through small verified changes. Do not rebuild the architecture from scratch and never claim that specified capabilities already exist.
## Mission
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a01a0c83..2e3ec7f4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,48 @@
# Changelog
-## [Unreleased] — 1.1.0 release candidate
+## [Unreleased] — 2.0.0 major candidate
+
+### Added
+
+- Connected the loopback Control API and web Recall Map to healthy current Rust indexes. Browser reads stay bounded and read-only, preserve native coverage diagnostics, and return an exact build, refresh, repair, or package action instead of silently scanning with JS/TS.
+- Added source-backed community and entry-to-sink process evidence to the native Map, with bounded paths, confidence, and explicit truncation state.
+- Approved the Rust/Node production-engine boundary, added provider-neutral graph and language-evidence contracts, pinned a 43-repository Tier 1 benchmark corpus, and recorded a clean Phase 0 baseline. The baseline makes no competitor-parity claim.
+- Added a versioned, bounded Rust provider and made its packaged SQLite index the production default for graph, MCP, Control API, and web reads. `native-preview` and `auto` remain strict native aliases; the temporary JS/TS path requires explicit `compatibility` selection.
+- Added isolated packed-package proof and a reproducible Phase 1 compatibility receipt across JS/TS fixtures and two exact-commit repositories. The receipt records current import and call gaps and makes no accuracy, parity, or leadership claim.
+- Added PHP and Ruby native-preview structure, namespaces, traits and mixins, typed calls, imports, and framework-route evidence, completing the five planned Tier 1 language batches.
+- Added a deterministic Phase 2 aggregate over 14 fixtures and all 43 pinned Tier 1 repositories, with per-capability worst-case status, response bytes, resource measurements, and explicit node and edge budget diagnostics.
+- Added an isolated SQLite native source index with generation commits, incremental refresh, bounded queries, doctor/confirm-gated repair, and a no-write MCP preview. A reviewed integration fixture proves build, query, and exact no-op refresh behavior for all 14 Tier 1 languages.
+- Added deterministic bounded communities and evidence-backed entry-to-sink processes to the existing native `repo.architecture` MCP result, plus a reproducible Phase 4 correctness and query-deadline receipt. The MCP surface remains twelve read-only tools and no parity claim is made.
+- Added deterministic native hybrid search that ranks one exact hit, lexical matches, and bounded one-hop structural neighbors while returning source-backed relationship evidence through the existing `code.search` MCP tool.
+- Added safe constrained traversal to the existing `code.context` MCP tool. A current native index can filter direction, depth, and canonical edge kinds inside each SQLite expansion while keeping the public surface at twelve read-only tools.
+- Added five optional native-platform package templates, exact npm/Cargo/binary version alignment, a verified platform-binary resolver, and an offline macOS arm64 installed-package gate covering all fourteen Tier 1 parsers and the SQLite lifecycle without a compiler. A five-runner CI matrix now defines the same exact-tarball gate for the remaining targets, but those hosted runs, signing, and publication remain unproven.
+- Made MCP native by default. Each structural read requires a healthy current committed SQLite generation and otherwise returns an actionable build, refresh, repair, schema, target, or package error. It never silently falls back; explicit `compatibility` is the temporary JS/TS path.
+- Extended the isolated native-package consumer gate through package removal and same-version reinstall. It proves the CLI and both npm packages are removed while workspace source, governed memory, home configuration, and the SQLite index bundle remain unchanged, then reopens the same generation from freshly installed exact tarballs without Cargo, rustc, build, or refresh.
+- Added confirmed `mcp uninstall` for Codex, Claude Code, and Cursor. Install and removal now reject drifted entries, bind confirmation to exact config bytes, create private backups, write atomically, and preserve neighboring configuration and workspace data.
+- Added a Rust-index cross-service fixture for bounded import, call, trace, and process evidence. Same-name and unresolved negatives pass; multi-repository and parity claims remain false.
+- Added a Rust-owned SQLite repository registry and explicit repository-scoped search for up to eight registered indexes. Results carry deterministic repository-qualified identities; list and search remain bounded, sequential, read-only, and local. Cross-repository relationships, trace, impact, and parity remain unproven.
+
+### Fixed
+
+- Hardened the existing `connect` and `disconnect` config writer with exact preflight rechecks, private atomic replacement, and `0600` config and backup files.
+- Default packaged benchmarks now use bundled fixtures unless the caller explicitly supplies `--dataset`, preventing same-named repository files from changing the package benchmark.
+- `recall serve` now forwards interrupt and termination signals to the Control API child process.
+- Raised the native provider output ceiling within its existing 10 MB hard maximum so valid 5,000-node engine responses do not fail on medium repositories.
+- Native `index.status` now verifies the active SQLite generation against a bounded source snapshot and reports changed, added, deleted, partial, or unverified state without writing the database. Normal queries remain SQLite-only, and stale source state requires refresh rather than repair.
+- Native `index.refresh` now refuses to plan or write from incomplete discovery. If `maxFiles`, the byte budget, or the deadline prevents a complete source snapshot, it returns partial with zero writes and keeps the active generation unchanged; raising `maxFiles` permits a complete recovery refresh.
+- Python route extraction now inspects only executable decorator syntax, so `@app.route(...)` examples inside docstrings no longer become route nodes or handler edges.
+- Python framework routes now require imported and constructed FastAPI, APIRouter, Flask, or Blueprint receivers. Conventional Django URL patterns use structural positional arguments, ignore naming metadata, and leave unresolved `include(...)` composition explicit.
+- Python project metadata and root package markers now produce package-keyed configuration resources, exact configuration-to-package evidence, and freshness-sensitive absolute package resolution.
+
+### Changed
+
+- Stable npm publication is now native-first and fail-closed: one exact successful Rust run must supply all five checksum-verified packages, file-complete SPDX 2.3 SBOMs, and signed GitHub provenance. The root package is packed once, checksum-bound, given a complete SPDX document, attested, installed through the exact-artifact lifecycle, and published as those same bytes only after every native registry integrity and npm publish/SLSA attestation verifies. The workflow, command-line publisher, and exported root publisher all require the exact native artifact directory and repeat the five-package registry integrity, provenance, and npm signature audit immediately before any root lookup or publication. Root integrity and both npm predicates must also verify. The lane remains local and unproven until the remote five-platform and final release gates pass.
+- Token Saver and handoff measurement reuse the already-built context pack for their real MCP stdio readback, avoiding a second repository scan while preserving fingerprint verification.
+- Native changed-file refresh now parses only the bounded invalidation closure plus dependency context. The clean Phase 3 receipt covers 781 files across one dependency fixture and three pinned repository scopes; it keeps scale, competitor, parity, and leadership claims false.
+- Tier 1 documentation now names the 75 capability rows that meet the sampled Phase 2 floor, the 78 applicable rows that remain unmeasured, the zero recorded floor failures, and the single not-applicable row. Go, Rust, and Dart exports retain their sampled fixture-plus-three-repository floor. Dart calls and heritage, Kotlin calls and types, and C++ types also retain their reviewed sampled floors. C++ heritage now meets the sampled floor for direct base specifiers: template arguments and body references are explicit negative decoys, while template substitution, alias expansion, dependent names, and compiler-equivalent inheritance analysis remain unmeasured. Every Tier 1 language remains unmeasured overall; no competitor, parity, leadership, general multi-repository, or scale claim is made.
+- The npm package excludes checkout-only Tier 1 audit and real-world benchmark scripts, the nested Rust build guide, the architecture bitmap, and the 114 KiB capability matrix, keeping the verified unpacked package below its fixed size ceiling.
+
+## [1.1.0] — 2026-07-15
No breaking CLI migration is required. Local-only defaults, proposal-gated memory, and read-only MCP remain unchanged.
@@ -30,7 +72,7 @@ No breaking CLI migration is required. Local-only defaults, proposal-gated memor
### Internal
-- Release gates cover 659 Node tests, 182 protocol fixtures, 144 evaluation assertions, installed-package smoke, browser smoke, package-content verification, and release-evidence drift checks.
+- Release gates cover the full Node suite, 182 protocol fixtures, 144 evaluation assertions, installed-package smoke, browser smoke, package-content verification, and release-evidence drift checks.
## [1.0.5] — 2026-07-09
diff --git a/DESIGN.md b/DESIGN.md
index 5ef06d9d..33f89299 100644
--- a/DESIGN.md
+++ b/DESIGN.md
@@ -11,7 +11,10 @@ This is the canonical UI contract. Code, prototypes, screenshots, and design-age
- Typography: native system sans for interface text; native monospace only for code, paths, hashes, commands, and identifiers.
- Shape: 6 px controls and 8 px bounded panels. Lists and dividers take priority over nested cards.
- Motion: state transitions only. No ambient or decorative animation.
-- Copy: object, state, and action labels only. No product slogan inside the application shell.
+- Density: minimal means fewer elements, not oversized gaps. Use the spacing scale to group related work and do not add empty height for visual drama.
+- Decoration: no gradients, glass effects, glowing accents, decorative illustrations, heavy shadows, or walls of equal cards. Color and containers must communicate structure or state.
+- Copy: object, state, and action labels only. No product slogan, manifesto, inspirational subtitle, or capability hype inside the application shell.
+- AI language: use `AI`, `intelligent`, or similar terms only when naming a real model, provider, setting, or technical boundary. Never use them as decoration or a product claim.
## Principles
@@ -49,6 +52,7 @@ Executable tokens live in `packages/ui/tokens.json` and `apps/web/tokens.css`.
- Spacing: `4, 8, 12, 16, 24, 32, 48, 64`.
- Radius: controls 6 px and bounded panels 8 px.
- Prefer borders and surface contrast over shadows.
+- Avoid nested panels when a divider, row, or disclosure communicates the same hierarchy.
## AI-native components
diff --git a/HANDOFF_VERIFICATION.json b/HANDOFF_VERIFICATION.json
index 48840450..7fd17837 100644
--- a/HANDOFF_VERIFICATION.json
+++ b/HANDOFF_VERIFICATION.json
@@ -1,8 +1,8 @@
{
"schemaVersion": "1.0.0",
- "project": "open-agent-fabric",
- "version": "0.2.0-dev",
- "verifiedAt": "2026-07-08T15:33:32.001Z",
+ "project": "memory-recall",
+ "version": "2.0.0",
+ "verifiedAt": "2026-07-19T13:48:38.922Z",
"environment": {
"platform": "darwin",
"release": "25.5.0",
@@ -18,32 +18,32 @@
{
"command": "npm run check",
"exitCode": 0,
- "durationMs": 284
+ "durationMs": 340
},
{
"command": "npm run protocol:validate",
"exitCode": 0,
- "durationMs": 176
+ "durationMs": 233
},
{
"command": "npm test",
"exitCode": 0,
- "durationMs": 47096
+ "durationMs": 91889
},
{
"command": "npm run eval",
"exitCode": 0,
- "durationMs": 282
+ "durationMs": 294
},
{
"command": "npm run demo",
"exitCode": 0,
- "durationMs": 163
+ "durationMs": 183
},
{
"command": "npm run native:smoke",
"exitCode": 0,
- "durationMs": 223
+ "durationMs": 236
}
],
"result": "passed"
diff --git a/PROJECT_STATUS.json b/PROJECT_STATUS.json
index 3bb09671..4ac23509 100644
--- a/PROJECT_STATUS.json
+++ b/PROJECT_STATUS.json
@@ -1,8 +1,8 @@
{
"schemaVersion": "1.0.0",
"project": "memory-recall",
- "release": "1.1.0",
- "phase": "1.1-release-candidate-readiness",
+ "release": "2.0.0",
+ "phase": "2.0.0-major-readiness",
"nextTask": null,
"defaults": {
"network": "deny",
@@ -69,9 +69,19 @@
"evidence": [
"apps/web/index.html",
"apps/web/app.js",
+ "apps/web/orientation-model.js",
+ "apps/web/orientation-view.js",
+ "apps/web/source-map-view.js",
+ "apps/web/graph-layout-worker.js",
+ "apps/web/graph-viewport.js",
+ "apps/web/memory-graph-view.js",
"apps/web/styles.css",
"apps/web/tokens.css",
+ "tests/web-orientation.test.mjs",
+ "tests/web-source-map.test.mjs",
+ "tests/web-memory-graph.test.mjs",
"tests/web-shell.test.mjs",
+ "scripts/consumer-browser-smoke.mjs",
"docs/implementation/OAF-022-production-web-shell-note.md",
"docs/implementation/OAF-023-run-context-inspector-note.md",
"docs/implementation/OAF-024-memory-evidence-approval-views-note.md",
@@ -114,10 +124,8 @@
"tests/context-compiler.test.mjs",
"tests/context-candidate-sources.test.mjs",
"tests/native-memory-profile-context.test.mjs",
- "tests/ast-code-candidate-source.test.mjs",
- "tests/source-graph-preview.test.mjs",
- "tests/recall-map-ranking.test.mjs",
- "evals/recall-map/architecture-ranking.v1.json",
+ "tests/cli-graph-index.test.mjs",
+ "tests/mcp-code-intelligence.test.mjs",
"tests/cli.test.mjs",
"tests/control-api-boundary.test.mjs",
"packages/protocol/schemas/candidate-source-request.schema.json",
@@ -127,6 +135,7 @@
"packages/protocol/schemas/source-graph-preview.schema.json",
"packages/protocol/src/source-graph-locator.mjs",
"packages/source-graph/src/index.mjs",
+ "packages/source-graph/src/native-index-projection.mjs",
"packages/protocol/schemas/context-candidate.schema.json",
"packages/protocol/schemas/context-selection-policy.schema.json",
"packages/protocol/schemas/context-selection-result.schema.json",
@@ -137,15 +146,38 @@
"docs/implementation/OAF-012-context-manifests-note.md"
],
"limitations": [
- "Native exact, lexical, AST-code, and graph locator candidate sources only; AST-code also exposes dependency-free JS/TS symbol-index and source-graph queries plus a bounded read-only CLI/API source-graph preview with 512 KiB default static JS/TS file coverage and a 1 MiB hard ceiling",
+ "Native exact and lexical context candidate sources are retained; repository structure and context-pack graph hints come only from the packaged Rust SQLite index",
"Context views are opt-in deterministic local representations for noisy selected records and tool output; they preserve original/view hashes and token accounting but do not replace canonical source or memory state",
"No model reranking, embeddings, vector database, graph database, external search, browser automation, outbound network, or adapter activation",
"Compressed memory profile context and oaf measure savings use bounded local before/after delivery-token estimates over a realistic workspace candidate-file and git-history baseline, surfaced in the memory cockpit and MCP stats; MCP stats separates context.profile compression-path savings from memory.recall compaction savings and does not claim provider billing-token savings",
- "Native source graph is read-only derived metadata; graph candidate records are locator-only and it is not canonical source state, not a graph database, and not persisted as memory",
+ "Native source-graph projections are read-only, locator-only derived metadata from the explicit local SQLite index; they are not canonical source or memory state",
"Token estimate is approximate",
"Manifest persistence is local native or repository-layer only; no production orchestration is implied"
]
},
+ {
+ "id": "source.graph-index",
+ "name": "Persistent incremental polyglot Rust source index",
+ "status": "implemented",
+ "evidence": [
+ "apps/cli/oaf.mjs",
+ "rust/oaf-index/src/lib.rs",
+ "rust/oaf-index/src/store.rs",
+ "providers/native/code-intelligence-rust/src/index.mjs",
+ "packages/source-graph/src/native-index-projection.mjs",
+ "tests/native-code-intelligence-index.test.mjs",
+ "tests/cli-graph-index.test.mjs",
+ "tests/mcp-code-intelligence.test.mjs",
+ "docs/usage/mcp-server-reference.md",
+ "docs/usage/support-matrix.md"
+ ],
+ "limitations": [
+ "Index writes require an explicit graph index writer command; all CLI, MCP, Control API, and web reads require a healthy current committed generation and fail closed otherwise",
+ "Incremental refresh reuses unchanged file records and reparses changed, added, renamed, or deleted files with bounded dependency invalidation",
+ "The index contains hashes, locators, structural parse metadata, and evidence; it contains no raw source bodies or absolute workspace paths",
+ "The fourteen shipped parsers remain honestly capability-bounded; semantic embeddings, remote indexes, and a graph database are not claimed"
+ ]
+ },
{
"id": "context.candidate-sources",
"name": "Provider-neutral context candidate-source generation",
@@ -154,13 +186,8 @@
"packages/context-compiler/src/index.mjs",
"providers/native/context-candidate-exact/provider.json",
"providers/native/context-candidate-lexical/provider.json",
- "providers/native/context-candidate-ast-code/provider.json",
- "providers/native/context-candidate-graph/provider.json",
"providers/native/catalog.json",
"tests/context-candidate-sources.test.mjs",
- "tests/ast-code-candidate-source.test.mjs",
- "tests/source-graph-preview.test.mjs",
- "tests/recall-map-ranking.test.mjs",
"packages/adapter-contracts/src/index.mjs",
"packages/protocol/schemas/candidate-source-descriptor.schema.json",
"packages/protocol/schemas/candidate-source-hit.schema.json",
@@ -173,8 +200,8 @@
"docs/architecture/context-compiler.md"
],
"limitations": [
- "Only native exact, lexical, AST-code, and graph locator sources are implemented and enabled",
- "AST-code source is a dependency-free static JS/TS chunker with symbol index and read-only source graph preview helpers; graph source emits locator-only derived JS/TS graph hits; preview facade input and ranking output share the strict source-graph locator and label grammars; over-limit files remain hash/read-plan-only and are not treated as symbol-impact coverage; coverage distinguishes declared out-of-scope directories from source-relevant excluded trees and records unreadable source directories as partial static scope without hiding readable siblings; it is not a full semantic parser, language server, graph database, or executor",
+ "Only native exact and lexical candidate sources are enabled; code-intelligence candidates and source-graph previews are projections of the packaged Rust SQLite index",
+ "Context Compiler consumes locator-only native index evidence and never receives raw source bodies; missing, stale, corrupt, or unavailable indexes remain explicit rather than selecting another intelligence engine",
"Vector, temporal, preference, and episode sources are declared but unavailable",
"Sources generate candidates only; final selection remains in the Context Compiler selector",
"No external adapters, outbound network, embeddings, vector database, graph database, browser automation, or public search endpoint"
@@ -196,7 +223,7 @@
"docs/usage/recall-map.md"
],
"limitations": [
- "CLI only: Recall Map composes the existing bounded JS/TS static source graph and governed local SQLite memory status; it does not create a missing SQLite store or persist a graph.",
+ "Recall Map composes the healthy current native SQLite index and governed local SQLite memory status; it does not create a missing SQLite store or persist a graph.",
"The command is read-only and local-only: no workspace writes, canonical-memory mutation, model or network calls, external adapters, raw source bodies, or absolute workspace paths are emitted.",
"Recall Map API, browser, and MCP map surfaces are not implied by this CLI capability."
]
@@ -320,7 +347,7 @@
"docs/implementation/OAF-031-context-intake-preview-note.md"
],
"limitations": [
- "Generates schema-validated local handoff reports from explicit source-family selections over documented harness project files, explicit user-selected relative files, compact native JS/TS source-graph hints, a utility read plan, and a copyable launch prompt",
+ "Generates schema-validated local handoff reports from explicit source-family selections over documented harness project files, explicit user-selected relative files, compact native source-graph hints, a utility read plan, and a copyable launch prompt",
"Omission refs expose skipped context through safe locators, hashes, token costs, reason codes, and recovery hints without embedding raw bodies",
"Utility read plans record required local reads, changed-locator coverage, graph-hint coverage, redacted content hashes for safely readable changed files, aggregate changed-source byte/token counts, unavailable-hash reasons for missing or unsafe changed files, explicit user-selected files omitted by budget, and source-selection reduction without embedding raw source bodies",
"Context packs preserve requested source families, user-selected locators, and changed locators in schema-backed requestedInputs, and reject secret-like or absolute-path objective and step text before rendering handoff markdown",
@@ -785,8 +812,8 @@
"docs/release/1.0-RELEASE-CHECKLIST.md"
],
"limitations": [
- "memory-recall 1.1.0 is the package release candidate; verify `npm view memory-recall version` returns 1.1.0 before using the global Recall Map quickstart",
- "Publishing, tagging, or signing the 1.1.0 release candidate remains a maintainer action",
+ "memory-recall 2.0.0 is the source major-release candidate; use `npm view memory-recall version` to verify the current registry release before global installation",
+ "Publishing, tagging, or signing the 2.0.0 major release remains a maintainer action",
"No signing keys, release credentials, hosted publishing automation, external writes, or external adapter activation are added"
]
},
@@ -874,6 +901,7 @@
"packages/harness-context/src/index.mjs",
"tests/protocol-bridges.test.mjs",
"tests/cli.test.mjs",
+ "tests/mcp-code-intelligence.test.mjs",
"docs/architecture/protocol-bridges.md",
"docs/implementation/OAF-028-protocol-bridges-note.md"
],
@@ -882,6 +910,7 @@
"In-process dependency-free MCP-shaped bridge plus local read-only CLI stdio compositions and the preview-confirm mcp install planner using npm --silent; no HTTP, SSE, hosted bridge, or network listener is started",
"Read-only resources expose sanitized summaries for status, latest context manifest, latest run, memory proposals, handoff/artifact review, opt-in current context packs, auto-discovered pinned context-pack use plans, pinned context-pack registry verification, skill catalog, per-skill load plans, and the reviewed tool catalog; they do not expose write tools, source bodies, skill bodies, tool manifest bodies, prompts, model results, credentials, provider URLs, absolute local paths, external egress, or canonical state mutation",
"MCP memory.recall and context.profile serve active temporal facts first and pending proposal facts separately, include active/proposal count summaries, support since cursors for deltas, and persist last-delivered cursors locally per client/scope",
+ "The read-only MCP server exposes twelve tools: governed memory and compact context plus repository map, architecture, index status, code search, symbol context, call trace, dependencies, routes, and changed-file impact; symbol context supports optional native direction, depth, and canonical edge-kind constraints, and all structural results are bounded and locator-only",
"The read-only bridge never approves proposals or activates memory",
"The MCP token-saver install command writes only the selected local client MCP config entry after --apply plus a matching dry-run fingerprint; default dry-run prints exact config only, rejects --write, and does not print raw home config bodies or absolute paths",
"The stdio bridge enforces bounded stdin, JSON-RPC line size, message count, child runtime, child stdout/stderr, JSON-RPC id, method, resource URI, and tool name limits; JSON-RPC batch arrays are rejected and request-metadata failures are redacted",
@@ -1023,10 +1052,74 @@
"Most fixtures are expectations, not evidence that adapters are installed or passing",
"adapter:tool:ecc is the single experimental exception with executable conformance evidence"
]
+ },
+ {
+ "id": "code-intelligence.polyglot-production-engine",
+ "name": "Polyglot production code-intelligence engine contract",
+ "status": "experimental",
+ "evidence": [
+ "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md",
+ "docs/adr/0023-production-rust-code-intelligence-engine.md",
+ "packages/protocol/schemas/code-intelligence-graph.schema.json",
+ "packages/protocol/schemas/code-intelligence-capability-matrix.schema.json",
+ "packages/protocol/schemas/code-intelligence-benchmark-manifest.schema.json",
+ "packages/protocol/schemas/code-intelligence-engine-request.schema.json",
+ "packages/protocol/schemas/code-intelligence-engine-response.schema.json",
+ "packages/protocol/src/code-intelligence-contract.mjs",
+ "evals/code-intelligence/capability-matrix.v1.json",
+ "evals/code-intelligence/corpus.v1.json",
+ "evals/code-intelligence/benchmark-gates.v1.json",
+ "evals/code-intelligence/results/phase2-batch-a.json",
+ "evals/code-intelligence/results/phase2-batch-b.json",
+ "evals/code-intelligence/results/phase2-batch-c.json",
+ "evals/code-intelligence/results/phase2-batch-d.json",
+ "evals/code-intelligence/results/phase2-batch-e.json",
+ "evals/code-intelligence/results/phase2-tier1-summary.json",
+ "evals/code-intelligence/results/phase3-source-index.json",
+ "evals/code-intelligence/results/phase4-intelligence.json",
+ "evals/code-intelligence/results/phase5-cross-service.json",
+ ".github/workflows/rust.yml",
+ "providers/native/code-intelligence-rust/src/index.mjs",
+ "providers/native/code-intelligence-rust/src/binary-resolver.mjs",
+ "scripts/package-native-platform.mjs",
+ "scripts/native-code-intelligence-consumer-smoke.mjs",
+ "scripts/code-intelligence-phase2-tier1.mjs",
+ "scripts/code-intelligence-phase3-index.mjs",
+ "scripts/code-intelligence-phase4-intelligence.mjs",
+ "scripts/code-intelligence-phase5-cross-service.mjs",
+ "tests/code-intelligence-contract.test.mjs",
+ "tests/code-intelligence-index-contract.test.mjs",
+ "tests/code-intelligence-tier1.test.mjs",
+ "tests/mcp-code-intelligence.test.mjs",
+ "tests/native-code-intelligence-14-languages.test.mjs",
+ "tests/native-code-intelligence-provider.test.mjs",
+ "tests/code-intelligence-phase5-cross-service.test.mjs",
+ "tests/native-binary-resolver.test.mjs",
+ "tests/native-platform-packaging.test.mjs",
+ "tests/control-api-boundary.test.mjs",
+ "tests/web-orientation.test.mjs",
+ "rust/oaf-ingest/src/lib.rs",
+ "rust/oaf/src/index_protocol.rs",
+ "rust/oaf-index/tests/community_process_projection.rs",
+ "tests/native-code-intelligence-consumer-smoke.test.mjs"
+ ],
+ "limitations": [
+ "Graph, MCP, Control API, and web reads use verified packaged Rust and a healthy current committed SQLite index. Missing, stale, corrupt, mismatched, or unavailable native state fails closed with an exact build, refresh, repair, schema, target, or package action; no JavaScript intelligence fallback remains.",
+ "The current registry release does not ship the new Rust binary. This source checkout has exact-version optional package templates, a verified resolver, and a five-native-runner packaging gate; the workflow, command-line publisher, and exported root publisher fail closed unless an exact signed five-package artifact directory passes version, commit, registry integrity, provenance, and npm signature verification immediately before the root lookup or publication. The macOS arm64 root-plus-platform packed install passes without Cargo or rustc, including explicit first-run indexing, all twelve MCP tools, and installed-package absence checks for the retired JavaScript source-graph paths; the four hosted target runs, real signed attestations, publication, and published-package promotion remain unproven.",
+ "Phase 2 covers 14 fixtures and all 43 pinned Tier 1 repositories; 75 capability rows meet the sampled floor, 78 applicable rows remain unmeasured, no row has a recorded floor failure, and C heritage is the single not-applicable row. Reviewed imports preserve full coordinates across all fourteen Tier 1 language fixtures plus three pinned repositories per language. Go, Rust, and Dart exports meet the sampled floor across one fixture and three pinned repositories per language. Dart calls and heritage, Kotlin calls and types, and C++ types retain their reviewed sampled floors. C++ heritage now meets the sampled floor for direct base specifiers: template arguments and body references are explicit negative decoys, while template substitution, alias expansion, dependent names, and compiler-equivalent inheritance analysis remain unmeasured. Generic substitution, compiler-equivalent analysis, grouped PHP imports, broader framework or monorepo resolution, and the remaining applicable capability rows remain unmeasured. Every Tier 1 language remains overall unmeasured; missing rows remain explicit, and no competitor, parity, or leadership claim is made.",
+ "Five bounded repository scopes report explicit node or edge omissions; their available evidence is partial and no scale claim is made.",
+ "GitNexus and Codebase Memory MCP remain unmeasured on the pinned corpus.",
+ "Phase 3 adds the isolated SQLite lifecycle, bounded invalidation refresh, watcher coordination, doctor/repair, CLI, provider, explicit read-only MCP preview, and a clean four-case performance receipt over 781 files; it does not promote the runtime default, bundle a native binary, move web, prove multi-repository or million-node scale, or make a parity or leadership claim.",
+ "Phase 4 adds deterministic bounded exact, lexical, and one-hop structural search plus communities, evidence-backed entry-to-sink processes, and constrained direction/depth/edge-kind traversal through the existing native MCP tools. Its local fixture proves deterministic output, relationship evidence, read-only behavior, and the two-second query deadline; it does not prove per-language process support, competitor parity, leadership, multi-repository behavior, or million-node scale.",
+ "The Phase 5 fixtures prove bounded cross-service evidence inside one repository and an experimental exact Go path across two explicitly registered repositories. The Rust-owned SQLite registry supports bounded search across up to eight indexes; exact Go module evidence drives dependencies, one entry-to-service trace, and reverse impact through the existing twelve MCP tools, with same-name wrong-module decoy rejection. General cross-repository and cross-language resolution, competitor parity, and scale remain unproven.",
+ "Native index.status now performs a bounded, read-only source-hash comparison against the active SQLite generation and reports source changes or unverified bounds as stale. Persisted node, edge, or file omissions remain partial. Normal queries remain SQLite-only, indexes created before scan-scope persistence require a rebuild for verified freshness, and historical custom max-file-byte settings can conservatively produce false-stale results because that setting is not yet persisted.",
+ "Default MCP and the strict auto/native-preview aliases recheck native index freshness before each structural tool call. They use only a healthy current committed generation; every other native state fails with an actionable bounded error. They never build, refresh, repair, or select a JavaScript intelligence path.",
+ "The local Phase 6 distribution gate proves current-platform package discovery, compiler-free 14-language parsing without the legacy JS intelligence module, installed SQLite lifecycle, confirmed MCP config install/removal with private backups and neighbor preservation, package removal with workspace-state preservation, and same-version exact-tarball reinstall on macOS arm64. CI defines the same package gate for all five initial targets, but the four non-local lanes have not run here; signed or published packages, cross-version downgrade, and cross-platform release readiness remain unproven."
+ ]
}
],
"qualitySnapshot": {
- "asOf": "2026-07-15",
+ "asOf": "2026-07-18",
"commands": [
"npm ci --ignore-scripts --no-audit --no-fund",
"npm run local:run",
@@ -1046,10 +1139,25 @@
"npm run native:smoke",
"npm run verify:handoff",
"npm run consumer:smoke",
- "npm run consumer:browser-smoke"
+ "npm run consumer:browser-smoke",
+ "node --test tests/code-intelligence-contract.test.mjs",
+ "node scripts/pin-code-intelligence-corpus.mjs --check",
+ "node scripts/rust-code-intelligence-protocol-quality.mjs",
+ "node scripts/native-code-intelligence-consumer-smoke.mjs",
+ "node scripts/code-intelligence-batch-a.mjs --check",
+ "node scripts/code-intelligence-batch-b.mjs --check",
+ "node scripts/code-intelligence-batch-c.mjs --check",
+ "node scripts/code-intelligence-batch-d.mjs --check",
+ "node scripts/code-intelligence-batch-e.mjs --check",
+ "node scripts/code-intelligence-phase2-tier1.mjs --check",
+ "node scripts/code-intelligence-phase3-index.mjs --check",
+ "node scripts/code-intelligence-phase4-intelligence.mjs --check",
+ "node scripts/code-intelligence-phase5-cross-service.mjs --check",
+ "cargo test --locked --manifest-path rust/Cargo.toml -p oaf-index --test repository_registry",
+ "node --test tests/native-code-intelligence-provider.test.mjs tests/native-code-intelligence-repository-provider.test.mjs"
],
- "testsExpected": 660,
- "protocolFixturesExpected": 182,
+ "testsExpected": 715,
+ "protocolFixturesExpected": 208,
"evaluationsExpected": 144,
"note": "Counts are a dated snapshot; command results and HANDOFF_VERIFICATION.json are authoritative."
}
diff --git a/README.md b/README.md
index 77d9a1ee..1b075be5 100644
--- a/README.md
+++ b/README.md
@@ -15,25 +15,25 @@
Local repo memory and context for Codex, Claude Code, Cursor, and other coding agents.
- Governed SQLite memory. Read-only MCP. Experimental Rust acceleration requires a local build. The default local path needs no hosted account or model API key.
+ Governed SQLite memory. Read-only MCP. Verified packaged Rust reads when a current local index exists. No hosted account or model API key required.
Memory Recall turns a repository into a governed context source. New agent
sessions get reviewed repo facts, changed-file impact, required local reads,
and proof of what was sent instead of a giant pasted transcript.
-The source and package release candidate are 1.1.0. Check the registry before
-using the global install path:
+The source checkout is the 2.0.0 major-release candidate. The registry remains the
+installation authority:
```bash
npm view memory-recall version
-npm install -g memory-recall@1.1.0
+npm install -g memory-recall@latest
recall setup
recall map --root . --sqlite .local/memory.sqlite --format summary
recall handoff
```
-If the registry still reports an older version, use the source checkout:
+Use the source checkout when testing changes that are not yet on the registry:
```bash
git clone https://github.com/rebel0789/Memory-Recall.git
@@ -59,8 +59,10 @@ for preserved legacy names and URIs.
| --- | --- |
| New agent session | A compact handoff with required local reads, changed-file coverage, hashes, and MCP proof. |
| Repo memory | SQLite/FTS5 facts that start as proposals and become ACTIVE only after review. |
-| Fast local code intelligence | Implemented JS/TS static graph; experimental Rust ingest and graph/search require a local build. |
-| First look at a repository | Recall Map shows bounded source coverage, entry points, changed impact, and separate memory status without writing. |
+| Fast local code intelligence | Packaged Rust is the only engine. Reads use the local SQLite index and return an explicit build, refresh, repair, or package action when native state is not ready. |
+| Larger repositories | Explicit local index with incremental refresh and watch mode; MCP and the web workbench read it without writing. |
+| Two-repository Go calls | Experimental Rust path resolves an exact Go module import, traces one entry-to-service call, and reports reverse impact with source evidence. |
+| First look at a repository | The web Recall Map reads a healthy current Rust index, including source-backed communities and bounded entry-to-sink processes. Until first-run indexing is complete, it returns a bounded recovery state instead of silently switching engines. |
| Long context pressure | Repeat MCP pulls use cursors and deltas instead of resending the same profile. |
| Trust | Dry-run first, confirm-gated writes, local-only storage, and no automatic transcript import. |
| Codebase context | Source graph hints, locator-only context packs, and manifest-backed selection. |
@@ -68,9 +70,9 @@ for preserved legacy names and URIs.
## Five-Minute Path
```bash
-# Confirm and install the 1.1.0 package.
+# Confirm and install the current registry release.
npm view memory-recall version
-npm install -g memory-recall@1.1.0
+npm install -g memory-recall@latest
# Create local state only. This does not scan the repository.
recall setup
@@ -113,8 +115,14 @@ approval.
Manual MCP install flow: run the `mcp install --client claude-code --dry-run --format json`
preview, review it, then run the printed `--apply --confirm `
-command only when the fingerprint matches. That path installs the five-tool
-read-only MCP server. `recall connect` is separate: it installs a resource
+command only when the fingerprint matches. That path installs the twelve-tool
+read-only MCP server with `--engine native`; install never builds or refreshes an
+index, and its `indexBuildCommand` is the separate explicit native-index write.
+Until a healthy, current native index exists, structural tools return the exact
+native recovery command. Reverse the install with `recall mcp uninstall --client
+claude-code --dry-run --format json`, then the printed confirmed command. It
+removes only the exact package-owned entry and preserves neighboring servers.
+`recall connect` is separate: it installs a resource
bridge plus hooks for Codex or Claude Code, and its MCP `tools/list` is empty.
The support matrix names the difference and reversal path.
@@ -147,6 +155,7 @@ billing claims.
| Temporal current-truth fixture | 10/10 correct and clean; not a token-saving claim | `recall bench temporal --read-only --root . --format json` |
| In-repo structured-ingest sufficiency | 12/12 checkout-derived answers present after structured ingest | Source checkout: `npm run recall -- bench realqa --read-only --root . --format json` |
| Truth-floor regression gate | Fixture-backed merge gate, not a user-task benchmark | `recall benchmark truth-floor --suite benchmark-truth-floor --dataset evals/benchmark-truth-floor/cases.v1.json --format json` |
+| Native source-index Phase 3 | Clean pinned receipt over 781 files, 6,808 nodes, and 15,115 edges; machine-specific, not a scale or parity claim | Source checkout: `node scripts/code-intelligence-phase3-index.mjs --check` |
The package bundles the session, temporal, and truth-floor fixtures. The
structured-ingest check measures this repository's own status and provider
@@ -177,19 +186,36 @@ cross-product benchmark leaderboard.
harness; strict result import; pending-only proposals; and source-rechecked
named approval. Optional direct API execution is experimental and explicitly
consented.
-- Read-only `recall mcp server` exposing `memory.recall`, `context.profile`,
- `context.pack`, `repo.map`, and `code.impact` over local stdio with active
- facts separated from proposals.
+- Read-only `recall mcp server` exposing twelve local tools for governed memory,
+ compact context, repository maps, architecture, code search, symbol context,
+ call traces, dependencies, routes, changed-file impact, and index status.
+- Production-default packaged Rust reads and a local SQLite
+ generation store, incremental refresh, doctor/confirm-gated repair, bounded
+ queries, and read-only MCP access to a prebuilt index. Native
+ `repo.architecture` returns deterministic communities, bounded entry-to-sink
+ processes, and their source relationships. Native use requires a verified
+ matching binary from a local build, an explicit environment path, or an
+ optional platform package. Graph commands, direct MCP startup, and
+ installer-generated MCP config select native by default and have no alternate
+ intelligence engine. The current-host packed-install gate is green; other targets,
+ signing, registry publication, and full language parity remain unproven.
- Persisted MCP cursors and `since` deltas so repeated reads send only changed
current truth, including after restart.
- Preview-then-confirm install paths for Claude Code, Cursor, and Codex with
explicit project root and project SQLite memory path.
- Local `/memory` cockpit over the loopback Control API with temporal facts,
proposal counts, MCP delivery stats, and confirm-gated approvals.
-- Experimental Rust acceleration paths for local ingest, governed graph/search,
- wiki, MCP, and static analysis when explicitly invoked. They require a local
- `cargo build --release` before use; Rust source ships in the npm package, but
- build output stays out of the tarball.
+- Rust paths for local ingest, governed graph/search, wiki, MCP, and static
+ analysis. Read commands select native by default; source checkouts
+ can use a local release build, and installed packages can use a verified
+ matching optional platform package.
+- Release-candidate native packaging now has five target-specific optional
+ package manifests and a checksum-, version-, target-, and path-verified
+ resolver. A local macOS arm64 packed-install gate passes without Cargo or
+ Rust and covers all fourteen Tier 1 parsers plus the SQLite lifecycle. These
+ platform packages are not published or signed yet, so stable publication
+ remains blocked until the five verified packages are available before the
+ root package.
- Deterministic local benches for temporal correctness, session delta delivery,
and checkout-derived structured-ingest sufficiency.
@@ -200,7 +226,9 @@ Memory Recall is built around explicit authority:
- memory ingest creates proposals, not trusted facts;
- active memory requires review and approval;
- rejections and supersessions are recorded, not silently deleted;
-- MCP resources are read-only by default;
+- MCP structural reads do not write canonical memory, source indexes, config,
+ network, or external systems; `memory.recall` and `context.profile` may persist
+ local cursors and append delivery statistics;
- setup and connect commands support dry-run previews;
- local storage remains local unless you intentionally move it;
- external adapters stay disabled until reviewed, pinned, licensed, and tested.
@@ -214,7 +242,9 @@ for the deeper boundary rules.
Production PostgreSQL repositories, production authentication, hosted embeddings,
vector databases, hosted memory sync, write-capable MCP tools, automatic harness
history import, real social connectors, hardened sandboxes, signed Agent Pack
-distribution, and a production frontend framework are not claimed.
+distribution, fully measured Tier 1 language capability, general
+cross-repository analysis beyond the bounded exact Go two-repository path, and
+cross-platform million-node performance are not claimed.
`PROJECT_STATUS.json` is the machine-readable source for current capability
status and limitations.
@@ -234,6 +264,15 @@ recall token-saver
recall graph stats --root . --format summary
recall graph search --root . --query "auth workflow" --format summary
recall graph trace --root . --symbol runAuthWorkflow --format summary
+recall graph index --status --root . --format summary
+recall graph index --write --root . --format json
+recall graph index --refresh --watch --root . --format summary
+recall graph index --write --engine native --root . --format summary
+recall graph index --query main --kind exact --engine native --root . --format json
+recall graph index --doctor --engine native --root . --format summary
+recall graph repositories register --write --root . --repository repositories/client --name Client --format json
+recall graph repositories list --read-only --root . --limit 10 --format summary
+recall mcp server --read-only --engine native --root . --stdio
recall context handoff --read-only --from codex --root . --objective "Prepare handoff" --step "select next agent context" --target codex --format summary
recall handoff
```
@@ -264,12 +303,12 @@ boundaries.
## Status
-Release candidate: **1.1.0**. Registry version: verify with `npm view memory-recall version`.
+Source major-release candidate: **2.0.0**. Registry version: verify with `npm view memory-recall version`.
| Surface | Status |
| --- | --- |
-| Source checkout | 1.1.0 local-ready release candidate |
-| npm package | 1.1.0 publish-ready; use only after the registry reports 1.1.0 |
+| Source checkout | 2.0.0 local-ready major-release candidate |
+| npm package | Install the current registry release with `memory-recall@latest` |
| CLI | `recall` |
| Marketplace / plugin registry | Manifest prepared; not submitted |
| Client hooks | Opt-in Codex/Claude connect writer; dry-run/manual fallback |
diff --git a/REPOSITORY_MANIFEST.json b/REPOSITORY_MANIFEST.json
index 011a3af1..7ac2b44d 100644
--- a/REPOSITORY_MANIFEST.json
+++ b/REPOSITORY_MANIFEST.json
@@ -1,9 +1,9 @@
{
"schemaVersion": "1.0.0",
"project": "memory-recall",
- "generatedAt": "2026-07-15T14:04:23.410Z",
- "fileCount": 923,
- "totalBytes": 6437920,
+ "generatedAt": "2026-07-19T13:48:39.185Z",
+ "fileCount": 1170,
+ "totalBytes": 9523628,
"exclusions": [
".git/**",
".local/**",
@@ -40,6 +40,11 @@
"bytes": 591,
"sha256": "033047b9cfbe8de9c932558ee3c9c3ec622b1413ff52fc23628a86bd28de57b4"
},
+ {
+ "path": ".git",
+ "bytes": 91,
+ "sha256": "a57aeef226106fbcf7f1463d808725de7c032443bbecfad8c5997a9d17da77dc"
+ },
{
"path": ".gitignore",
"bytes": 175,
@@ -57,8 +62,8 @@
},
{
"path": ".npmignore",
- "bytes": 266,
- "sha256": "bd684e155960e61975c6bf9e83d4dabd8e0125f77c19e699cc62a50d2c0672ff"
+ "bytes": 291,
+ "sha256": "727d4a7ea446f5696cdb926cf9bf900646f319dc648dba3826d40f1671671a65"
},
{
"path": ".npmrc",
@@ -452,48 +457,88 @@
},
{
"path": "apps/cli/help.mjs",
- "bytes": 25248,
- "sha256": "0c0117d86106ec7e5f9cd65a3481ef92b06d5daf63fab94cb26517a9d7ac766d"
+ "bytes": 27627,
+ "sha256": "08e6a709fa5a750837c4eae50979c694639fad7669180bb60a55e6b87aa91a65"
},
{
"path": "apps/cli/oaf.mjs",
- "bytes": 460424,
- "sha256": "62512b730c7146f2ed243d22a9071290bd00301d28cce64d69b34461b1774787"
+ "bytes": 529377,
+ "sha256": "338ef3256ed2863a49d8fc5add7d3591c07156b2d1b92391c5fa1cb3faddba59"
},
{
"path": "apps/web/AGENTS.md",
"bytes": 202,
"sha256": "abb5d47e0b5056b0bdbc4fa67f85b9cf658b53cce0c7f2f21e561f6a349283d1"
},
+ {
+ "path": "apps/web/api.js",
+ "bytes": 1839,
+ "sha256": "368921a08446f8b24e6ba514f5178af084a070d52f96a0eaa92d6218828eeb4f"
+ },
{
"path": "apps/web/app.js",
- "bytes": 260078,
- "sha256": "fff751153ac96b67bc6d2df262fe262764283a533c29c65ce1f90131893c7819"
+ "bytes": 226781,
+ "sha256": "e55264fc4e5189f20219658a6d772992c48275815e94ad781e8d81bfd94da4db"
},
{
"path": "apps/web/favicon.svg",
"bytes": 495,
"sha256": "b1774942e350f0c007b10e9e82077e2442f1484e88eb79d1e90efc1e38afa1c5"
},
+ {
+ "path": "apps/web/graph-layout-worker.js",
+ "bytes": 2825,
+ "sha256": "0c9330628c65c52c557d812829339dde9c4e3d9c85fbb4557134d345055b5145"
+ },
+ {
+ "path": "apps/web/graph-viewport.js",
+ "bytes": 12417,
+ "sha256": "42e2a55943277d68ac07db31291911a53dc63271ce0d1cb51c2b3fbe0e11ebf8"
+ },
{
"path": "apps/web/index.html",
- "bytes": 2807,
- "sha256": "f0ce53a83c84bb79e23acc12855c6dc322dade75d98c8c3f6a01799d695255f5"
+ "bytes": 3345,
+ "sha256": "265fa59c60cab744ea57cfa8856db30d73b9ada7791455db5d3e8a6c077ebb03"
+ },
+ {
+ "path": "apps/web/memory-graph-view.js",
+ "bytes": 13299,
+ "sha256": "86db53e576aabaac5e44575ea25159f2bd95258988807a16d0f391c63679cb05"
+ },
+ {
+ "path": "apps/web/orientation-model.js",
+ "bytes": 27172,
+ "sha256": "f43b29b5ff70a097689578654fbcc5e2d9f60ba9f92dc5c143c2b893ee9c35ec"
+ },
+ {
+ "path": "apps/web/orientation-view.js",
+ "bytes": 9023,
+ "sha256": "577e52e5f8c5917237ae2f57e476cebf2e4c5c813bafc3bb8977d84fa85e098c"
},
{
"path": "apps/web/shell-model.js",
- "bytes": 2049,
- "sha256": "723e987aa0296a8df2707ca6779fc1d734e6958a73f4b62b6051dc96651aee5d"
+ "bytes": 2187,
+ "sha256": "a18db7bf8e798993bc03394336bd75b904e2ecc3497d0a13a46eeab250178123"
+ },
+ {
+ "path": "apps/web/source-map-view.js",
+ "bytes": 21439,
+ "sha256": "a779669514dcf97fbd1c184d00e33052924b5019648c6754f287891fab33a252"
},
{
"path": "apps/web/styles.css",
- "bytes": 44685,
- "sha256": "dd95e6ebaca5e659f47776cc6fd6cc7d6d9fa565ac3e9281753a9329740598a3"
+ "bytes": 60052,
+ "sha256": "2f1c3c62d37eb9da48faed7c2d7db13de1848294bf7f2c51073c7f4ee49bcdf8"
},
{
"path": "apps/web/tokens.css",
- "bytes": 2351,
- "sha256": "18b19c1168909f956be55ccca78adbb12ce5db74041f17eefc445a747a11a54e"
+ "bytes": 2350,
+ "sha256": "3ed7617e934302dac3f43142167270984f126d226027a9039f6563257fba00cb"
+ },
+ {
+ "path": "apps/web/ui-primitives.js",
+ "bytes": 5261,
+ "sha256": "ff826063df128ce473a7aac672901f0f35e3fb7fca9cc8eafd97e9e98159bd79"
},
{
"path": "assets/brand/logo.svg",
@@ -517,8 +562,8 @@
},
{
"path": "ASSIGN_TO_AGENT.md",
- "bytes": 3313,
- "sha256": "d200fc428f0f6b53ee9fd5a22e248564da09217e43e3662349504c7bd55ca578"
+ "bytes": 3307,
+ "sha256": "df1e4428531479c13a84cb244feffb238042390480390be8edcecee85f16e297"
},
{
"path": "BOOTSTRAP_REPORT.md",
@@ -532,8 +577,8 @@
},
{
"path": "CHANGELOG.md",
- "bytes": 24010,
- "sha256": "0f0377bf2901ab2cc29d38fb80f858f4928c207f94b1d80941690be294fae1d6"
+ "bytes": 32751,
+ "sha256": "a2274f5e817972b32a40f09e9053cb5a2cd84a73e57b95f8891ae89cbbb16a3d"
},
{
"path": "CITATION.cff",
@@ -607,8 +652,8 @@
},
{
"path": "DESIGN.md",
- "bytes": 4800,
- "sha256": "be5c21fb3ac78de26d0bffa7cf0e955d421de0d42d5c1aa8e5aa6aa24243ad57"
+ "bytes": 5459,
+ "sha256": "1d9b98a5634f517efd8a2a85276f25dfee6c39a6daa8145ab89cd1498ae6e0f1"
},
{
"path": "Dockerfile",
@@ -725,6 +770,16 @@
"bytes": 1763,
"sha256": "1306750b623880637b64b1729b79fbcd1a24f2d7b42f8b2b3e758cba95981e25"
},
+ {
+ "path": "docs/adr/0023-production-rust-code-intelligence-engine.md",
+ "bytes": 2088,
+ "sha256": "e7d669f42e786d979892831d415bb1195670c815665cea34a29d9abf699bf46d"
+ },
+ {
+ "path": "docs/adr/0024-rust-sqlite-source-index.md",
+ "bytes": 2579,
+ "sha256": "3d16efd5c47392f9eaf88e3e429a88b332693e19bd3495dae775861f6b09769f"
+ },
{
"path": "docs/AGENTS.md",
"bytes": 380,
@@ -747,8 +802,8 @@
},
{
"path": "docs/api/openapi.yaml",
- "bytes": 60235,
- "sha256": "c7f95a629fc72f146614c92db1d2a58147a675b441a893ae531f771b23a1b4d3"
+ "bytes": 63453,
+ "sha256": "591a803329cc9a4550be5048a4f26823ce3187ea9ccc7877f89f74c60fa28e27"
},
{
"path": "docs/api/README.md",
@@ -797,8 +852,8 @@
},
{
"path": "docs/architecture/native-providers.md",
- "bytes": 14390,
- "sha256": "e8ff700fc10c909222e85d6f9bfc51726d6ba3197c0a9dc9f77711ddce3fdc6a"
+ "bytes": 13816,
+ "sha256": "2cf77d39c461765a4e52e317df6dbce3f0db8ae2cd2e00c7e00749c6a71a3fd3"
},
{
"path": "docs/architecture/overview.md",
@@ -807,8 +862,8 @@
},
{
"path": "docs/architecture/protocol-bridges.md",
- "bytes": 9116,
- "sha256": "7c192869b1598612eb962a262ae7ea715ba296b9c9b54dee301a43a68dce8825"
+ "bytes": 9566,
+ "sha256": "abd4d5ebcabf4a711c0205a386a5f7770f1ac786a3477668a17b785cf4422841"
},
{
"path": "docs/architecture/sequence-flows.md",
@@ -837,8 +892,8 @@
},
{
"path": "docs/benchmarks.md",
- "bytes": 8750,
- "sha256": "d486819287f1f97c1f51efded6dd7bf6c8491dc8e7a135c9cfaba9ed8f14b212"
+ "bytes": 20219,
+ "sha256": "975701efde58e54b64213b6904758f562118f29111eae4d77d90ae46dd5ad068"
},
{
"path": "docs/implementation/AGENT_EXECUTION_PLAYBOOK.md",
@@ -855,6 +910,21 @@
"bytes": 1471,
"sha256": "943f6ae5489c7f738aac16a08950b3a8aa67a068e34e0487c44ed1f4836626ca"
},
+ {
+ "path": "docs/implementation/MEMORY_RECALL_COMPLETION_MATRIX.md",
+ "bytes": 38712,
+ "sha256": "b4cc25a83405170ca59c2b10387b87687f03057874fcccca77add7354a8b1a1f"
+ },
+ {
+ "path": "docs/implementation/MEMORY_RECALL_SEMVER_COMPATIBILITY_AUDIT.md",
+ "bytes": 8160,
+ "sha256": "813c7daea56e54a4a381b0150dee3860131132f37cce26d3de5445f7145fcdff"
+ },
+ {
+ "path": "docs/implementation/MEMORY_RECALL_UI_ANTI_SLOP_REVIEW.md",
+ "bytes": 4551,
+ "sha256": "3e2052e55ca16ffb0effa87565d339d064a51829f89b34448c5b29e5e5545aea"
+ },
{
"path": "docs/implementation/OAF-011-context-selection-note.md",
"bytes": 3038,
@@ -952,8 +1022,8 @@
},
{
"path": "docs/implementation/OAF-031-context-intake-preview-note.md",
- "bytes": 21232,
- "sha256": "1544d985babf5ffc6101cec46886a10cda8e3f5b23df0198d5cb0cf7963e9ca1"
+ "bytes": 20740,
+ "sha256": "42bae7b6885bcae32274bec4bc42c827eb2df5eff8054cb9f74339f2aaf43e5b"
},
{
"path": "docs/implementation/PARALLELIZATION.md",
@@ -992,8 +1062,8 @@
},
{
"path": "docs/open-source/release-engineering.md",
- "bytes": 2073,
- "sha256": "e87aeca2fe36c341ec8649be417c5faa06bd91d29262b7dbedaaf82236220d70"
+ "bytes": 3779,
+ "sha256": "7605bf4b6697008bbcecf36726f525dc54ea24c55e9787e34f2ccaa7d40613bc"
},
{
"path": "docs/operations/backup-restore.md",
@@ -1047,8 +1117,8 @@
},
{
"path": "docs/product/memory-recall-developer-first.md",
- "bytes": 2055,
- "sha256": "0ba4cd0631230ee575cd09cba47470619e4eea1ccbb9b61ea489369b1f75e81e"
+ "bytes": 2639,
+ "sha256": "7d8c95940966ca0cd9a5ac464d1bd42f216aaaa04f97232ea637621ecef765db"
},
{
"path": "docs/product/oaf-rust-supertool-spec.md",
@@ -1077,13 +1147,13 @@
},
{
"path": "docs/release/1.0-COMPATIBILITY-MATRIX.md",
- "bytes": 5427,
- "sha256": "5b5b502956a17a26abe69785faf0c11cc36f1d1d13f218fc1eaf9d67b79b69df"
+ "bytes": 5577,
+ "sha256": "1c169823075abd172a333e43421a6fc6732712ff609d82752eb4ea80cfd4e218"
},
{
"path": "docs/release/1.0-MARKETPLACE-MANIFEST.json",
"bytes": 911,
- "sha256": "b24c59297530d79be9ae7b1c5b81f48c654fd72156c688a56bbd02191ef788a1"
+ "sha256": "f66b0b0725fcf660ae6c9b2d088d38834b7a4e04f9a67aaa5875a882492d29b9"
},
{
"path": "docs/release/1.0-NORTH-STAR-GAP-AUDIT.md",
@@ -1093,12 +1163,12 @@
{
"path": "docs/release/1.0-PROVENANCE.json",
"bytes": 2414,
- "sha256": "559f17ed84af28b5896f6bd346c3fd37fc8d4e1cd3b7c30886a907c3585c858b"
+ "sha256": "e60c76e1f7f226aaa8112986493b765ddf0c244496efc34924c2737490ec7268"
},
{
"path": "docs/release/1.0-READINESS-REPORT.md",
- "bytes": 3391,
- "sha256": "c143026eca72465202cc3f5a713e2c1efe98c03dac8e0423a34301a6760667fc"
+ "bytes": 3381,
+ "sha256": "bc68cecaf118c4e1473053b503b9782851db2018812e5dbb1ad1c543ea0ad567"
},
{
"path": "docs/release/1.0-RELEASE-CHECKLIST.md",
@@ -1108,12 +1178,12 @@
{
"path": "docs/release/1.0-REPRODUCIBILITY.md",
"bytes": 1723,
- "sha256": "ffaa143ba56be41c18e99ddee9826b518d2e609eaead617743a9ad7e02db0648"
+ "sha256": "b287eb55d830378e47e2cf718630fd63a20a7ca0683d9cce7a16e78e429d1941"
},
{
"path": "docs/release/1.0-SBOM.json",
- "bytes": 17159,
- "sha256": "59e9ba25e87acc81c2b6cc02b6d803fee49bc5a7f7644a8590c8dd6562926e76"
+ "bytes": 17965,
+ "sha256": "7b1f2dd6e94ca85dcda8947f11890bdddbe8edf8d9d4c56069ee82a4297105e7"
},
{
"path": "docs/release/1.0-SECURITY-REVIEW.md",
@@ -1195,6 +1265,11 @@
"bytes": 1588,
"sha256": "8252eac4790ca9704f36e15e20b5bf6d0bf1dc35d104da35e3791a18c94ec3f6"
},
+ {
+ "path": "docs/usage/code-intelligence-support.md",
+ "bytes": 20639,
+ "sha256": "1741195cc8415cbefc9b557a90aba4917a79923bd240d63f1d422e00f1dac202"
+ },
{
"path": "docs/usage/codex-setup.md",
"bytes": 1084,
@@ -1208,12 +1283,12 @@
{
"path": "docs/usage/local-agent-handoff.md",
"bytes": 17390,
- "sha256": "61d97e5cb58115dd5e596da2d7a9c7a08a16ae205744dffbe5c25529bce0ea0d"
+ "sha256": "7d86ba77c2cf5083423743509d3ac1ce1e2f579de28aa07747a79ce6c187808a"
},
{
"path": "docs/usage/mcp-server-reference.md",
- "bytes": 2616,
- "sha256": "be31b255e4d79565fb713ef9a75ffc56ef42e438f874b36957b99c92bc6265f1"
+ "bytes": 8765,
+ "sha256": "662eef7072dcaf9e99becf2c5e7be9c4cc6b7de4eb38f9830177713c943551a1"
},
{
"path": "docs/usage/memory-lifecycle.md",
@@ -1232,13 +1307,13 @@
},
{
"path": "docs/usage/recall-map.md",
- "bytes": 2866,
- "sha256": "abeaf7d2a788d9301fea56ea207103cffb418ca32ab3d5a2f91b06bd1b6e5f1f"
+ "bytes": 5087,
+ "sha256": "502b2f5a6e2f6848e69a24e14a6c1a2755e485b9f58954b244d274b9bf290125"
},
{
"path": "docs/usage/rust-acceleration.md",
- "bytes": 1762,
- "sha256": "76cfd88a85d1d353b5f24a719570b423358a6441bdcdc1d76a081b9186cce8d5"
+ "bytes": 4351,
+ "sha256": "e35cdb45f74fd448f6b966d7911bbe95ff48caaf00b860a58221b1229f139e50"
},
{
"path": "docs/usage/security-model.md",
@@ -1252,8 +1327,8 @@
},
{
"path": "docs/usage/support-matrix.md",
- "bytes": 4490,
- "sha256": "dd4108828b742e8d06112e6abdfa4119f90a8b034b417b9e7e41f6924dcf26a6"
+ "bytes": 8551,
+ "sha256": "73844778b418c382828bc0877c554ac1592024e078fc2b65ef6a02670d7ac80e"
},
{
"path": "docs/usage/token-savings.md",
@@ -1262,13 +1337,13 @@
},
{
"path": "docs/usage/troubleshooting.md",
- "bytes": 2446,
- "sha256": "317f19dfec8cc3656981460e2bd914a77c193915935d3f36a51683f7719970ec"
+ "bytes": 2448,
+ "sha256": "21e8f9acf0a78d8a2218ef4818ae9258af708e99767e4fe65d2df1dff3699eb2"
},
{
"path": "docs/usage/uninstall.md",
- "bytes": 3349,
- "sha256": "b2e6b05ca2429fe0b2cb74f5e61cbf75649eb708293ca6ff9431b9a6217cf79a"
+ "bytes": 3990,
+ "sha256": "1a8ff992647486f49625d1112bddf586347c6a0e621ff29a2071c69fa714c8bd"
},
{
"path": "docs/ux/accessibility.md",
@@ -1315,10 +1390,630 @@
"bytes": 6152,
"sha256": "817f8fc65a07dbffbc9ca84d6671afab300d19a4e4e937b28aec363c99d1dbc0"
},
+ {
+ "path": "evals/code-intelligence/benchmark-gates.v1.json",
+ "bytes": 649,
+ "sha256": "76150d22d01c59559658ad7d1c76491185910bf1e45d5b205cda862540e042d2"
+ },
+ {
+ "path": "evals/code-intelligence/capability-matrix.v1.json",
+ "bytes": 223828,
+ "sha256": "2f4cd8adadd4fd833a45a37938a1d1f2ec8b17f2ac44152b265c6ff38701a334"
+ },
+ {
+ "path": "evals/code-intelligence/corpus-candidates.v1.json",
+ "bytes": 13646,
+ "sha256": "e8baef596e81059c9d8b7db83015cea2d1fbb9ecd90f56cecabdf2ba68243b30"
+ },
+ {
+ "path": "evals/code-intelligence/corpus.v1.json",
+ "bytes": 16470,
+ "sha256": "479c89ce3dd93b123691ade145a1d24c266bd9d166cf23a30cceff284e02e5a4"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-b/go/api/routes.go",
+ "bytes": 264,
+ "sha256": "d8baa74b2cdb9a5cdb24097598ce64f70073f41ab61f36eed8dbf99a3b36d702"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-b/go/go.mod",
+ "bytes": 33,
+ "sha256": "f1f4b932d4c5239bc3890b499c05844a84bb6eccdb1e4208d3eed77d0c00ba5d"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-b/go/service/service.go",
+ "bytes": 195,
+ "sha256": "6ffaff386b38653a7498e49c1053c802116ebcaf08658f6483cb62081fe10fd3"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-b/python/pyproject.toml",
+ "bytes": 46,
+ "sha256": "abc237752d5486897316f297cbe8a2dcc8583f0f550aba4c93077e6c2062f616"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-b/python/src/demo_app/api.py",
+ "bytes": 333,
+ "sha256": "89b256d5fcac6d65dc8cb020f43f6dab550ae313c4d98a2f14d0c7847346dd56"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-b/python/src/demo_app/base.py",
+ "bytes": 60,
+ "sha256": "bc6b11b9723ee774da7cc8d0856728c15fa1ab561dfe1eb910c70de2dfe66f9e"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-b/python/src/demo_app/service.py",
+ "bytes": 112,
+ "sha256": "fc9c32c28555149f41a4fed9e851e29783c03a29864766d61e0692bf7bc3e77c"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-b/rust/Cargo.toml",
+ "bytes": 65,
+ "sha256": "9740eff6b92845309c301682c15bedf99312f9a0deb91f8de9dde382f4f51eb3"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-b/rust/src/lib.rs",
+ "bytes": 342,
+ "sha256": "a805d9c71e59359a377c3b1f6e0a338cdc961c2554fd9048ba9259101e227bb7"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-b/rust/src/service.rs",
+ "bytes": 307,
+ "sha256": "1ace400c771238f9d636a50e38c37df2d9899598cf48c664c16f29f88832c7f7"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-c/csharp/src/Demo/Api.cs",
+ "bytes": 686,
+ "sha256": "46d28a16e7215c462f8bedb0e4887498db15da5cd63607f6e757acb18ad1082a"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-c/csharp/src/Demo/Models.cs",
+ "bytes": 62,
+ "sha256": "b04ca5882630f45623c191f84b9fdd8b38b60dad4f9f34ee93a2de48a33a4b46"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-c/csharp/src/Demo/Services.cs",
+ "bytes": 402,
+ "sha256": "ad522a040adc2968e245ddc1b0b73675e422f9d54de4b480a15b6876e9faddfd"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-c/java/src/main/java/com/acme/api/ItemController.java",
+ "bytes": 658,
+ "sha256": "900b87174336fa4334af7d29b708e85023159d320e206e3501e1a62b595c1ba3"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-c/java/src/main/java/com/acme/model/Item.java",
+ "bytes": 58,
+ "sha256": "80ea51977ff10507d20bf85fa9beee66502ddfd11f734d0dcf6c0b0b1aa38ffa"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-c/java/src/main/java/com/acme/service/ItemService.java",
+ "bytes": 379,
+ "sha256": "358b7b2b52e2378f156d3108e6e41b053a6355f01d7b74f808a4ef4ec7752ba8"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-c/kotlin/src/main/kotlin/com/acme/api/Routes.kt",
+ "bytes": 361,
+ "sha256": "2bdd4a1314523debf11e37774de49394df6d6e8ef12c73a46fbc2b2ea464df54"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-c/kotlin/src/main/kotlin/com/acme/model/Item.kt",
+ "bytes": 56,
+ "sha256": "5bef93c39c4d6379f588a0466fc82c0c11d62e4114f07309cd90d8f0b1013570"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-c/kotlin/src/main/kotlin/com/acme/service/ItemService.kt",
+ "bytes": 376,
+ "sha256": "5fb8298c5271e2b236f27c2a39ebdbe47957988c508cc2bc8087691ed0a6b658"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-d/c/CMakeLists.txt",
+ "bytes": 98,
+ "sha256": "d1f0ded956621518d5700f86ecc401631844cfe8bad973adcf12bd6d7291820b"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-d/c/include/item.h",
+ "bytes": 120,
+ "sha256": "7ca5e02feb71ac36c28f07ca9692e00573cf7ca0360c44f5ee2e56bcf4ed0868"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-d/c/src/item.c",
+ "bytes": 100,
+ "sha256": "df27596301efb98fb1ac7021f533c4d243960a08e513960eac055b03541574f0"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-d/c/src/main.c",
+ "bytes": 104,
+ "sha256": "ec82b793161accc286fda1fcee55a71687306733e8dcef74e269118fa4a8b416"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-d/cpp/CMakeLists.txt",
+ "bytes": 120,
+ "sha256": "40ae3c72b5c82f0b816cfec20e7cf41a05f29dd84f9fbe2cd56a567c40d61a4e"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-d/cpp/include/item_service.hpp",
+ "bytes": 421,
+ "sha256": "344f0d490f8b44cbe551ebed6e068af8daca51c466ee22b6628f41034c24de1e"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-d/cpp/src/item_service.cpp",
+ "bytes": 442,
+ "sha256": "daeb8f7634250075b92338eb2c1fa9a3c7b5c8f44ecbd1e02f8c46f28282e041"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-d/cpp/src/main.cpp",
+ "bytes": 125,
+ "sha256": "1c722a7c4d63b0e4d1211111aa41763a6eb400b7a52c1b3ff9173021ffe3ab18"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-d/dart/lib/item.dart",
+ "bytes": 421,
+ "sha256": "64fe207f87ecbfea3b9575bb6c6cad38337da6ed1c4b65bcd1787c77915a237e"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-d/dart/lib/main.dart",
+ "bytes": 139,
+ "sha256": "6579f06c19c878e84e22a96be27ec2f659a8cbe8bb63ef2ceca3546e3ff595a9"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-d/dart/lib/routes_part.dart",
+ "bytes": 55,
+ "sha256": "0420555af70718feb67d436b10e3276a503d5fe6f29e99d0f66c2bb47b46e6a1"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-d/dart/lib/routes.dart",
+ "bytes": 309,
+ "sha256": "6ad05b92c07ef564c0cd7251fbc044f63745e9e448b44d26838e40a14047ef70"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-d/dart/pubspec.yaml",
+ "bytes": 107,
+ "sha256": "73fe8a5feb6dc153265031f8817ac791999dacb71ae67ea126330b2a9d56aeaa"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-d/swift/Package.swift",
+ "bytes": 270,
+ "sha256": "0a8adfaa723e2dd99230e33b46148c0d5c3d7b85fa24e4edf368217acf5a7412"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-d/swift/Sources/App/Item.swift",
+ "bytes": 95,
+ "sha256": "385489a8960f7936db6e00d4f7667305f382f1de92963f0efba50dda75342c69"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-d/swift/Sources/App/ItemService.swift",
+ "bytes": 289,
+ "sha256": "bb541ef0a439320162765b5c66f891203789873fde8bfbb3053b219ab7209c4e"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-d/swift/Sources/App/routes.swift",
+ "bytes": 180,
+ "sha256": "f66ccd6a663f63581d0d1be0aa9dbdf960bb0eb7ff4e1f125df93af898234594"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-e/php/composer.json",
+ "bytes": 51,
+ "sha256": "cc2c40955526b0a0a975fd54639b62605343c6d65dc3d1536f3b07ba6584dd3e"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-e/php/routes/web.php",
+ "bytes": 137,
+ "sha256": "70b13f4888cbf07789078127d88b23ae9206521cc50d8f35b8acfc482e7f7e64"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-e/php/src/BaseService.php",
+ "bytes": 52,
+ "sha256": "642b76d6d6a4d0802ac90d600eb6885864bf9791b1b1c9a225a1f05a8cd4605f"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-e/php/src/Contracts/ItemLoader.php",
+ "bytes": 103,
+ "sha256": "fb8715d7347a355cc693ea34ead05403b7b01e7f88842683bc910cf09fb6c5dd"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-e/php/src/Controller/ItemController.php",
+ "bytes": 336,
+ "sha256": "14936bdfd17fbe69b8ba8998856db4678a597471591843063bad2fa8a8ad1ee2"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-e/php/src/Item.php",
+ "bytes": 97,
+ "sha256": "bef7499d9162430814547d5252cabab8c5ce153c7dc41455494ffff78f143512"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-e/php/src/ItemService.php",
+ "bytes": 466,
+ "sha256": "0fc1bdeb91fc4b253ab251c3fd4b65f681cde202a63470949c70d2bda0b31abd"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-e/php/src/Support/LogsItems.php",
+ "bytes": 99,
+ "sha256": "6fc0b6b2ab2d13af96bc6d00582d570b507a7c757c161914a4e35c46779081bb"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-e/ruby/app.rb",
+ "bytes": 126,
+ "sha256": "bc77525e032f7210b9d93b3f94bb4391c0847d0580b0ff9ad938de669f6f1d69"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-e/ruby/app/controllers/items_controller.rb",
+ "bytes": 83,
+ "sha256": "89327faf625b10b396eadf983c14c0699dcea8b4a69d9892cb16f9d238376a87"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-e/ruby/config/routes.rb",
+ "bytes": 74,
+ "sha256": "9078cd1a3a63714f14313ad2cce74fc95baf7b7455fc8d1b195c4e2aced172e6"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-e/ruby/lib/demo/item_service.rb",
+ "bytes": 369,
+ "sha256": "e02fee4e0dc17ad8a24e83bbc0cf4ee872461cc5ccbfce4a5e81eefc71351db9"
+ },
+ {
+ "path": "evals/code-intelligence/fixtures/batch-e/ruby/lib/demo/item.rb",
+ "bytes": 102,
+ "sha256": "2093b475a630087e7af2f55a6ccae43d6d48926fa54535be60068fd35b44a015"
+ },
+ {
+ "path": "evals/code-intelligence/results/million-node-rust-index.json",
+ "bytes": 9121,
+ "sha256": "246c301d78a0111a29ef6b9ca2e8b17316e8f016962095e4d8c93d6251bcb48f"
+ },
+ {
+ "path": "evals/code-intelligence/results/phase2-batch-a.json",
+ "bytes": 46612,
+ "sha256": "20fe204a0ce349550d3c493ba01fbab25ef4604688959bb5aee8e97a2dfbc6e5"
+ },
+ {
+ "path": "evals/code-intelligence/results/phase2-batch-b.json",
+ "bytes": 84840,
+ "sha256": "439d51b0b622ec920c443ba44767d1d0df7563fb302610eacd2f32012b221c78"
+ },
+ {
+ "path": "evals/code-intelligence/results/phase2-batch-c.json",
+ "bytes": 69865,
+ "sha256": "3e21fb2c3911eb43fa383ef5f47a5a0226a3c2caf3e584157fdc1f1a9cd9875b"
+ },
+ {
+ "path": "evals/code-intelligence/results/phase2-batch-d.json",
+ "bytes": 91356,
+ "sha256": "da0daf03063da4b7ceeeec212876ce3efe40b846db129742988a58b58d86494d"
+ },
+ {
+ "path": "evals/code-intelligence/results/phase2-batch-e.json",
+ "bytes": 46052,
+ "sha256": "439f7bfa22d977acdb70148704057fa6dc3eecd675c6b06cd21f5fbb87a8f8b2"
+ },
+ {
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json",
+ "bytes": 397171,
+ "sha256": "bb96ec1b9666a35d898c5118c31ecb0e33b4afcb80659b66e5a29a454e0e00e8"
+ },
+ {
+ "path": "evals/code-intelligence/results/phase3-source-index.json",
+ "bytes": 27403,
+ "sha256": "f26d2cd804bc3122a4841127448eeba3253c94616e3d33c09a951df78266c524"
+ },
+ {
+ "path": "evals/code-intelligence/results/phase4-intelligence.json",
+ "bytes": 54908,
+ "sha256": "1d0bb5da8155bcba6e549979edf7030ac3f0070d5fd55a30d400321a5099581a"
+ },
+ {
+ "path": "evals/code-intelligence/results/phase5-cross-service.json",
+ "bytes": 2835,
+ "sha256": "71555b704fbb2da0bdab46f79f58efe8758a9a2c43b980ad11c593dc811a06fb"
+ },
+ {
+ "path": "evals/code-intelligence/results/phase5-go-cross-repository.json",
+ "bytes": 3736,
+ "sha256": "883cb4b5befa8b825d379e03863a11a7bbe9698430a5a46dcff21b01f88aed4f"
+ },
+ {
+ "path": "evals/code-intelligence/truth/fixtures/c.json",
+ "bytes": 4255,
+ "sha256": "632c06a5c27568361cbb667cb7c8380ca97d26ba42e899706bd476bdeff543f1"
+ },
+ {
+ "path": "evals/code-intelligence/truth/fixtures/cpp.json",
+ "bytes": 6392,
+ "sha256": "34a6f3a66d8502e75802ce1ee2cfb159debf43d6d2028c596e6988f740a5241c"
+ },
+ {
+ "path": "evals/code-intelligence/truth/fixtures/csharp.json",
+ "bytes": 9466,
+ "sha256": "03562f8c6be5824791d1626344b398718bf7e3d8aad09e1804db18a073e42a23"
+ },
+ {
+ "path": "evals/code-intelligence/truth/fixtures/dart.json",
+ "bytes": 8029,
+ "sha256": "8a0273fb7b56f2e57fc26af660bf0d16e7e8c1c7b15ee73d691d318754b9596c"
+ },
+ {
+ "path": "evals/code-intelligence/truth/fixtures/go.json",
+ "bytes": 9130,
+ "sha256": "854b6f11d94d4e7f1af5561deec4ef15da34b672666be33e9b60a17dbdd94d9a"
+ },
+ {
+ "path": "evals/code-intelligence/truth/fixtures/java.json",
+ "bytes": 9088,
+ "sha256": "7b8defab09d5bfe426af7a9bce3ace87551352c49c62729e49e2cbebd9c21904"
+ },
+ {
+ "path": "evals/code-intelligence/truth/fixtures/javascript.json",
+ "bytes": 4490,
+ "sha256": "699f7321d4da058e8a110944eb1dbdeb402e7530d9ae25624b84f0a57f5b2545"
+ },
+ {
+ "path": "evals/code-intelligence/truth/fixtures/kotlin.json",
+ "bytes": 9350,
+ "sha256": "c2c84e5f173eb843c6897a7d9f86e0b7b1989738d8e14d833fa4877d545df3c8"
+ },
+ {
+ "path": "evals/code-intelligence/truth/fixtures/php.json",
+ "bytes": 7817,
+ "sha256": "b45342018297b20703ef7b3a5b101f5ba085ce0b2292acfa88579025b8635549"
+ },
+ {
+ "path": "evals/code-intelligence/truth/fixtures/python.json",
+ "bytes": 9823,
+ "sha256": "b200c52d55e672693e540dc49ae62d9bce44e407364613ff0996e06eff88efc7"
+ },
+ {
+ "path": "evals/code-intelligence/truth/fixtures/ruby.json",
+ "bytes": 5902,
+ "sha256": "03595655c4e335de0c7c4ec2bb270594190837216f5c7f758e4f6c4dbdea6854"
+ },
+ {
+ "path": "evals/code-intelligence/truth/fixtures/rust.json",
+ "bytes": 10969,
+ "sha256": "a2464a9a7fae8568d18b260a9123e3ce31e9daab4c21b35a2cd1f7bfed650271"
+ },
+ {
+ "path": "evals/code-intelligence/truth/fixtures/swift.json",
+ "bytes": 6086,
+ "sha256": "bf212e62ad5d421f76e18d1d78fd744755703306d1d868beda5c710c6834dc28"
+ },
+ {
+ "path": "evals/code-intelligence/truth/fixtures/typescript.json",
+ "bytes": 5467,
+ "sha256": "4411c8e765db910d62b6bb161beaa0a914218de8b0aaa9f31f3a1cff7e7dcfe0"
+ },
+ {
+ "path": "evals/code-intelligence/truth/README.md",
+ "bytes": 3969,
+ "sha256": "0447f7cbfc2d8a7bb926ee5cd3bfd96c154a4cbd8bd66b1886a509132afd5e85"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/c/cirepo_c_antirez_kilo.json",
+ "bytes": 3493,
+ "sha256": "a88251b541db7ff8923344eec557a2d3421d53e8e5b6d89e3a83fce9b026b160"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/c/cirepo_c_curl_curl.json",
+ "bytes": 3573,
+ "sha256": "5636f41a9e236b5701e9ae73e4764593a23706149855cfe53451d967f293f3ca"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/c/cirepo_c_libuv_libuv.json",
+ "bytes": 3934,
+ "sha256": "82b1d107be458bb40fc47cd27bb49b2f5650adaf3aeef2ce0fb60adbdb28f1f4"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/cpp/cirepo_cpp_catchorg_catch2.json",
+ "bytes": 5321,
+ "sha256": "af6bafac8ac539d2ee86578eb6c5456f8fbc54a5524a089cf617cf35055382da"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/cpp/cirepo_cpp_fmtlib_fmt.json",
+ "bytes": 5634,
+ "sha256": "02ae45a8b9db02e3b4a34764b4109fc134477a4be18de361a05931297e3262d5"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/cpp/cirepo_cpp_nlohmann_json.json",
+ "bytes": 6081,
+ "sha256": "bc73fc6cd1560b927080986933efb419a923f7e3b5ff5066f3ff0bda95852998"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/csharp/cirepo_csharp_dotnet_aspnetcore.json",
+ "bytes": 4593,
+ "sha256": "35dd7b14e1b954eb38ec141a494b35390e787bc9cef5662aad13e74442f8e404"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/csharp/cirepo_csharp_dotnet_runtime.json",
+ "bytes": 4459,
+ "sha256": "73a93f5e08ffa01f67e60f2d92b3b19cf16c2e65dade351a3f50a0b1f8362eff"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/csharp/cirepo_csharp_jamesnk_newtonsoft_json.json",
+ "bytes": 4159,
+ "sha256": "bd2f4cef23922b1e93888a7baab633b8ae772ba29f92c3f14f4ab014cc6146c1"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/dart/cirepo_dart_dart_lang_http.json",
+ "bytes": 4431,
+ "sha256": "a628474d8f9cb1f6d095947dbe97f6f934044ef80295898cff7f1f82b61c70d9"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/dart/cirepo_dart_dart_lang_shelf.json",
+ "bytes": 4826,
+ "sha256": "e8da959c4810fba2d6b588f915cdd2c0feb0b7b50421f4da5e8fe93b62d58cba"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/dart/cirepo_dart_flutter_samples.json",
+ "bytes": 6898,
+ "sha256": "ed60da6e4ef7fd4748f1547a7ce40c75fb05cfdc8158dec457aff3ac81e31b1d"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/go/cirepo_go_gin_gonic_gin.json",
+ "bytes": 6367,
+ "sha256": "0ea5f274291f9dbbc1ea87392c37e423187707640b84ab6f8a6ff68936365f13"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/go/cirepo_go_go_chi_chi.json",
+ "bytes": 7277,
+ "sha256": "eaff398b50b309a047076e74b40e9052853ece42b5addc6a1281993984ee365c"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/go/cirepo_go_hashicorp_go_multierror.json",
+ "bytes": 6058,
+ "sha256": "cf721a816fdb39c0b7cf697b15c895110f7f3bb9c775b4b0fbc355cb2266e9c2"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/java/cirepo_java_google_gson.json",
+ "bytes": 3448,
+ "sha256": "0fa86a922a3bc67e40e6785af580cb67a5f9ed7a9e5211b304d4aee7ab3baaf4"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/java/cirepo_java_google_guava.json",
+ "bytes": 3386,
+ "sha256": "7c548ec3566ca5ce471b6bedef8dcfddb4a3559adf484be845baf918725170e6"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/java/cirepo_java_spring_projects_spring_petclinic.json",
+ "bytes": 4184,
+ "sha256": "5a7519b0bace969998d5b650abdac6e12a0cf996cd9d6a5aeeeb5828f7590e79"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/javascript/cirepo_javascript_axios_axios.json",
+ "bytes": 4741,
+ "sha256": "426f8be9be9c04e85d70ff5e6b7d156287cb7e47497430f763d655973dfb2c54"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/javascript/cirepo_javascript_expressjs_express.json",
+ "bytes": 4606,
+ "sha256": "c4294d8ef73c8cce2b34ea62f32c04ea47f7611e28994cb24a2fd12134f298ec"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/javascript/cirepo_javascript_lodash_lodash.json",
+ "bytes": 4831,
+ "sha256": "47352be0d04f2c525cc65a9cddc5107b26e3ff11dde2e2aaf7c5e97739bafb3c"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/kotlin/cirepo_kotlin_android_nowinandroid.json",
+ "bytes": 7406,
+ "sha256": "dc4b5089f5671e80bcef72355fc538b35ac5174be90b4fa336bf104bf4694a2a"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/kotlin/cirepo_kotlin_kotlin_kotlinx_coroutines.json",
+ "bytes": 5688,
+ "sha256": "4fef8f3333dec15810924936cbb663fe8a6709587cb299fd5d0870c7a885830c"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/kotlin/cirepo_kotlin_ktorio_ktor.json",
+ "bytes": 6083,
+ "sha256": "9dc5eb134365ef95e776665649ca9c1307466d4b8f45a18c7ca158ce1cdd2011"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/php/cirepo_php_laravel_framework.json",
+ "bytes": 5775,
+ "sha256": "3b257311890480e88c3d0e689bef8ec74bcb35cdd1dc41957cae0eec144f2197"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/php/cirepo_php_slimphp_slim.json",
+ "bytes": 5716,
+ "sha256": "dbbf50f153ef75ba4c2f7c4b9542dc37d461c0e10ca7207d341bab66e6ee59de"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/php/cirepo_php_symfony_symfony.json",
+ "bytes": 6015,
+ "sha256": "1a7de3a4cb04349b24b96b79035f31d2fa451c8694c2a757bc858edee52f1875"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/python/cicase_python_djangoproject_accounts.json",
+ "bytes": 1761,
+ "sha256": "b10430b245bbe981c29e0b47290fb3eb7a60f29c51a325bf8543c99b6355a442"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/python/cicase_python_fastapi_app_testing.json",
+ "bytes": 1781,
+ "sha256": "6c765e1c2c50e7ce8f9f5479dc3d27a6256b8e63042c55a42b8529e0ed06ac70"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/python/cicase_python_flask_tutorial.json",
+ "bytes": 1725,
+ "sha256": "c117b378f4238a567d913efa9a36dc90f35855274b67bf0475d87fffa8895418"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/python/cirepo_python_fastapi_fastapi.json",
+ "bytes": 6046,
+ "sha256": "51107dd3aa0b803564a9010cc4c02494fd6e0fbefb3aecb594e1a19a4721f86c"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/python/cirepo_python_pallets_flask.json",
+ "bytes": 5833,
+ "sha256": "177f11c3549b821f90aaa1dbca598c89dc8bc155b606bbc32c78daaff4ec63e9"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/python/cirepo_python_psf_requests.json",
+ "bytes": 6385,
+ "sha256": "c1683102ce53ae02b1da967a040e528eb3c03cb0957ae830715ff5e0da5ae0fe"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/ruby/cirepo_ruby_rails_rails.json",
+ "bytes": 5279,
+ "sha256": "51bf420cdbf4214656c7b161059ef461c812ad2852860ba0364bcd37208eb2aa"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/ruby/cirepo_ruby_ruby_rake.json",
+ "bytes": 4725,
+ "sha256": "fa37cdf5d0264007cae3ec914737dff4085ed36a42a42f0d29c4bd070b508e75"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/ruby/cirepo_ruby_sinatra_sinatra.json",
+ "bytes": 4707,
+ "sha256": "1f02b84be11dfd362a28cf4b1c1f532197bdc4efa036680eccc4dd37f32cbde3"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/rust/cirepo_rust_dtolnay_itoa.json",
+ "bytes": 6398,
+ "sha256": "c6a88c358e29eb9ac1a6ccd82cb3e7b6ddb440bee763290bcc59cb3352dac83d"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/rust/cirepo_rust_serde_rs_json.json",
+ "bytes": 5913,
+ "sha256": "eef637f38d62d58cc62f5c746b635ace5947f30bfec06cdd57cff52228feda12"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/rust/cirepo_rust_tokio_rs_axum.json",
+ "bytes": 7268,
+ "sha256": "4457c6248a9f5be16178f5858155290b2475ccc443ab36f5004c79987dd0e1ca"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/swift/cirepo_swift_alamofire_alamofire.json",
+ "bytes": 3667,
+ "sha256": "e25d44af2bbd6a3c35ea082a9faf5111f97da84cc47e8e22dff28af37e506baf"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/swift/cirepo_swift_apple_swift_nio.json",
+ "bytes": 3874,
+ "sha256": "943c1aca61544aaa230c7144b6c815bc6dfd4e7d21ac517945295f43c0ddf330"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/swift/cirepo_swift_vapor_vapor.json",
+ "bytes": 3564,
+ "sha256": "03ee8d711649ace440c24a5da68213a43b76632dc1c86aae425fbf0f29b29942"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/typescript/cirepo_typescript_microsoft_typescript.json",
+ "bytes": 5633,
+ "sha256": "d5790697006add791a3850c5a98f34e091e6cca79ae3459322e2d50f39f36561"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/typescript/cirepo_typescript_microsoft_vscode.json",
+ "bytes": 4863,
+ "sha256": "027b8602f753b28ff04d5b6109d37d5d8813490e77d7bfb2ab8e80aaa4125ebf"
+ },
+ {
+ "path": "evals/code-intelligence/truth/repositories/typescript/cirepo_typescript_vercel_next_js.json",
+ "bytes": 5609,
+ "sha256": "8660f49b785874edc516c5e7f975d1cd9cb310d2c194c46310114d7931ef66fd"
+ },
{
"path": "evals/context-recall/oaf-repo-gold.v1.json",
- "bytes": 3401,
- "sha256": "a98371403340b7938e5fc56e35d8929d5a5420b416bc8c19a724e7a4be4c2b71"
+ "bytes": 3402,
+ "sha256": "c6c6dfc3eed2eeeaeccf14623ec08e4f8f6bfdfe388412ccbe5c5b264bef3800"
},
{
"path": "evals/context-selection/cases.json",
@@ -1373,12 +2068,7 @@
{
"path": "evals/README.md",
"bytes": 4329,
- "sha256": "f98c9b361ed781666049a35f128c77adbb4934f1c93c5baca0765c88535ba4a6"
- },
- {
- "path": "evals/recall-map/architecture-ranking.v1.json",
- "bytes": 953,
- "sha256": "b5dc1628ab7c6e849052010c97f9263907ebf8c7168b3d7f4f1987beccc5cdff"
+ "sha256": "f98c9b361ed781666049a35f128c77adbb4934f1c93c5baca0765c88535ba4a6"
},
{
"path": "evals/sufficiency/gold.v1.json",
@@ -1590,6 +2280,71 @@
"bytes": 891,
"sha256": "dc8eb1892b400c12d3d688583d58e0bee08b5d2e69370379aef418e988ad7ba6"
},
+ {
+ "path": "examples/protocol/code-intelligence-engine-request.json",
+ "bytes": 452,
+ "sha256": "896466e02dd67490a0ec0e387b277877b39fc209b4d8016aea083635c63c9aa7"
+ },
+ {
+ "path": "examples/protocol/code-intelligence-engine-response.json",
+ "bytes": 2231,
+ "sha256": "2d20de72a8579e1dd7dc5e1be56039f4c434cae5b1338bd320f8813b9d74db8a"
+ },
+ {
+ "path": "examples/protocol/code-intelligence-graph.json",
+ "bytes": 2767,
+ "sha256": "8547d7e59583d2a3c0c4294076c14a7ba406b4c6edc75ccc2af0f5a1c7af2883"
+ },
+ {
+ "path": "examples/protocol/code-intelligence-index-build-request.json",
+ "bytes": 495,
+ "sha256": "763eea1eb9a6c964f0a53db67dc91d551af2d10be6a285141fc38e89639734b0"
+ },
+ {
+ "path": "examples/protocol/code-intelligence-index-doctor-request.json",
+ "bytes": 315,
+ "sha256": "02ffb6cceeda50dab7041d8ad1b8d53c6807f40c60f14b1d52382cdcf633805d"
+ },
+ {
+ "path": "examples/protocol/code-intelligence-index-query-request.json",
+ "bytes": 479,
+ "sha256": "65a73cf2f7dbce9bfc7ff66e05d050525396f50ec47dfc305b9d0eae8e990d8b"
+ },
+ {
+ "path": "examples/protocol/code-intelligence-index-reader-response.json",
+ "bytes": 2418,
+ "sha256": "8c1b08b3fe9ba74368e1f18fe5b83fa3a4bd4e19e7eac5a45f0f3e6b271eb1ce"
+ },
+ {
+ "path": "examples/protocol/code-intelligence-index-refresh-request.json",
+ "bytes": 440,
+ "sha256": "6f79857eb593931f7cf8b3054f0d2a1d91c186b1c82b33ea1f5c5352a20d2c4e"
+ },
+ {
+ "path": "examples/protocol/code-intelligence-index-repair-request.json",
+ "bytes": 653,
+ "sha256": "88fae5994ff1e4967a984a481cc06d70b22f1f4d0d763cce0ec181307c779ea4"
+ },
+ {
+ "path": "examples/protocol/code-intelligence-index-status-request.json",
+ "bytes": 315,
+ "sha256": "57a660e05ff21540123d7399e41c2d563242b64a3dab3f3262980944541c2796"
+ },
+ {
+ "path": "examples/protocol/code-intelligence-index-writer-response.json",
+ "bytes": 1422,
+ "sha256": "e00aeef77571beec6ee29f5a2848599f144eac6f0bc6e9df1f3753799e117b02"
+ },
+ {
+ "path": "examples/protocol/code-intelligence-language-report.json",
+ "bytes": 2810,
+ "sha256": "d555d3ca26c20830ecae6ff972d554765f39acae2de8adab13c0e2e5bf115a66"
+ },
+ {
+ "path": "examples/protocol/code-intelligence-language-truth.json",
+ "bytes": 2096,
+ "sha256": "c309c4fb9a39c5fdde35b0e4e79b2ae0db37fece250e84ba13caffcdfc9f177b"
+ },
{
"path": "examples/protocol/compatibility/bounded-tool/error-code-valid.json",
"bytes": 21,
@@ -1677,8 +2432,8 @@
},
{
"path": "examples/protocol/compatibility/fixtures.json",
- "bytes": 45596,
- "sha256": "9a80ea8a22eff4c6d3b3d37218b3c0f68c9903a7a3438fe07f190f2d07fb04f5"
+ "bytes": 53048,
+ "sha256": "65d8262577768c906b1caae76dc160d6ef38473b5ceee0cf82d7c74bf7bfb875"
},
{
"path": "examples/protocol/compatibility/invalid-harness-context-source.json",
@@ -1720,6 +2475,76 @@
"bytes": 658,
"sha256": "ec11b869dc74eb3757a3f510c1a3bd8294c5af1c0c7b1e02d6ea6859ca919f5e"
},
+ {
+ "path": "examples/protocol/compatibility/invalid/code-intelligence-capability-matrix-false-full.json",
+ "bytes": 871,
+ "sha256": "5e0b430dc5f075d4d8e34221b7012a5b4e9c02aa17bfa527ccc12b998f9cbb3c"
+ },
+ {
+ "path": "examples/protocol/compatibility/invalid/code-intelligence-engine-request-absolute-root.json",
+ "bytes": 361,
+ "sha256": "a4b9f4fa6ab20107cb2a21fb21c4bb8f53c230c30d7a8b6b3fefd27d7fc30f6c"
+ },
+ {
+ "path": "examples/protocol/compatibility/invalid/code-intelligence-engine-response-raw-error.json",
+ "bytes": 291,
+ "sha256": "7c1eb72e7f91a0b137732af3095d07704bb7336fd6b0004f18fb099f4ca631df"
+ },
+ {
+ "path": "examples/protocol/compatibility/invalid/code-intelligence-graph-absolute-path.json",
+ "bytes": 1158,
+ "sha256": "a5deebac8709051fb84916c729cb1b30deed2ecff9828616758944c15e90b9f1"
+ },
+ {
+ "path": "examples/protocol/compatibility/invalid/code-intelligence-graph-raw-body.json",
+ "bytes": 1214,
+ "sha256": "4d40dbd6764b0f4c32f0553d85e2716dcc33021fb6d8b59e5533330638044576"
+ },
+ {
+ "path": "examples/protocol/compatibility/invalid/code-intelligence-index-absolute-path.json",
+ "bytes": 329,
+ "sha256": "6ced62eb9842a095a9ee67ec4f8fab9b5ccdb9cb745a693dbac05016f500643e"
+ },
+ {
+ "path": "examples/protocol/compatibility/invalid/code-intelligence-index-doctor-repair.json",
+ "bytes": 337,
+ "sha256": "7dc7b0a7851dfb23ab70d67757554054ef3ddb64472a9398879beb58a9542c58"
+ },
+ {
+ "path": "examples/protocol/compatibility/invalid/code-intelligence-index-raw-sql.json",
+ "bytes": 394,
+ "sha256": "0e6833a2ec7892d2a8ed37a54b0637f75086df718ed1893f3ed37abe76e4e868"
+ },
+ {
+ "path": "examples/protocol/compatibility/invalid/code-intelligence-index-status-writer.json",
+ "bytes": 336,
+ "sha256": "282c5f8f1362da6397e98465d8071e8a8bcd154772c2f55cdeec05573180ebcf"
+ },
+ {
+ "path": "examples/protocol/compatibility/invalid/code-intelligence-index-unbounded-query.json",
+ "bytes": 361,
+ "sha256": "bfdba1c4dc0f58db07931dda787f89b5dce362eef60aaf2b3ac77611623c7366"
+ },
+ {
+ "path": "examples/protocol/compatibility/invalid/code-intelligence-language-truth-absolute-path.json",
+ "bytes": 1376,
+ "sha256": "12411bcf7602ffb7cf84d31c63d7f02056e39d37b5715dee59702f57d265dca6"
+ },
+ {
+ "path": "examples/protocol/compatibility/invalid/code-intelligence-language-truth-duplicate-id.json",
+ "bytes": 1664,
+ "sha256": "663fa3699183673a5c5a6636fd01b78a43e3ef8608953e79308925920c14d427"
+ },
+ {
+ "path": "examples/protocol/compatibility/invalid/code-intelligence-language-truth-raw-body.json",
+ "bytes": 1420,
+ "sha256": "c733b99452b147b77822e711c9ef09eb3477150174fc5edb2d5964b2cd0c80b8"
+ },
+ {
+ "path": "examples/protocol/compatibility/invalid/code-intelligence-language-truth-unsupported-full.json",
+ "bytes": 1368,
+ "sha256": "851cd534400c8c7072a3cf7c5c28fe0ad6d40e87f38789c2be346c4cfe69ec80"
+ },
{
"path": "examples/protocol/compatibility/invalid/context-pack-handoff-report-memory-preflight-leak.json",
"bytes": 6631,
@@ -1887,8 +2712,8 @@
},
{
"path": "examples/protocol/compatibility/invalid/source-graph-local-path.json",
- "bytes": 914,
- "sha256": "d477221f96e7c4253afa9938e07f0ca75e867bb1c0cee979bb820c18bb4a5a9d"
+ "bytes": 919,
+ "sha256": "973960cacdb84e196fd6c50130cfda67c1f6d5b5cf059dfb145afb3ae2960f9b"
},
{
"path": "examples/protocol/compatibility/invalid/source-graph-preview-double-encoded-locator.json",
@@ -1897,8 +2722,8 @@
},
{
"path": "examples/protocol/compatibility/invalid/source-graph-preview-local-path.json",
- "bytes": 2036,
- "sha256": "0650e9b217ce60bacd037961d811b92bafe1d5809ae7cddb4a3451069e220bbb"
+ "bytes": 2041,
+ "sha256": "80e030fcb5af063dd907d8d92aacb33069e38324b1387fef8eac322137aeb8ef"
},
{
"path": "examples/protocol/compatibility/invalid/source-graph-preview-raw-body.json",
@@ -2292,8 +3117,8 @@
},
{
"path": "examples/protocol/recall-map.json",
- "bytes": 2852,
- "sha256": "cdaafe7b410e15c349fa149b67fc6b624cca3cc1e3851a41d366762a5904b7f4"
+ "bytes": 3587,
+ "sha256": "dfd39493742143504358274b23c0234c1549a34d4f48a6ee9936f8892b05677e"
},
{
"path": "examples/protocol/research-ingestion-result.json",
@@ -2327,13 +3152,13 @@
},
{
"path": "examples/protocol/source-graph-preview.json",
- "bytes": 4991,
- "sha256": "e7a0d65f5fdc5082b1f90044b901b60451d11058986929a03a03402843d4a0d5"
+ "bytes": 7998,
+ "sha256": "13c5d3a2050f74e07003e5a521c8ae5744b79e3816f58ffd0f87bee112bdeafa"
},
{
"path": "examples/protocol/source-graph.json",
- "bytes": 6272,
- "sha256": "08fd3be564e1869bc5e92f24d1afd206b1ba3e68adf47c4dc550e5f2e843d257"
+ "bytes": 7276,
+ "sha256": "7937c7754fe41def7ef7a2c2ea7c96a3dfb935231ba76f9efc4e5860a19d8222"
},
{
"path": "examples/protocol/source-snapshot.json",
@@ -2372,8 +3197,8 @@
},
{
"path": "HANDOFF_VERIFICATION.json",
- "bytes": 975,
- "sha256": "fc3e3c8dcf101d72e70e1a1e062802fce1b7b70cab9c48aacfb3efabc12be7d2"
+ "bytes": 967,
+ "sha256": "57de5f619e0331f4b375db356974affe6885546ab7802b07ea51890a1d206113"
},
{
"path": "LICENSE",
@@ -2395,6 +3220,31 @@
"bytes": 498,
"sha256": "9284cecc7e960c19025c219450a1fbd4033b32ce0cd285a92385b4468d4ae2ee"
},
+ {
+ "path": "native-packages/darwin-arm64/package.json",
+ "bytes": 559,
+ "sha256": "3afb629c54c0aae6f23268d3008b0d27bc54ecb67807857267d3ec2143191100"
+ },
+ {
+ "path": "native-packages/darwin-x64/package.json",
+ "bytes": 551,
+ "sha256": "a0518737a0221bab07c8f0d745079f9b01cdb5822f38ea3d4a8104d2c16dbe4b"
+ },
+ {
+ "path": "native-packages/linux-arm64-gnu/package.json",
+ "bytes": 589,
+ "sha256": "e694928c842dea8dde1062b135d12a9140e936087913993cd42535743ad7b930"
+ },
+ {
+ "path": "native-packages/linux-x64-gnu/package.json",
+ "bytes": 581,
+ "sha256": "67ca046d9c13e6563859125e42d3b71d5dbf44e1b1507442d68b059328b55043"
+ },
+ {
+ "path": "native-packages/win32-x64/package.json",
+ "bytes": 558,
+ "sha256": "76db91330ae678df3f44dc2e2f714184b2c495d510ff61b4aa69430b16bc7cbe"
+ },
{
"path": "NOTICE",
"bytes": 160,
@@ -2402,13 +3252,13 @@
},
{
"path": "package-lock.json",
- "bytes": 11169,
- "sha256": "66bac759b6c28f95c29eca52c0b42e9bb24237a4a926fb67a42093f9ee425ed7"
+ "bytes": 12582,
+ "sha256": "5a80cd7fc840b4df82d873ca398a68fef89d05c4f2194c2156b41c44aa6d579e"
},
{
"path": "package.json",
- "bytes": 4476,
- "sha256": "0b4ad199b2c9bcb0d4832f3da1747633cee59deb65ec94d3a33f83292bef5dff"
+ "bytes": 8967,
+ "sha256": "e5ff8b5bee26f0403a31c2c15b119f4e9b9952db895ccfec9c1da2afd089f4c3"
},
{
"path": "packages/adapter-contracts/package.json",
@@ -2417,8 +3267,8 @@
},
{
"path": "packages/adapter-contracts/src/index.mjs",
- "bytes": 18745,
- "sha256": "98564fc1f45a9784230e4198292e893060cb4feb4cb16e87575e35ffcd67e9cb"
+ "bytes": 19886,
+ "sha256": "1c81a602a063e270319e16ebefba6002b801e06f18077706d143a02699ed1a45"
},
{
"path": "packages/agentpack/AGENTS.md",
@@ -2492,8 +3342,8 @@
},
{
"path": "packages/harness-context/src/index.mjs",
- "bytes": 219824,
- "sha256": "b046445715ddada47138c119cf30ee67d015ae5616c8f7ebcacf7f320fde357a"
+ "bytes": 219812,
+ "sha256": "df51b9467f528f501304163f4db9ab5a4ad0303d73e60572a766ce1271cae104"
},
{
"path": "packages/memory-core/package.json",
@@ -2577,8 +3427,8 @@
},
{
"path": "packages/protocol/README.md",
- "bytes": 12048,
- "sha256": "f0ec98afb85ee4fbeb501932354def0557b8507b9a7ad951b36549d8686fe45c"
+ "bytes": 16486,
+ "sha256": "145f9de2d4268a82afdd89d616da8e07fe7a148d1c87efb4eeb3b79fa2e3b06b"
},
{
"path": "packages/protocol/schemas/adapter-conformance-fixture.schema.json",
@@ -2795,6 +3645,61 @@
"bytes": 3097,
"sha256": "8a584b9e6ca896b5783a8d3d52d8875a4d0192dbd943f539a60bfc12f5a41a47"
},
+ {
+ "path": "packages/protocol/schemas/code-intelligence-benchmark-manifest.schema.json",
+ "bytes": 2311,
+ "sha256": "905defa33739b66e639e03fdf265eb971b978a27836a027401e1bd1297bc31f8"
+ },
+ {
+ "path": "packages/protocol/schemas/code-intelligence-capability-matrix.schema.json",
+ "bytes": 4009,
+ "sha256": "2ef5c04c65d7e20ff277588b37a9d825b42a9b6649bec82244f588cbffaf657a"
+ },
+ {
+ "path": "packages/protocol/schemas/code-intelligence-engine-request.schema.json",
+ "bytes": 2294,
+ "sha256": "6a057470276574ff7120aaf94fe2e6cb4c5d577bc419b92f968a7a2bc10969c5"
+ },
+ {
+ "path": "packages/protocol/schemas/code-intelligence-engine-response.schema.json",
+ "bytes": 3472,
+ "sha256": "a26564fbc471886b2e8c023e036a0c779cfd0c8402db708b8c296b8a7dccfdbc"
+ },
+ {
+ "path": "packages/protocol/schemas/code-intelligence-graph.schema.json",
+ "bytes": 9541,
+ "sha256": "236c661df380f9377e907bf43183966db4170ca401bab3dd9be1586640b7e21a"
+ },
+ {
+ "path": "packages/protocol/schemas/code-intelligence-index-request.schema.json",
+ "bytes": 9215,
+ "sha256": "07f627dcf2afa7e37d608341718ccc4990d1b3fd27d652b3e2d6f958b0ae0b31"
+ },
+ {
+ "path": "packages/protocol/schemas/code-intelligence-index-response.schema.json",
+ "bytes": 14603,
+ "sha256": "cf28ace9a8e9b22ae44bd14785e06c01e568986818d600dab33bf6801aebed2f"
+ },
+ {
+ "path": "packages/protocol/schemas/code-intelligence-language-report.schema.json",
+ "bytes": 5669,
+ "sha256": "92fc9dc8652dbb24442e4de0202d7222b95732c78164d9fad4c36f1d6541bc52"
+ },
+ {
+ "path": "packages/protocol/schemas/code-intelligence-language-truth.schema.json",
+ "bytes": 7547,
+ "sha256": "0b502bc60af696962876467d7bc4ff28c5ab9b64476acf22006ba2cfb2f411c8"
+ },
+ {
+ "path": "packages/protocol/schemas/code-intelligence-repository-request.schema.json",
+ "bytes": 8463,
+ "sha256": "8538f89fe299331d0f1fc3dc83b1fb6b478ef5021a3eb82142de7f9373ac520c"
+ },
+ {
+ "path": "packages/protocol/schemas/code-intelligence-repository-response.schema.json",
+ "bytes": 11571,
+ "sha256": "bee3576a3cfed3a923b3190b061af92ce3c8503e1b6ae494b5944819da3d4e14"
+ },
{
"path": "packages/protocol/schemas/content-local-draft-outcome.schema.json",
"bytes": 10020,
@@ -3147,13 +4052,13 @@
},
{
"path": "packages/protocol/schemas/provider-manifest.schema.json",
- "bytes": 1453,
- "sha256": "003404f77fd47261c469e1951438727e0e953ec85d9d17e2f213d1ca5fc80453"
+ "bytes": 1474,
+ "sha256": "79f3f2ed0a2d7dfbed0507bfa4cc3e9b6da2c35fe8856b168c8bdb57494a495e"
},
{
"path": "packages/protocol/schemas/recall-map.schema.json",
- "bytes": 13170,
- "sha256": "6626b9c93a3b446c1db8b24a5344967f9876d60a8087054b9d532e2dff78928f"
+ "bytes": 18640,
+ "sha256": "5b1476a7475af8dc74afbdcc394d977124239a8d52f780c3304a2e66d129a2fb"
},
{
"path": "packages/protocol/schemas/replay-request.schema.json",
@@ -3197,13 +4102,13 @@
},
{
"path": "packages/protocol/schemas/source-graph-preview.schema.json",
- "bytes": 19619,
- "sha256": "469a3247a99319f6e13f10ae797cc42700cd2c6f2de5abc94540f8c2bb27ce19"
+ "bytes": 27438,
+ "sha256": "62de5358ef640fe4918e56d3a3a841cb4e59cd867a71ab7fe09755413cd71f8a"
},
{
"path": "packages/protocol/schemas/source-graph.schema.json",
- "bytes": 9998,
- "sha256": "4624b7fe439c8fb6c41a9c1b6f074f8a319db242df1f158f2a26c5795a71161b"
+ "bytes": 12413,
+ "sha256": "3ba52ff8bdd56be530c337d38bf6b9f6cd35922e771d7b2bd5a9a9492a5af776"
},
{
"path": "packages/protocol/schemas/source-snapshot.schema.json",
@@ -3280,6 +4185,21 @@
"bytes": 2140,
"sha256": "7ba9ba39a56db0dccfb4e2d2ec7d4bcd1b2f43546bfed2e75ce32e10fe8a18fb"
},
+ {
+ "path": "packages/protocol/src/code-intelligence-contract.mjs",
+ "bytes": 5185,
+ "sha256": "e0860fa74232b8028f7fb100e26dbadce33a5750ff92a5e8c3771471894a81fb"
+ },
+ {
+ "path": "packages/protocol/src/code-intelligence-evaluation.mjs",
+ "bytes": 12133,
+ "sha256": "6b1aaf63771f1d1f86c8feb42949b485c36a5382e348265d6bfbfbf143973ace"
+ },
+ {
+ "path": "packages/protocol/src/code-intelligence-index-contract.mjs",
+ "bytes": 485,
+ "sha256": "ca7af90986c9ccab3c80c96dfd69f0b2f54b58172f15878c7d14ddb6a74b3cf8"
+ },
{
"path": "packages/protocol/src/fingerprint.mjs",
"bytes": 545,
@@ -3287,8 +4207,8 @@
},
{
"path": "packages/protocol/src/index.mjs",
- "bytes": 2710,
- "sha256": "5e92e31561443d946a5d0750ed06bf5c2042aa1a853d7d257136170df53d459f"
+ "bytes": 3261,
+ "sha256": "0c37d75a77ee352676e3e2433b7e5b3eef7ff57b6a394f23f05e4d4e4d57100a"
},
{
"path": "packages/protocol/src/schema-validator.mjs",
@@ -3297,8 +4217,8 @@
},
{
"path": "packages/protocol/src/source-graph-locator.mjs",
- "bytes": 3909,
- "sha256": "0be7b97d58aa5d871418eb2ecb49ae6235edb35efc9272844fac71815430452b"
+ "bytes": 3778,
+ "sha256": "25b32c7497d99485a40039355072dd1d049d6b548c1a7204ffb6cbc0f50c3929"
},
{
"path": "packages/README.md",
@@ -3312,8 +4232,8 @@
},
{
"path": "packages/recall-map/src/index.mjs",
- "bytes": 19093,
- "sha256": "6005d3e3262ae27868ba6ae6684ad3536e4c609d004779b99fb27bbe3ad9cf1a"
+ "bytes": 24839,
+ "sha256": "ad619fd72a5e438e6ae0948e0480bf9b1d6cd3687458e28266f752c10fac4b61"
},
{
"path": "packages/release-readiness/package.json",
@@ -3362,8 +4282,13 @@
},
{
"path": "packages/source-graph/src/index.mjs",
- "bytes": 13169,
- "sha256": "69c20de2bab3f0fcc4bf32141457c0a89284bb60a36c57d67cfe7902a270c3b8"
+ "bytes": 384,
+ "sha256": "671c6176d272093abb1f5e80bec940f62b0651738e20bec8720f7f7a879200f5"
+ },
+ {
+ "path": "packages/source-graph/src/native-index-projection.mjs",
+ "bytes": 44443,
+ "sha256": "30bd81bcdc79b5596b826516ea02a091ec68a6ae338378845885a4849abac858"
},
{
"path": "packages/storage/package.json",
@@ -3412,8 +4337,8 @@
},
{
"path": "packages/ui/tokens.json",
- "bytes": 1847,
- "sha256": "a62bc9b393cd468d071cdb1a032492195d018281e2e115c0ebef17f5e0bcac86"
+ "bytes": 1846,
+ "sha256": "0efd0b96083a059a68907ebc860775e8229f93171f4fbc9d3d09f84438cc8d4d"
},
{
"path": "packages/workflow-runtime/AGENTS.md",
@@ -3447,8 +4372,8 @@
},
{
"path": "PROJECT_STATUS.json",
- "bytes": 60894,
- "sha256": "66a4cea825b1893e0f234f0f8ae71906dae322756cdde7cccfb967a4d44e2a83"
+ "bytes": 71591,
+ "sha256": "bf386cad39c718e8d22f08a98ab6fd637b090eda39fc79ec5636ff30c0a46465"
},
{
"path": "providers/AGENTS.md",
@@ -3472,23 +4397,23 @@
},
{
"path": "providers/native/catalog.json",
- "bytes": 3359,
- "sha256": "d91b874543ac6cdfec0968aec317d12df3c6504f24dd3b7ce8a97467c7951fd3"
+ "bytes": 3135,
+ "sha256": "f57d1bf3ebe65723b010eca67ee79c9273f0187410c227b86407e8f11c5d3147"
},
{
- "path": "providers/native/context-candidate-ast-code/package.json",
- "bytes": 193,
- "sha256": "32e405dd437f2450ee7a54b639a35759e97826ad190df186ee5c45b89d057aff"
+ "path": "providers/native/code-intelligence-rust/provider.json",
+ "bytes": 1831,
+ "sha256": "696c661451f8953e64fb4298db61b1a6b81bde45fff599363f070e0fa5824965"
},
{
- "path": "providers/native/context-candidate-ast-code/provider.json",
- "bytes": 1185,
- "sha256": "436a2c8cda4f1e333b79aa9b6838dec4ada2836250da5b9f3bd6388aa4a70af6"
+ "path": "providers/native/code-intelligence-rust/src/binary-resolver.mjs",
+ "bytes": 8396,
+ "sha256": "54c1c4335113ba63c050dadb4d0fe8cd07da517cce117af3590ac96d8ff70ac9"
},
{
- "path": "providers/native/context-candidate-ast-code/src/index.mjs",
- "bytes": 145608,
- "sha256": "0124c48325443dd0ef8bb03159531a0793ea80acd2da6f2cfdb84c5daf889753"
+ "path": "providers/native/code-intelligence-rust/src/index.mjs",
+ "bytes": 17569,
+ "sha256": "c6656b59b8a1dddc5187ba24cfd4d17ca8b3cd0289f87d5caaf06cebd139e025"
},
{
"path": "providers/native/context-candidate-exact/package.json",
@@ -3505,11 +4430,6 @@
"bytes": 104,
"sha256": "2105f7b65f7220ccfc97be7214205ab3b6579949b0f566f99d4176b7ca968fe3"
},
- {
- "path": "providers/native/context-candidate-graph/provider.json",
- "bytes": 1015,
- "sha256": "0aae3a87e35c40323cf5bad7d322289bd91aa06ea03453f34ec3cd8d3d25e52d"
- },
{
"path": "providers/native/context-candidate-lexical/package.json",
"bytes": 192,
@@ -3662,8 +4582,8 @@
},
{
"path": "README.md",
- "bytes": 14946,
- "sha256": "032ed4f09e75d866df80450c60f17f83dd772ea4a4d09ead0481156e407cc4e4"
+ "bytes": 18342,
+ "sha256": "23c600d0afd3a62747409b29048c485669f67243f3cac30df4870b20707f0d8e"
},
{
"path": "REPOSITORY_MAP.md",
@@ -3672,8 +4592,8 @@
},
{
"path": "rfcs/0001-protocol-contracts.md",
- "bytes": 4999,
- "sha256": "f7967d8858a7e492f3b6a116005cc87c6817bd78ae66218cc9f21071ef041821"
+ "bytes": 7255,
+ "sha256": "2ef9b7958ed30313512c94d0e1efd2728b649d9cb9dde70d6dc7897ae6b38495"
},
{
"path": "ROADMAP.md",
@@ -3687,13 +4607,78 @@
},
{
"path": "rust/Cargo.lock",
- "bytes": 37156,
- "sha256": "3493480c19ebb60150243014131d2710c29ef518db9d53292797df6cac9ecd56"
+ "bytes": 37356,
+ "sha256": "82f0f29eb376744e9322e7bd37392cf5fbe87db769594a8f664600d28ef36daa"
},
{
"path": "rust/Cargo.toml",
- "bytes": 151,
- "sha256": "89e8515f57e367d84898b699f16cb859d254cda3a709f703af60830d2bfd688c"
+ "bytes": 164,
+ "sha256": "bf641846d1039b665509e3ded5e28eef8dfb3e694f0e131983111916b7658ff6"
+ },
+ {
+ "path": "rust/oaf-index/Cargo.toml",
+ "bytes": 384,
+ "sha256": "5b4cd10700aa1c8d128a7acdb5c5f30b0a005b14aa9ad5a7777748eb5cb3fc1d"
+ },
+ {
+ "path": "rust/oaf-index/src/doctor.rs",
+ "bytes": 11036,
+ "sha256": "6ec6fdf0093d3043f258185b9ceaf3354968ea21633e3d55589b15ea769e5036"
+ },
+ {
+ "path": "rust/oaf-index/src/lib.rs",
+ "bytes": 101853,
+ "sha256": "a263201cdc0e7e5aee6d68d1e6d6a15d8b51e3239254630900b168cf337f976b"
+ },
+ {
+ "path": "rust/oaf-index/src/model.rs",
+ "bytes": 5707,
+ "sha256": "4d3664f0110bef5d292d778706a4f911c3251d59f206dc3088b62a4732f9bb95"
+ },
+ {
+ "path": "rust/oaf-index/src/registry.rs",
+ "bytes": 52587,
+ "sha256": "7c9c97a85d94463efeeb0e43ab9c2cf3936355babf384f07b4eddf40c7e25a04"
+ },
+ {
+ "path": "rust/oaf-index/src/watcher.rs",
+ "bytes": 10528,
+ "sha256": "66f714dce370e70cdd087237d37ed5b58fa1f9f124bd52d69e312351f6aa4eba"
+ },
+ {
+ "path": "rust/oaf-index/tests/community_process_projection.rs",
+ "bytes": 11260,
+ "sha256": "a9a1594d7c8d8dd4cc69f558faff99dddbea4008f852cedaf9554034cbda557a"
+ },
+ {
+ "path": "rust/oaf-index/tests/doctor_repair.rs",
+ "bytes": 10808,
+ "sha256": "2feea3c218443feba9c6f9483350582e905d5af5762f5bac24f158496f7949b6"
+ },
+ {
+ "path": "rust/oaf-index/tests/generation_roundtrip.rs",
+ "bytes": 16976,
+ "sha256": "8971c979b073288d594b67d7a3831efb5330080510dc4df44d74a791b880c5a2"
+ },
+ {
+ "path": "rust/oaf-index/tests/incremental_refresh.rs",
+ "bytes": 15202,
+ "sha256": "0855401aa66d1b3d7ee09a634b3566cd6ff83d7fdbdae2c9201c52d2016a8300"
+ },
+ {
+ "path": "rust/oaf-index/tests/repository_registry.rs",
+ "bytes": 22152,
+ "sha256": "9944ba4068f7e7c6625d72181703ee11a372d2c042ddcef8257b1c1a6983d696"
+ },
+ {
+ "path": "rust/oaf-index/tests/store_contract.rs",
+ "bytes": 6223,
+ "sha256": "bbd7c8595462e689bc33f3214049377c00d843a8d8def88766ac91e52fbb5226"
+ },
+ {
+ "path": "rust/oaf-index/tests/watcher.rs",
+ "bytes": 9610,
+ "sha256": "c9a31649c661175c7f20fa54f7fae7a762b641f820d9617bf19eb5c024272df7"
},
{
"path": "rust/oaf-ingest/Cargo.toml",
@@ -3702,8 +4687,13 @@
},
{
"path": "rust/oaf-ingest/src/lib.rs",
- "bytes": 100061,
- "sha256": "59b7e5b74ca2d2a201c61945735f094289883fef606b6da43e30c56fc803bbaa"
+ "bytes": 251579,
+ "sha256": "49557cd873133111832de7e2172244d1dd989680eb7a25ac7ca4bfa92cf61fb4"
+ },
+ {
+ "path": "rust/oaf-ingest/test-support/lib_unit.rs",
+ "bytes": 90971,
+ "sha256": "0498f1fa68650a2fc0b2287dfd4aa7e01747ee3cbbb20b8d4a781e7bf510de19"
},
{
"path": "rust/oaf-store/Cargo.toml",
@@ -3722,13 +4712,38 @@
},
{
"path": "rust/oaf/Cargo.toml",
- "bytes": 423,
- "sha256": "d701d011db4142967de88c33728bcd285a1e9438f8ef83dd3f68de02c21bf4fe"
+ "bytes": 556,
+ "sha256": "e912038c4b9396b4b6043c101c40fe234456c10d24039c5715df30f1e3e9ecdb"
+ },
+ {
+ "path": "rust/oaf/src/code_intelligence.rs",
+ "bytes": 57358,
+ "sha256": "5d5657f0934207b061c581167542149e35974cb676fef9f97f165c1d4d036c7e"
+ },
+ {
+ "path": "rust/oaf/src/index_protocol.rs",
+ "bytes": 105534,
+ "sha256": "9f6c09d3f5fc4ceda4840916279b09e7a232e720147b143c79a4823e86a4faec"
},
{
"path": "rust/oaf/src/main.rs",
- "bytes": 179738,
- "sha256": "0857b482770209875102cfb78510eb23af0540db020cab384ad591f6e6fb7379"
+ "bytes": 180552,
+ "sha256": "01069883c485ff2208fbeb2961652c1e77547463154cfcf72c92f79e87d405e2"
+ },
+ {
+ "path": "rust/oaf/src/repository_protocol.rs",
+ "bytes": 25736,
+ "sha256": "142625cd31c56c9d84f9324a5c19c362b748637ce55a4f25c3b8dc8bdc01b954"
+ },
+ {
+ "path": "rust/oaf/test-support/code_intelligence_unit.rs",
+ "bytes": 71971,
+ "sha256": "941334ef28b86da8a505f303c76a45743162fece71a4eec6e6a14595d0d233c4"
+ },
+ {
+ "path": "rust/oaf/test-support/index_protocol_refresh.rs",
+ "bytes": 8191,
+ "sha256": "eba76ee61479734a99b6e3474e6c3bbae9b22ac1accc71e407fc9ccd3d115ebe"
},
{
"path": "rust/README.md",
@@ -3755,20 +4770,85 @@
"bytes": 12305,
"sha256": "a5cec9490a619d954189f4da3e46bf3d9816a05b96c59b73a0a4cf559bc6972f"
},
+ {
+ "path": "scripts/code-intelligence-batch-a.mjs",
+ "bytes": 13878,
+ "sha256": "90c1f6c17a7bb36a49be11061a389aeaa3f464866a52c9512b4d5a896994a09d"
+ },
+ {
+ "path": "scripts/code-intelligence-batch-b.mjs",
+ "bytes": 1178,
+ "sha256": "9646e5733bdf1517df2baa3edc653d882897b290dd2a199965aa485ad12919db"
+ },
+ {
+ "path": "scripts/code-intelligence-batch-c.mjs",
+ "bytes": 1089,
+ "sha256": "15529aa3a10f51af81f71f32b028dc64ef6485d5c60a56cf0ef780d3014ef3ad"
+ },
+ {
+ "path": "scripts/code-intelligence-batch-d.mjs",
+ "bytes": 892,
+ "sha256": "f27c017e9d41ebcf1e3c93c54f4fc49364553e6549a8709d538d9f08736a962a"
+ },
+ {
+ "path": "scripts/code-intelligence-batch-e.mjs",
+ "bytes": 623,
+ "sha256": "f14d1f33f7fe297768368c7d32afa92d2dad357cc2c93a845dbc30d99bf40ba3"
+ },
+ {
+ "path": "scripts/code-intelligence-case-counts.mjs",
+ "bytes": 184,
+ "sha256": "4efd6da5f6ec7104360242caad0cb29fbd06341b16fbb0928cbf081bd229d1c1"
+ },
+ {
+ "path": "scripts/code-intelligence-language-batch.mjs",
+ "bytes": 13081,
+ "sha256": "9c68fdcd994d9907ddbb07a6a474effd75a35c3f60b3cc93be539805e5e85ea4"
+ },
+ {
+ "path": "scripts/code-intelligence-million-node-index.mjs",
+ "bytes": 31953,
+ "sha256": "22e59f361f24ebeb5ef9308f9c2887606a1d866f561d0bf36dd17dae0dd83ab7"
+ },
+ {
+ "path": "scripts/code-intelligence-phase2-tier1.mjs",
+ "bytes": 19453,
+ "sha256": "b6177af2cbd4bb18a58e09e22f2c25573ed72dfd45971295668768117ea5f992"
+ },
+ {
+ "path": "scripts/code-intelligence-phase3-index.mjs",
+ "bytes": 26708,
+ "sha256": "03af85ca40b3425369648e2b5d2e18d72d5128e38028528e6203b7b3c6c13b50"
+ },
+ {
+ "path": "scripts/code-intelligence-phase4-intelligence.mjs",
+ "bytes": 34886,
+ "sha256": "60d3ea1be2f3cd88bc4d778aa1d5c63202f2e0f19f2091217986a71b1553e778"
+ },
+ {
+ "path": "scripts/code-intelligence-phase5-cross-service.mjs",
+ "bytes": 18823,
+ "sha256": "ae120817402df2ca7ce9404d5c6044b36cdb629672d56ce103491d9659ab512f"
+ },
+ {
+ "path": "scripts/code-intelligence-phase8-gitnexus.mjs",
+ "bytes": 22825,
+ "sha256": "c07e39cecc0c49fb6bebf981afddd0ce9ef6f117c783a70aa7b7ac27aaf6d1be"
+ },
{
"path": "scripts/consumer-browser-smoke.mjs",
- "bytes": 24218,
- "sha256": "dc17608ad6af8d0c1afd4670410b6611d68dfb2c47a85917954a23fc5955f6e9"
+ "bytes": 47555,
+ "sha256": "5ed2fc88903cb91a5f7f3b6c544465b4ecf81c86ec723c7a73a3d991df78d704"
},
{
"path": "scripts/consumer-smoke.mjs",
- "bytes": 15345,
- "sha256": "c1a2e0bdd7b67707249d2dc8b62680c5c879e502b3716eb598cd782e12b1c134"
+ "bytes": 16190,
+ "sha256": "3d72170d9712297c8324c610121b7e56f25e5baf261ccfce9a89007a03fce772"
},
{
"path": "scripts/context-recall-eval.mjs",
- "bytes": 24537,
- "sha256": "dfc03c9e5821e5ce2fd9a9a1da179577bd8a340e36adaa5789ca8502e0c5d2ad"
+ "bytes": 21364,
+ "sha256": "f0c8887d3567dfb6e3429020c39e3c8cb58c776d3deaa1a1e416472fd5d58b42"
},
{
"path": "scripts/db.mjs",
@@ -3790,16 +4870,46 @@
"bytes": 2540,
"sha256": "d9404c7ad8de320a796781027355bc30765b883f047623c2b6447b77de547a7d"
},
+ {
+ "path": "scripts/large-repository-browser-smoke.mjs",
+ "bytes": 10692,
+ "sha256": "62d2085d2d9f04b0ef298140932f20802825091c756153fd7d8131cc33869fa8"
+ },
+ {
+ "path": "scripts/native-code-intelligence-consumer-smoke.mjs",
+ "bytes": 57995,
+ "sha256": "ffb4edea2cd090911f6b2b9a54b9be590c9421179c2b0662282e3e26c0085dd2"
+ },
+ {
+ "path": "scripts/native-release-set.mjs",
+ "bytes": 33342,
+ "sha256": "f2d99279af5fc66b66a5d819c7dc85b6fe16a96534a0f4e0abd4fad8843e84be"
+ },
{
"path": "scripts/native-smoke.mjs",
- "bytes": 19730,
- "sha256": "8c3606465778a109052eb9ceac13401c5a05efa4e4f582111464341c865e7b6f"
+ "bytes": 15507,
+ "sha256": "0bec2d8a1cd5704a90a283691e2f7469eb1f03d8d2006917bdb4ae6c7752fe72"
},
{
"path": "scripts/operations-smoke.mjs",
"bytes": 4473,
"sha256": "501743d134f1d4783130f19b7a2aa824b8e7c0140cf767941dba4d565e571f3e"
},
+ {
+ "path": "scripts/package-native-platform.mjs",
+ "bytes": 17284,
+ "sha256": "5fce96170c62bc336eef4ce2f4785baf784936ef3012c202f22c7ab51d5f11cc"
+ },
+ {
+ "path": "scripts/pin-code-intelligence-corpus.mjs",
+ "bytes": 8272,
+ "sha256": "b626f81a7e8d41a9c5ee3d012185d8f86bbcc4559d6ba310e5f1203bcd08e804"
+ },
+ {
+ "path": "scripts/pinned-repository-acquisition.mjs",
+ "bytes": 13495,
+ "sha256": "4a92d85d79f0c48339f498f1b11ca60d83014c301f16cad2e857b73234656dc2"
+ },
{
"path": "scripts/postgres-recovery-test.mjs",
"bytes": 6211,
@@ -3822,14 +4932,19 @@
},
{
"path": "scripts/run-evals.mjs",
- "bytes": 49056,
- "sha256": "8d16a746e6abe7c56fd41a72cc7725d6cb4b9012d5255ae6e197746f8cf5f4fc"
+ "bytes": 44058,
+ "sha256": "1eb08e1f8e11b8d7fd2ad352cdfca07280bcd3b409e46581ab4c6df596cb703c"
},
{
"path": "scripts/rust-clone-deadcode-quality.mjs",
"bytes": 6671,
"sha256": "8acb78f2bdb85e318e1e7f92a226b40051f690b522467b0e712bd3abbb7b4484"
},
+ {
+ "path": "scripts/rust-code-intelligence-protocol-quality.mjs",
+ "bytes": 5995,
+ "sha256": "cff3826f839b79c2c09d0f7e919e0f74273685fec39b13e40d48754e054e55e2"
+ },
{
"path": "scripts/rust-connectors-quality.mjs",
"bytes": 6399,
@@ -3882,8 +4997,8 @@
},
{
"path": "scripts/rust-ingest-quality.mjs",
- "bytes": 35987,
- "sha256": "328ae65564a165e5723b3e6e9c08cfbfbbd5a396016c299ce6fc8d5a43725f5b"
+ "bytes": 33589,
+ "sha256": "e762338a6d8eaf97d3e048b79d037f57929da7b4ac7ad7d61a84bc2990e17ebe"
},
{
"path": "scripts/rust-intelligence-quality.mjs",
@@ -3922,8 +5037,8 @@
},
{
"path": "scripts/rust-typed-calls-quality.mjs",
- "bytes": 10539,
- "sha256": "bf40113d64e88512f90d6960b347397f0d47452acc60111e3f3636cc7ba0004d"
+ "bytes": 10013,
+ "sha256": "b4b7d927322a77d8be1f8a981ac3cd2efb364a7a8fec8e1b68120ce8ac9c6c1e"
},
{
"path": "scripts/rust-wiki-quality.mjs",
@@ -3992,13 +5107,13 @@
},
{
"path": "services/control-api/src/route-contracts.mjs",
- "bytes": 85191,
- "sha256": "d56878cde8db320aa8b8d1000a2ae3be9024964f4d59e70c12ccc4a8a2c57341"
+ "bytes": 85266,
+ "sha256": "09cf097d01d089f11285dea13934dce27883c08e96f4b6342cb8300af4179854"
},
{
"path": "services/control-api/src/server.mjs",
- "bytes": 77454,
- "sha256": "1a4a8efae64d68668e26295234c6db413f32bc1841da24f4237a5b37ef0c4806"
+ "bytes": 80081,
+ "sha256": "08df11a9e58dcbd1478869879368fcf244a9a26726a8d63f409ab193491d151f"
},
{
"path": "services/README.md",
@@ -4167,33 +5282,78 @@
},
{
"path": "tests/adapter-contracts.test.mjs",
- "bytes": 2095,
- "sha256": "cf2f09ebda11b29e165dcfc222db82dc45ca3e877ffec300f18707057c164713"
+ "bytes": 2753,
+ "sha256": "9c231aa1845d3607e6a5c58907d50866a8a1cac21d3f3f1b554e7d49deb78662"
},
{
"path": "tests/agentpack.test.mjs",
"bytes": 1888,
"sha256": "a8ebe62d1e84da01c2d36caec8385159288912e9ce80b25bc258235dfe495607"
},
- {
- "path": "tests/ast-code-candidate-source.test.mjs",
- "bytes": 34196,
- "sha256": "bf6744a69b4f22d20efd59c1de73771c8d16191f7ab1cc08bef80db1f99dbcce"
- },
{
"path": "tests/benchmark-truth-floor.test.mjs",
"bytes": 13663,
"sha256": "eda7b42e5a2b1f52e648e886cf0e403eec748b319f134d31a5bb8e9113b234b6"
},
+ {
+ "path": "tests/cli-graph-index.test.mjs",
+ "bytes": 13155,
+ "sha256": "8c37c757203c9dca2dcd516844bde0edeb2a11f31abfaec4e8d55bb3c8b5b349"
+ },
{
"path": "tests/cli-measure-context-pack.test.mjs",
- "bytes": 13781,
- "sha256": "fb679543a73e9e212a31791a7a14e18642f3aec581a0c03dd05fbac53f42e34d"
+ "bytes": 14229,
+ "sha256": "5fdb79033abea5a0ab0141f34788b9fdd0543dd48bac269ed23709b6b105f36a"
},
{
"path": "tests/cli.test.mjs",
- "bytes": 307634,
- "sha256": "308e9a00e6e07b882b14318fc5de57060ce1f1cde71c6115bcee6f32f930b55d"
+ "bytes": 319614,
+ "sha256": "3de81c5b79ee239a66b7645b3f7341d1d60111274a72c012111eb880ef423bb0"
+ },
+ {
+ "path": "tests/code-intelligence-case-counts.test.mjs",
+ "bytes": 554,
+ "sha256": "69d2164ddd79699e4c2edf8a2d1af58492527143488c6d6c3d2c589ef15e87a2"
+ },
+ {
+ "path": "tests/code-intelligence-contract.test.mjs",
+ "bytes": 6851,
+ "sha256": "a07964f67f21d70fffc5450ac75a3d91830baf8116e649ea96f5aff0390313df"
+ },
+ {
+ "path": "tests/code-intelligence-index-contract.test.mjs",
+ "bytes": 13494,
+ "sha256": "9afb50237098b28852dad413a5444f015a3c0d882d84e489652324fa2363390d"
+ },
+ {
+ "path": "tests/code-intelligence-language-evaluation.test.mjs",
+ "bytes": 10047,
+ "sha256": "ed315bc21941a9eb6e5b1a5ade6bddfa299d0641c662b69815d09b6bbd04658b"
+ },
+ {
+ "path": "tests/code-intelligence-million-node-benchmark.test.mjs",
+ "bytes": 4930,
+ "sha256": "357c81a747aa3801dfece921a6b987dd18bdaaa80bdaa380f5b499d301254c65"
+ },
+ {
+ "path": "tests/code-intelligence-phase5-cross-service.test.mjs",
+ "bytes": 11798,
+ "sha256": "11e0f70b93fc2e7f0dbf72846f34fce95973e3a745e5eb7d93356da7780a0d50"
+ },
+ {
+ "path": "tests/code-intelligence-phase5-go-cross-repository.test.mjs",
+ "bytes": 19646,
+ "sha256": "4c2c9da24bd0606d64721b4ca75f38e6820c890fc7becc436d4483999fd5669e"
+ },
+ {
+ "path": "tests/code-intelligence-phase8-gitnexus.test.mjs",
+ "bytes": 7193,
+ "sha256": "93881fb2adba73bbfa7e68c883455f6ff34123f29991c081d6ee97f1788f6a0d"
+ },
+ {
+ "path": "tests/code-intelligence-tier1.test.mjs",
+ "bytes": 11496,
+ "sha256": "56a3830303cc03b39da81ac31a5940e895f044d8480300706d3d2d6b634add3b"
},
{
"path": "tests/content-intelligence.test.mjs",
@@ -4227,8 +5387,8 @@
},
{
"path": "tests/context-recall-eval.test.mjs",
- "bytes": 9204,
- "sha256": "de20ffa9e867a890f987c4737498087ab03ab07efed19cfae6c0e608401cac31"
+ "bytes": 9180,
+ "sha256": "dc8bb5042f2b7351d3343b0d7ecaf435a057b300d4e25857ea21d911f40b5546"
},
{
"path": "tests/context-selection.test.mjs",
@@ -4247,13 +5407,13 @@
},
{
"path": "tests/control-api-boundary.test.mjs",
- "bytes": 74195,
- "sha256": "77376826e22d0565f5feff2ae4586ae85501d46cc9444e23482c9d90be7b879b"
+ "bytes": 91527,
+ "sha256": "5abff660c2343e765637d1bbb166853e6e1e0623ebcd44522bc5e36b4faaf1ec"
},
{
"path": "tests/control-api.test.mjs",
- "bytes": 23693,
- "sha256": "e12a3d726c79be95d543f0945e4873ef664f3de59052be33be35403b08b5e086"
+ "bytes": 24877,
+ "sha256": "ed08fd832f43fd99d6ba1f96ab3ea17281a1a9ff44b6e08b88def0dc95533134"
},
{
"path": "tests/docs.test.mjs",
@@ -4275,10 +5435,30 @@
"bytes": 7113,
"sha256": "f3cf5842666723bacc09669b363fd5753b5393648e1f4d7bbae30901c39a4695"
},
+ {
+ "path": "tests/fixtures/code-intelligence-multi-repository/go/go.mod",
+ "bytes": 59,
+ "sha256": "c36a0ab75182b5726c937293fd9e06adeec48a64a7ac53e24089a338e8adde0f"
+ },
+ {
+ "path": "tests/fixtures/code-intelligence-multi-repository/go/shared.go",
+ "bytes": 130,
+ "sha256": "998f24e2ed2852d50acdda596e4ab914e9274bd87e5884726eb18d7f3a2c97c8"
+ },
+ {
+ "path": "tests/fixtures/code-intelligence-multi-repository/python/src/shared.py",
+ "bytes": 94,
+ "sha256": "5b03ed02ed4203323eef47e3fe33636d88b8599d240cfb64465ad31c2823c50e"
+ },
+ {
+ "path": "tests/fixtures/code-intelligence-multi-repository/typescript/src/shared.ts",
+ "bytes": 141,
+ "sha256": "330bbc834577685df624b7b08a8f38efe12699b3977deadfa020a61d14d87024"
+ },
{
"path": "tests/fixtures/context-recall-external-baseline.json",
- "bytes": 2840,
- "sha256": "b4ed3462808dc2f5e6b90f4d77888626a823c6ca8a2be6ee03c0e2f853825e4e"
+ "bytes": 2828,
+ "sha256": "3778850d76783b5ffd71c2924af4bb9fbf821b8b116f57816dbf142540472c03"
},
{
"path": "tests/fixtures/durable-worker-child.mjs",
@@ -4312,8 +5492,8 @@
},
{
"path": "tests/harness-context-pack.test.mjs",
- "bytes": 56008,
- "sha256": "e65fd71af0fa05912219bd9493dc3e0220421866c4243c23c290e517fcb606e0"
+ "bytes": 57966,
+ "sha256": "cab45998c02affa0f06d08ce7cbcf7d8da822cd8890b474d63a51912bc5a5301"
},
{
"path": "tests/harness-context-preview.test.mjs",
@@ -4330,6 +5510,11 @@
"bytes": 3729,
"sha256": "ee81df87cc9f0df4c4df41cc5b7d421791e2c56fe53cb60853202a339f970f3e"
},
+ {
+ "path": "tests/mcp-code-intelligence.test.mjs",
+ "bytes": 28429,
+ "sha256": "3925475d5cd89aaefb19ddc81dfcfffa474bd9fb31d70da421617ac9d47164d8"
+ },
{
"path": "tests/memory-core.test.mjs",
"bytes": 6706,
@@ -4342,8 +5527,8 @@
},
{
"path": "tests/memory-recall-integrity.test.mjs",
- "bytes": 16547,
- "sha256": "6252f6eebac43c5cef90178dd6735d7096bac9c10a55d2c3e464ac211eedb1a4"
+ "bytes": 16978,
+ "sha256": "9cb66d3c4247ba3608a209e294f11cf92902067d9d984ee93f3ac82359ac38bb"
},
{
"path": "tests/model-gateway-local-integration.test.mjs",
@@ -4360,6 +5545,31 @@
"bytes": 12297,
"sha256": "dc5b83cfb42fa58001520c7172efccb295b2722d734f2de308b600cb5ff8669d"
},
+ {
+ "path": "tests/native-binary-resolver.test.mjs",
+ "bytes": 6588,
+ "sha256": "85c8cb268291c65b36c036d3161976082ce2aaa1d0b6242cf453ecf724ce9fae"
+ },
+ {
+ "path": "tests/native-code-intelligence-14-languages.test.mjs",
+ "bytes": 12392,
+ "sha256": "26da338ffc4847c2d15824d7cb90b2490e1249aecd650c85ee5d1889f65120b9"
+ },
+ {
+ "path": "tests/native-code-intelligence-multi-repository-search.test.mjs",
+ "bytes": 9672,
+ "sha256": "c515b3a0255ee7f856615bd1576a9729d9fea492b90f05c173e2cc5b207ed13d"
+ },
+ {
+ "path": "tests/native-code-intelligence-provider.test.mjs",
+ "bytes": 12079,
+ "sha256": "65af289c4a40c38d2838ed2cc01ff88a3f89e202dff1c955b22399bcd8a0dded"
+ },
+ {
+ "path": "tests/native-code-intelligence-repository-provider.test.mjs",
+ "bytes": 15077,
+ "sha256": "2453b1addf2a51617d749852d7cf01824a16a50c6cbcdfa716e28ea0b7d2af98"
+ },
{
"path": "tests/native-core-local-profile-e2e.test.mjs",
"bytes": 6469,
@@ -4395,6 +5605,16 @@
"bytes": 3214,
"sha256": "2d2d3e4ae4ebc68766eb1d50fb34444334398751512d7b9adf23ed4eb425374b"
},
+ {
+ "path": "tests/native-platform-packaging.test.mjs",
+ "bytes": 7634,
+ "sha256": "001247911de73382c36d9d3944a27e2b40db18d5bd4baff8c8542a79895c45ae"
+ },
+ {
+ "path": "tests/native-release-set.test.mjs",
+ "bytes": 22078,
+ "sha256": "feb8e1245bec4d676da02af23b791be6c71fd012b4ef4a69a2935a9d6172b955"
+ },
{
"path": "tests/native-workflow-embedded.test.mjs",
"bytes": 2428,
@@ -4410,6 +5630,11 @@
"bytes": 9783,
"sha256": "12abca709267e72605b37cc3543380190c68bfdacb41575337039478770e0f49"
},
+ {
+ "path": "tests/pinned-repository-acquisition.test.mjs",
+ "bytes": 3793,
+ "sha256": "d5f136a6f44e8f509dd757603d5b90ea6dcbb3d802b98b9101b171d38fd33f69"
+ },
{
"path": "tests/planning.test.mjs",
"bytes": 4904,
@@ -4450,20 +5675,20 @@
"bytes": 2514,
"sha256": "b8691b69e21208e3d9fb49d7a2e70d4091beaa46373c459a16921ca2672b00e5"
},
- {
- "path": "tests/recall-map-ranking.test.mjs",
- "bytes": 27311,
- "sha256": "0412de5c334debd2e859220f14ae10bba8afd48197d093e1d3dc5ecc0f9afa92"
- },
{
"path": "tests/recall-map.test.mjs",
- "bytes": 17197,
- "sha256": "fe1e3a731bdea70805ebfb77193816d6d16475813362b30d64c0b30eafd69999"
+ "bytes": 23148,
+ "sha256": "ab2397c294231d794c8336c8a6cd8612f3c0e29c2227d453088c8934c060c319"
},
{
"path": "tests/release-readiness.test.mjs",
- "bytes": 21729,
- "sha256": "56124e792cccb107c8528e50342dd81106235944828e17f37aecc4b270559af7"
+ "bytes": 23180,
+ "sha256": "e83ce1bf2c7084aaf2bca6311a73be2f41a99d4d122844c4acd18924cb3147ed"
+ },
+ {
+ "path": "tests/release-regressions.test.mjs",
+ "bytes": 7715,
+ "sha256": "abfb3aaab0021d7a5d46b5afe0e87166ec5ed3eee597f205978521d29f5d64a5"
},
{
"path": "tests/replay.test.mjs",
@@ -4487,13 +5712,8 @@
},
{
"path": "tests/skill-catalog.test.mjs",
- "bytes": 30945,
- "sha256": "6ea779227d1dce5c84c55812cc0834df8c5ce8a969aaf736d6313387ae9eae03"
- },
- {
- "path": "tests/source-graph-preview.test.mjs",
- "bytes": 82027,
- "sha256": "b7469c2e3ae26345950968c678e5e4484ee4fe9443765e288028dd85bc89b92d"
+ "bytes": 30946,
+ "sha256": "64ec4c506e92b8f228c4954cf051f4dedc6b23dac66843fba768adf4c4f9246b"
},
{
"path": "tests/tool-durable-integration.test.mjs",
@@ -4527,13 +5747,28 @@
},
{
"path": "tests/usage-docs.test.mjs",
- "bytes": 17606,
- "sha256": "885efd11e5c90f3c41e2c45d452e802176f4b7523eb71756f8e05a674a7c6f1f"
+ "bytes": 18846,
+ "sha256": "aa9a19fd64a8c2d24f301c1d43fef9f91ca0515bd89f5740541b9718f4b2ac37"
+ },
+ {
+ "path": "tests/web-memory-graph.test.mjs",
+ "bytes": 5701,
+ "sha256": "486feed038e139cb98c38bf02be6287094a687212fde8b2a60f3628bc2b2ce37"
+ },
+ {
+ "path": "tests/web-orientation.test.mjs",
+ "bytes": 10109,
+ "sha256": "26d5ec037466cd1a49a7582b578ed7706b7404d4edb2e8b9202761f478c5064b"
},
{
"path": "tests/web-shell.test.mjs",
- "bytes": 99856,
- "sha256": "3749602b34492de746d712ae0fe56fe88da56c4ff8a088cc8ebe45d111e46fd5"
+ "bytes": 103555,
+ "sha256": "647ff1ef1611bcff8b685ee3a42a296304844c0ba236e48ca1540dbec74aadd1"
+ },
+ {
+ "path": "tests/web-source-map.test.mjs",
+ "bytes": 11630,
+ "sha256": "d49e4c040f5351ee4acb16164adc8d37a983e969ec5667cb0657c83ad75463d9"
},
{
"path": "tests/workflow-durable-crash.test.mjs",
diff --git a/apps/cli/help.mjs b/apps/cli/help.mjs
index 7f74275c..a4057227 100644
--- a/apps/cli/help.mjs
+++ b/apps/cli/help.mjs
@@ -11,7 +11,7 @@ function renderHelpText(text) {
if (command === 'oaf') return text;
return text
.replace(
- /\boaf (?=(status|setup|verify|doctor|connect|disconnect|task|demo|serve|check|eval|manifest|map|semantic|handoff|token-saver|context|loop|skill|measure|benchmark|bench|memory|mcp|harness|hook|version)\b)/g,
+ /\boaf (?=(status|setup|verify|doctor|connect|disconnect|task|demo|serve|check|eval|manifest|map|semantic|handoff|token-saver|context|graph|loop|skill|measure|benchmark|bench|memory|mcp|harness|hook|version)\b)/g,
`${command} `
);
}
@@ -65,9 +65,17 @@ Usage:
oaf context registry status --read-only --format json
oaf context graph preview --root . --query "approve token reset" --trace runAuthWorkflow --changed src/auth.ts --changed-from-git --dry-run --format summary
oaf graph stats --root . --format summary
+ oaf graph stats --root . --engine native --format summary
+ oaf graph search --root . --query "main" --engine native --format json
oaf graph search --root . --query "route registration hooks" --format summary
oaf graph trace --root . --symbol runAuthWorkflow --direction outbound --format summary
oaf graph impact --root . --changed src/auth.ts --format summary
+ oaf graph index --status --root . --format summary
+ oaf graph index --write --root . --format json
+ oaf graph index --refresh --watch --root . --format summary
+ oaf graph index --write --engine native --root . --format summary
+ oaf graph index --query main --engine native --root . --format json
+ oaf graph index --doctor --engine native --root . --format summary
oaf loop plan --read-only --root . --objective "Ship safely" --stop-condition "focused tests pass" --validation "node --test tests/web-shell.test.mjs" --format json
oaf loop observe --root . --plan loop-plan.json --execute-commands --format json
oaf loop verify --root . --plan loop-plan.json --worktree ../isolated-worktree --sqlite .local/memory.sqlite --execute-commands --format json
@@ -118,8 +126,10 @@ Usage:
oaf mcp smoke context-pack --read-only --objective "Ship safely" --step "handoff" --target codex --changed src/auth.ts --changed-from-git --format json
oaf mcp resources --read-only --stdio
oaf mcp server --read-only --root . --stdio
+ oaf mcp server --read-only --engine native --root . --stdio
oaf mcp stats --read-only --root . --format json
oaf mcp install --client claude-code --dry-run --format json
+ oaf mcp uninstall --client claude-code --dry-run --format json
oaf harness setup status --client codex --dry-run --format json
oaf harness setup plan --client cursor --server oaf --dry-run --format json
oaf harness setup uninstall --client cursor --server oaf --dry-run --format json
@@ -162,10 +172,10 @@ Options:
--sqlite Local SQLite memory store; defaults to .local/memory.sqlite.
--changed Add a reviewed changed workspace path; repeatable.
--changed-from-git Detect changed paths with local git only.
- --query Search the bounded JS/TS source graph.
+ --query Search the current bounded native source index.
--format Emit the full safe report or a compact rendering.
-Builds a bounded local repository map from the implemented JS/TS static graph
+Builds a bounded local repository map from the current native SQLite source index
and the governed local SQLite memory store. It does not write files, call
models, use network access, enable external adapters, or expose raw source
bodies.`],
@@ -240,11 +250,28 @@ Usage:
oaf graph trace --root . --symbol runAuthWorkflow --direction outbound --format summary
oaf graph impact --root . --changed src/auth.ts --format summary
oaf graph impact --root . --changed-from-git --format json
-
-Graph commands build a bounded local JS/TS source graph and return locator-only
-stats, search, trace, or changed-file impact reports. They are read-only by default:
-no files are written, no model calls are made, no network calls are made, and
-raw source bodies are not included.`],
+ oaf graph index --status --root . --format summary
+ oaf graph index --write --root . --format json
+ oaf graph index --refresh --root . --format json
+ oaf graph index --refresh --watch --root . --format summary
+ oaf graph index --write --engine native --root . --format summary
+ oaf graph index --refresh --engine native --root . --format summary
+ oaf graph index --query main --kind exact --engine native --root . --format json
+ oaf graph index --doctor --engine native --root . --format summary
+ oaf graph index --repair --confirm --engine native --root . --format summary
+
+Options for read commands:
+ --engine Use the packaged native engine. The other spellings are strict native aliases.
+
+Graph read commands return bounded locator-only stats, search, trace, or
+changed-file impact reports. Native is the default and requires the verified
+platform package plus a current local SQLite index. Missing or stale native
+state returns the exact build, refresh, repair, or package action. The former
+auto and native-preview spellings remain strict native aliases. Index writes
+are explicit. Native stores its versioned SQLite index under .local/source-index.
+It stores metadata only; raw source bodies are not included.
+MCP reads the index but never builds or refreshes it.
+No graph command makes model or network calls.`],
['context handoff', `Memory Recall CLI: context handoff
Usage:
@@ -369,15 +396,24 @@ Usage:
oaf mcp resources --read-only --memory-refine --uri oaf://workspace/ws_local/memory/refine --format summary
oaf mcp resources --read-only --context-pack --objective "Ship safely" --step "handoff" --target codex --changed src/auth.ts --format json
oaf mcp server --read-only --root . --stdio
+ oaf mcp server --read-only --engine native --root . --stdio
oaf mcp stats --read-only --root . --format json
oaf mcp smoke context-pack --read-only --objective "Ship safely" --step "handoff" --target codex --changed src/auth.ts --format json
oaf mcp install --client claude-code --dry-run --format json
+ oaf mcp uninstall --client claude-code --dry-run --format json
MCP commands inspect or expose local read-only resources, run the stdio bridge,
preview install plans, or report delivery stats. Resource summaries require
--uri and do not dump full resource bodies. Resource/server paths require
---read-only; install remains dry-run unless explicitly confirmed by the install
-flow.`],
+--read-only; install and uninstall remain dry-run unless explicitly confirmed.
+Uninstall removes only an exact Memory Recall-owned entry and preserves .local.
+Direct MCP server commands and mcp install default to native mode and print
+indexBuildCommand; install never builds or
+refreshes an index. Run the explicit writer when wanted:
+ oaf graph index --write --engine native --root . --format summary
+Native mode reads only a current, healthy prebuilt .local/source-index database
+and returns an actionable error otherwise. It never builds, refreshes, or falls
+back to a source scan.`],
['memory refine', `Memory Recall CLI: memory refine
Usage:
diff --git a/apps/cli/oaf.mjs b/apps/cli/oaf.mjs
index d39eb0e5..ae154b05 100755
--- a/apps/cli/oaf.mjs
+++ b/apps/cli/oaf.mjs
@@ -1,7 +1,7 @@
#!/usr/bin/env node
import { createHash, randomUUID } from 'node:crypto';
import { execFileSync, spawn } from 'node:child_process';
-import { constants as fsConstants, createReadStream, existsSync, realpathSync } from 'node:fs';
+import { constants as fsConstants, createReadStream, existsSync, realpathSync, watch as watchFs } from 'node:fs';
import { appendFile, lstat, mkdir, mkdtemp, open, readFile, readdir, realpath, rename as renameFile, rm, stat, writeFile } from 'node:fs/promises';
import { tmpdir } from 'node:os';
import path from 'node:path';
@@ -42,7 +42,7 @@ import {
evaluateMemoryWrite,
normalizeMemoryPathsConfig
} from '../../packages/memory-core/src/index.mjs';
-import { buildRecallMap } from '../../packages/recall-map/src/index.mjs';
+import { buildRecallMapMemorySummary } from '../../packages/recall-map/src/index.mjs';
import {
assertSemanticProposalSourcesCurrent,
assertSemanticSourceBindingsCurrent,
@@ -57,8 +57,10 @@ import {
} from '../../packages/semantic-setup/src/index.mjs';
import { assertSafeContextPackUsePlanForResource, buildOafReadOnlyResourceCatalog, createMcpBridge } from '../../packages/protocol-bridges/src/index.mjs';
import contextPackUsePlanSchema from '../../packages/protocol/schemas/context-pack-use-plan.schema.json' with { type: 'json' };
+import contextPackSchema from '../../packages/protocol/schemas/context-pack.schema.json' with { type: 'json' };
import contextPackHandoffReportSchema from '../../packages/protocol/schemas/context-pack-handoff-report.schema.json' with { type: 'json' };
import contextPackMeasurementReportSchema from '../../packages/protocol/schemas/context-pack-measurement-report.schema.json' with { type: 'json' };
+import codeIntelligenceGraphSchema from '../../packages/protocol/schemas/code-intelligence-graph.schema.json' with { type: 'json' };
import mcpContextPackSmokeSchema from '../../packages/protocol/schemas/mcp-context-pack-smoke.schema.json' with { type: 'json' };
import memoryRefineReportSchema from '../../packages/protocol/schemas/memory-refine-report.schema.json' with { type: 'json' };
import semanticSetupReportSchema from '../../packages/protocol/schemas/semantic-setup-report.schema.json' with { type: 'json' };
@@ -72,7 +74,13 @@ import { loadReviewedToolCatalog } from '../../packages/tool-registry/src/index.
import {
DEFAULT_SOURCE_GRAPH_PREVIEW_MAX_FILES,
DEFAULT_SOURCE_GRAPH_PREVIEW_MAX_FILE_BYTES,
- buildSourceGraphPreview
+ buildNativeIndexArchitecture,
+ buildNativeIndexSourceGraphPreview,
+ buildUnavailableSourceGraphPreview,
+ nativeIndexReadyForAutomaticRead,
+ nativeIndexSource,
+ nativeStructuralNode,
+ nativeStructuralRelationship
} from '../../packages/source-graph/src/index.mjs';
const CLI_PATH = fileURLToPath(import.meta.url);
@@ -86,6 +94,8 @@ const MCP_STDIO_MAX_MESSAGES = boundedEnvInteger('OAF_MCP_STDIO_MAX_MESSAGES', 1
const MCP_STDIO_CHILD_TIMEOUT_MS = boundedEnvInteger('OAF_MCP_STDIO_CHILD_TIMEOUT_MS', 30_000, { min: 1, max: 60_000 });
const MCP_STDIO_CHILD_MAX_STDOUT_BYTES = boundedEnvInteger('OAF_MCP_STDIO_CHILD_MAX_STDOUT_BYTES', 512 * 1024, { min: 1, max: 2_000_000 });
const MCP_STDIO_CHILD_MAX_STDERR_BYTES = boundedEnvInteger('OAF_MCP_STDIO_CHILD_MAX_STDERR_BYTES', 64 * 1024, { min: 1, max: 512 * 1024 });
+const MCP_CONTEXT_PACK_AUX_MAX_BYTES = 2_000_000;
+const CODE_INTELLIGENCE_EDGE_KINDS = Object.freeze([...codeIntelligenceGraphSchema.$defs.edge.properties.kind.enum]);
const MEMORY_PATH_MAX_BYTES = 8 * 1024 * 1024;
const SEMANTIC_HARNESSES = new Set(['codex', 'claude-code', 'cursor', 'generic']);
const SEMANTIC_PROVIDERS = new Set(['gemini', 'openai-compatible']);
@@ -93,8 +103,10 @@ const SEMANTIC_RESULT_MAX_BYTES = 256 * 1024;
const SECRET_LIKE = /\b(?:authorization\s*[:=]\s*(?:"[^"\r\n]*"|'[^'\r\n]*'|(?:Bearer|Basic|Digest|Token)\s+[^\s"'`,;)]+|[^\s"'`,;)]+)|(?:api[_-]?key|token|secret|password)\s*[:=]\s*(?:"[^"\r\n]*"|'[^'\r\n]*'|[^\s"'`,;)]+))/iu;
const PRIVATE_LOCAL_PATH = /(?:^|[\s"'`(])(?:\/Users(?:\/|$)|\/home\/[A-Za-z0-9._-]+(?:\/|$)|\/private(?:\/|$)|\/var\/folders(?:\/|$)|[A-Za-z]:\\)/u;
const AUTO_DETECTED_SECRET_PATH = /(^|\/)(?:\.env(?:[./_-]|$)|secrets?(?:[./_-]|$)|credentials?(?:[./_-]|$)|id_rsa(?:[./_-]|$)|id_ed25519(?:[./_-]|$)|[^/]+\.(?:pem|key|p12|pfx|crt|cert)$)/iu;
-const MCP_PRIVATE_MATERIAL = /(?:\/Users(?:\/|$)[^\s"',;]*|\/home\/[A-Za-z0-9._-]+(?:\/|$)[^\s"',;]*|[A-Za-z]:\\[^\s"',;]*|sk-[A-Za-z0-9_-]{12,}|OPENAI_API_KEY|AKIA[0-9A-Z]{16}|gh[opsu]_[A-Za-z0-9_]{12,}|(?:token|secret|password|api[_-]?key)\s*[=:]\s*[^\s"',;]+)/iu;
-const MCP_PRIVATE_MATERIAL_GLOBAL = /(?:\/Users(?:\/|$)[^\s"',;]*|\/home\/[A-Za-z0-9._-]+(?:\/|$)[^\s"',;]*|[A-Za-z]:\\[^\s"',;]*|sk-[A-Za-z0-9_-]{12,}|OPENAI_API_KEY|AKIA[0-9A-Z]{16}|gh[opsu]_[A-Za-z0-9_]{12,}|(?:token|secret|password|api[_-]?key)\s*[=:]\s*[^\s"',;]+)/giu;
+const MCP_PRIVATE_PATH = /(?:^|[\s"'`(])(?:\/Users(?:\/|$)[^\s"',;]*|\/home\/[A-Za-z0-9._-]+(?:\/|$)[^\s"',;]*|[A-Za-z]:\\[^\s"',;]*)/u;
+const MCP_PRIVATE_PATH_GLOBAL = /(?:^|[\s"'`(])(?:\/Users(?:\/|$)[^\s"',;]*|\/home\/[A-Za-z0-9._-]+(?:\/|$)[^\s"',;]*|[A-Za-z]:\\[^\s"',;]*)/gu;
+const MCP_SECRET_MATERIAL = /(?:sk-[A-Za-z0-9_-]{12,}|OPENAI_API_KEY|AKIA[0-9A-Z]{16}|gh[opsu]_[A-Za-z0-9_]{12,}|(?:token|secret|password|api[_-]?key)\s*[=:]\s*[^\s"',;]+)/iu;
+const MCP_SECRET_MATERIAL_GLOBAL = /(?:sk-[A-Za-z0-9_-]{12,}|OPENAI_API_KEY|AKIA[0-9A-Z]{16}|gh[opsu]_[A-Za-z0-9_]{12,}|(?:token|secret|password|api[_-]?key)\s*[=:]\s*[^\s"',;]+)/giu;
const MEMORY_BATCH_UNSAFE_TEXT = /(?:^|[\s('"`])\/(?:[A-Za-z0-9._-]+\/)+[^\s)'"<>]+|file:\/\/|[A-Za-z]:\\|\n|\r/iu;
const MEMORY_BATCH_CONFIDENCES = new Set(['extracted', 'inferred', 'ambiguous']);
const REALQA_QUERY_STOPWORDS = new Set(['what', 'which', 'who', 'where', 'when', 'why', 'how', 'is', 'the', 'a', 'an', 'by', 'does', 'do', 'for', 'to', 'of', 'provider', 'default', 'implements']);
@@ -1871,21 +1883,21 @@ async function normalizeMemoryBatchFact(root, input) {
function safeMemoryBatchToken(value, name) {
const text = String(value ?? '').trim();
if (!/^[A-Za-z0-9:_-]{1,128}$/u.test(text)) throw new Error(`${name} must be safe`);
- if (MCP_PRIVATE_MATERIAL.test(text) || MEMORY_BATCH_UNSAFE_TEXT.test(text)) throw new Error(`${name} must be safe`);
+ if (mcpContainsPrivateMaterial(text) || MEMORY_BATCH_UNSAFE_TEXT.test(text)) throw new Error(`${name} must be safe`);
return text;
}
function safeMemoryBatchObject(value) {
const text = String(value ?? '').trim().replace(/[.;:,]+$/u, '').trim();
if (!/^[A-Za-z0-9][A-Za-z0-9:_./ =,;()'-]{0,239}$/u.test(text)) throw new Error('object must be safe');
- if (MCP_PRIVATE_MATERIAL.test(text) || MEMORY_BATCH_UNSAFE_TEXT.test(text)) throw new Error('object must be safe');
+ if (mcpContainsPrivateMaterial(text) || MEMORY_BATCH_UNSAFE_TEXT.test(text)) throw new Error('object must be safe');
return text;
}
function safeMemoryBatchNotes(value) {
const text = String(value ?? '').trim();
if (!text || text.length > 500) throw new Error('notes must be safe');
- if (/[\n\r]/u.test(text) || MCP_PRIVATE_MATERIAL.test(text) || MEMORY_BATCH_UNSAFE_TEXT.test(text)) throw new Error('notes must be safe');
+ if (/[\n\r]/u.test(text) || mcpContainsPrivateMaterial(text) || MEMORY_BATCH_UNSAFE_TEXT.test(text)) throw new Error('notes must be safe');
return text;
}
@@ -2874,10 +2886,375 @@ async function graphCommand(values) {
if (subcommand === 'search') return graphSearchCommand(rest);
if (subcommand === 'trace') return graphTraceCommand(rest);
if (subcommand === 'impact') return graphImpactCommand(rest);
- console.error('graph requires stats, search, trace, or impact');
+ if (subcommand === 'index') return graphIndexCommand(rest);
+ if (subcommand === 'repositories') return graphRepositoriesCommand(rest);
+ console.error('graph requires stats, search, trace, impact, index, or repositories');
process.exitCode = 2;
}
+async function graphRepositoriesCommand(values) {
+ const action = values[0];
+ const args = values.slice(1);
+ const actionOptions = {
+ register: {
+ allowed: new Set(['--write', '--root', '--repository', '--name', '--workspace', '--format']),
+ valued: new Set(['--root', '--repository', '--name', '--workspace', '--format'])
+ },
+ list: {
+ allowed: new Set(['--read-only', '--root', '--workspace', '--format', '--limit']),
+ valued: new Set(['--root', '--workspace', '--format', '--limit'])
+ },
+ search: {
+ allowed: new Set(['--read-only', '--root', '--workspace', '--format', '--query', '--repository-ids', '--per-repository-limit', '--limit']),
+ valued: new Set(['--root', '--workspace', '--format', '--query', '--repository-ids', '--per-repository-limit', '--limit'])
+ }
+ }[action];
+ if (!actionOptions) {
+ console.error('graph repositories requires register, list, or search');
+ process.exitCode = 2;
+ return;
+ }
+ if (
+ unsupportedFlags(args, actionOptions.allowed, actionOptions.valued).length
+ || firstPositional(args, actionOptions.valued)
+ || [...actionOptions.valued].some((name) => args.includes(name) && missingOptionValue(args, name))
+ ) {
+ console.error(`graph repositories ${action} options are invalid`);
+ process.exitCode = 2;
+ return;
+ }
+ const root = option(args, '--root');
+ if (!root || root.startsWith('--')) {
+ console.error(`graph repositories ${action} requires --root `);
+ process.exitCode = 2;
+ return;
+ }
+ const format = option(args, '--format') ?? 'summary';
+ if (!['json', 'summary'].includes(format)) {
+ console.error('graph repositories only supports --format json or summary');
+ process.exitCode = 2;
+ return;
+ }
+ const workspaceId = option(args, '--workspace') ?? 'ws_local';
+ if (!/^[a-z][a-z0-9_-]{0,127}$/u.test(workspaceId)) {
+ console.error('graph repositories workspace is invalid');
+ process.exitCode = 2;
+ return;
+ }
+ if (action === 'register' ? !args.includes('--write') : !args.includes('--read-only')) {
+ console.error(`graph repositories ${action} requires ${action === 'register' ? '--write' : '--read-only'}`);
+ process.exitCode = 2;
+ return;
+ }
+ try {
+ const { RustCodeIntelligenceProvider } = await import('../../providers/native/code-intelligence-rust/src/index.mjs');
+ const provider = new RustCodeIntelligenceProvider();
+ let result;
+ if (action === 'register') {
+ const repository = option(args, '--repository');
+ const displayName = option(args, '--name');
+ const segments = repository?.split('/') ?? [];
+ if (
+ !repository
+ || path.isAbsolute(repository)
+ || repository.includes('\\')
+ || segments.some((segment) => !segment || segment === '.' || segment === '..' || !/^[A-Za-z0-9._@+-]+$/u.test(segment))
+ ) {
+ throw new Error('graph repositories register repository is invalid');
+ }
+ if (!displayName || !/^[A-Za-z0-9][A-Za-z0-9._ -]{0,79}$/u.test(displayName)) {
+ throw new Error('graph repositories register name is invalid');
+ }
+ result = await provider.registerRepository({
+ root,
+ workspaceId,
+ displayName,
+ rootLocator: `workspace://${repository}`
+ });
+ } else if (action === 'list') {
+ if (option(args, '--limit') === null) throw new Error('graph repositories list requires --limit');
+ const limit = strictIntegerOption(args, '--limit', 64);
+ if (limit < 1 || limit > 64) throw new Error('graph repositories list limit must be between 1 and 64');
+ result = await provider.listRepositories({ root, workspaceId, limit });
+ } else {
+ const query = option(args, '--query');
+ const repositoryIds = (option(args, '--repository-ids') ?? '').split(',').map((value) => value.trim()).filter(Boolean);
+ if (option(args, '--per-repository-limit') === null || option(args, '--limit') === null) {
+ throw new Error('graph repositories search requires --per-repository-limit and --limit');
+ }
+ const perRepositoryLimit = strictIntegerOption(args, '--per-repository-limit', 25);
+ const limit = strictIntegerOption(args, '--limit', 50);
+ if (!query || !/^[A-Za-z0-9_.$:/#@ -]{1,160}$/u.test(query)) throw new Error('graph repositories search query is invalid');
+ if (
+ repositoryIds.length < 1
+ || repositoryIds.length > 8
+ || new Set(repositoryIds).size !== repositoryIds.length
+ || repositoryIds.some((repositoryId) => !/^repo_[a-f0-9]{32}$/u.test(repositoryId))
+ ) {
+ throw new Error('graph repositories search repository ids are invalid');
+ }
+ if (perRepositoryLimit < 1 || perRepositoryLimit > 25) {
+ throw new Error('graph repositories search per-repository limit must be between 1 and 25');
+ }
+ if (limit < 1 || limit > 50) throw new Error('graph repositories search limit must be between 1 and 50');
+ result = await provider.searchRepositories({ root, workspaceId, query, repositoryIds, perRepositoryLimit, limit });
+ }
+ const report = compactNativeGraphRepositoriesReport(result);
+ console.log(format === 'json' ? JSON.stringify(report, null, 2) : renderGraphRepositoriesSummary(report));
+ } catch (error) {
+ console.error(strictNativeReadMessage(error));
+ process.exitCode = 2;
+ }
+}
+
+async function graphIndexCommand(values) {
+ const modes = ['--status', '--write', '--refresh', '--doctor', '--repair', '--query'].filter((flag) => values.includes(flag));
+ if (modes.length !== 1) {
+ console.error('graph index requires --status, --write, --refresh, --doctor, --repair, or --query');
+ process.exitCode = 2;
+ return;
+ }
+ const watch = values.includes('--watch');
+ if (watch && modes[0] !== '--refresh') {
+ console.error('graph index --watch requires --refresh');
+ process.exitCode = 2;
+ return;
+ }
+ const allowedFlags = new Set(['--status', '--write', '--refresh', '--doctor', '--repair', '--query', '--watch', '--root', '--workspace', '--out', '--format', '--engine', '--confirm', '--kind', '--locator', '--direction', '--depth', '--limit', '--cursor', '--max-files', '--max-file-bytes', '--max-nodes', '--max-edges', '--languages']);
+ const valueFlags = new Set(['--query', '--root', '--workspace', '--out', '--format', '--engine', '--confirm', '--kind', '--locator', '--direction', '--depth', '--limit', '--cursor', '--max-files', '--max-file-bytes', '--max-nodes', '--max-edges', '--languages']);
+ const unsupported = unsupportedFlags(values, allowedFlags, valueFlags);
+ if (unsupported.length) {
+ console.error('graph index options are invalid');
+ process.exitCode = 2;
+ return;
+ }
+ const format = option(values, '--format') ?? 'summary';
+ if (!['json', 'summary'].includes(format)) {
+ console.error('graph index only supports --format json or summary');
+ process.exitCode = 2;
+ return;
+ }
+ const root = option(values, '--root') ?? process.cwd();
+ const workspaceId = option(values, '--workspace') ?? 'ws_local';
+ const requestedEngine = option(values, '--engine') ?? 'native';
+ if (!['auto', 'native', 'native-preview'].includes(requestedEngine)) {
+ console.error('graph index --engine must be native, native-preview, or auto');
+ process.exitCode = 2;
+ return;
+ }
+ const invalidForMode = invalidGraphIndexModeOption(values, modes[0]);
+ if (invalidForMode) {
+ console.error(`graph index ${modes[0]} does not accept ${invalidForMode}`);
+ process.exitCode = 2;
+ return;
+ }
+ if (option(values, '--out')) {
+ console.error('native source index uses the fixed workspace-local index path');
+ process.exitCode = 2;
+ return;
+ }
+ return nativeGraphIndexCommand(values, { mode: modes[0], root, workspaceId, format, watch });
+}
+
+async function nativeGraphIndexCommand(values, { mode, root, workspaceId, format, watch }) {
+ if (mode === '--repair' && missingOptionValue(values, '--confirm')) {
+ console.error('graph index --repair requires --confirm ');
+ process.exitCode = 2;
+ return;
+ }
+ if (mode === '--query' && missingOptionValue(values, '--query')) {
+ console.error('graph index --query requires a query value');
+ process.exitCode = 2;
+ return;
+ }
+ try {
+ const languagesValue = option(values, '--languages');
+ const common = {
+ root,
+ workspaceId,
+ maxFiles: strictIntegerOption(values, '--max-files', DEFAULT_SOURCE_GRAPH_PREVIEW_MAX_FILES),
+ maxFileBytes: strictIntegerOption(values, '--max-file-bytes', DEFAULT_SOURCE_GRAPH_PREVIEW_MAX_FILE_BYTES),
+ maxNodes: strictIntegerOption(values, '--max-nodes', 5000),
+ maxEdges: strictIntegerOption(values, '--max-edges', 10000),
+ ...(languagesValue === null ? {} : { languages: languagesValue.split(',').map((value) => value.trim()).filter(Boolean) })
+ };
+ const { RustCodeIntelligenceProvider } = await import('../../providers/native/code-intelligence-rust/src/index.mjs');
+ const provider = new RustCodeIntelligenceProvider();
+ const execute = async () => {
+ let result;
+ if (mode === '--status') result = await provider.indexStatus(common);
+ else if (mode === '--write') result = await provider.buildIndex(common);
+ else if (mode === '--refresh') result = await provider.refreshIndex(common);
+ else if (mode === '--doctor') result = await provider.doctorIndex(common);
+ else if (mode === '--repair') result = await provider.repairIndex({ ...common, confirmRepairPlan: option(values, '--confirm') });
+ else {
+ result = await provider.queryIndex({
+ ...common,
+ kind: option(values, '--kind') ?? 'exact',
+ query: option(values, '--query'),
+ ...(option(values, '--locator') === null ? {} : { locator: option(values, '--locator') }),
+ ...(option(values, '--direction') === null ? {} : { direction: option(values, '--direction') }),
+ ...(option(values, '--depth') === null ? {} : { depth: strictIntegerOption(values, '--depth', 1) }),
+ ...(option(values, '--cursor') === null ? {} : { cursor: option(values, '--cursor') }),
+ limit: strictIntegerOption(values, '--limit', 25)
+ });
+ }
+ const report = compactNativeGraphIndexReport(result);
+ console.log(format === 'json' ? JSON.stringify(report, null, 2) : renderGraphIndexSummary(report));
+ return report;
+ };
+ await execute();
+ if (watch) await watchGraphIndex({ root: path.resolve(root), execute, engine: 'native' });
+ } catch (error) {
+ console.error(error?.code ?? error.message);
+ process.exitCode = 2;
+ }
+}
+
+function invalidGraphIndexModeOption(values, mode) {
+ const base = new Set([mode, '--root', '--workspace', '--format', '--engine']);
+ const allowed = mode === '--status' || mode === '--doctor'
+ ? base
+ : mode === '--write' || mode === '--refresh'
+ ? new Set([...base, '--max-files', '--max-file-bytes', '--max-nodes', '--max-edges', '--languages', ...(mode === '--refresh' ? ['--watch'] : [])])
+ : mode === '--repair'
+ ? new Set([...base, '--confirm', '--max-files', '--max-file-bytes', '--max-nodes', '--max-edges', '--languages'])
+ : new Set([...base, '--kind', '--locator', '--direction', '--depth', '--limit', '--cursor']);
+ return values.find((value) => value.startsWith('--') && !allowed.has(value)) ?? null;
+}
+
+function missingOptionValue(values, name) {
+ const index = values.indexOf(name);
+ return index < 0 || index + 1 >= values.length || values[index + 1].startsWith('--');
+}
+
+function compactNativeGraphIndexReport(result) {
+ return {
+ schemaVersion: result.responseSchemaVersion,
+ command: `graph index ${result.operation.slice('index.'.length)}`,
+ engine: { selection: 'native', implementation: 'memory-recall-native', previewOnly: false, publicDefaultChanged: true },
+ status: result.state,
+ indexLocator: result.indexLocator,
+ activeGeneration: result.activeGeneration,
+ freshness: result.freshness,
+ health: result.health,
+ fileCount: result.summary.fileCount,
+ nodeCount: result.summary.nodeCount,
+ edgeCount: result.summary.edgeCount,
+ unresolvedCount: result.summary.unresolvedCount,
+ omittedCount: result.summary.omittedCount,
+ databaseBytes: result.summary.databaseBytes,
+ measurements: result.measurements,
+ results: result.results,
+ truncated: result.truncated,
+ nextCursor: result.nextCursor,
+ diagnostics: result.diagnostics,
+ safeguards: result.safeguards
+ };
+}
+
+function compactNativeGraphRepositoriesReport(result) {
+ return {
+ schemaVersion: result.responseSchemaVersion,
+ command: `graph repositories ${result.operation.slice('repository.'.length)}`,
+ engine: { selection: 'native', implementation: 'memory-recall-native', previewOnly: false, publicDefaultChanged: true },
+ status: result.state,
+ registryLocator: result.registryLocator,
+ repositories: result.repositories,
+ results: result.results,
+ perRepository: result.perRepository,
+ partial: result.partial,
+ truncated: result.truncated,
+ measurements: result.measurements,
+ safeguards: result.safeguards
+ };
+}
+
+function renderGraphRepositoriesSummary(report) {
+ return [
+ '# Graph Repositories',
+ `Command: ${report.command}`,
+ `Status: ${report.status}`,
+ `Repositories: ${report.repositories.length}`,
+ `Results: ${report.results.length}`,
+ ...report.repositories.map((repository) => `- ${repository.displayName}: ${repository.repositoryId} (${repository.rootLocator})`),
+ ...report.results.map((result) => `- ${result.repositoryId}: ${result.label} (${result.locator})`),
+ '',
+ 'Safeguards',
+ `Read-only: ${report.safeguards.readOnly ? 'yes' : 'no'}`,
+ `Local files written: ${report.safeguards.localFilesWritten}`,
+ `Raw source bodies included: ${report.safeguards.rawSourceBodiesIncluded ? 'yes' : 'no'}`
+ ].join('\n');
+}
+
+function renderGraphIndexSummary(report) {
+ const measurements = report.measurements ?? {};
+ const queryLines = report.command === 'graph index query'
+ ? [
+ `Results returned: ${report.results?.length ?? 0}`,
+ `Query truncated: ${report.truncated ? 'yes' : 'no'}`,
+ `Next cursor: ${report.nextCursor ?? 'none'}`
+ ]
+ : [];
+ return [
+ '# Source Graph Index',
+ `Status: ${report.status}`,
+ `Index: ${report.indexLocator}`,
+ `Files: ${report.fileCount ?? (measurements.parsedFileCount ?? 0) + (measurements.reusedFileCount ?? 0)}`,
+ `Nodes: ${report.nodeCount ?? report.graph?.nodeCount ?? 0}`,
+ `Edges: ${report.edgeCount ?? report.graph?.edgeCount ?? 0}`,
+ `Parsed: ${measurements.parsedFileCount ?? 0}`,
+ `Reused: ${measurements.reusedFileCount ?? 0}`,
+ `Changed: ${measurements.changedFileCount ?? 0}`,
+ `Added: ${measurements.addedFileCount ?? 0}`,
+ `Deleted: ${measurements.deletedFileCount ?? 0}`,
+ ...queryLines,
+ `Raw source bodies stored: no`
+ ].join('\n');
+}
+
+async function watchGraphIndex({ root, execute, engine = 'native' }) {
+ let timer = null;
+ let running = false;
+ let pending = false;
+ const refresh = async () => {
+ if (running) {
+ pending = true;
+ return;
+ }
+ running = true;
+ try {
+ await execute();
+ } finally {
+ running = false;
+ if (pending) {
+ pending = false;
+ await refresh();
+ }
+ }
+ };
+ const watcher = watchFs(root, { recursive: true }, (_event, filename) => {
+ const relative = String(filename ?? '').replaceAll('\\', '/');
+ const sourcePattern = engine === 'native'
+ ? /(?:\.(?:[cm]?[jt]sx?|py|java|kts?|cs|go|rs|php|rb|swift|c|h|cc|cpp|cxx|hpp|dart|lua|sh|bash|sql|m|mm|scala|r|jl|zig)|(?:^|\/)\.gitignore|(?:^|\/)\.recallignore)$/iu
+ : /(?:\.(?:[cm]?[jt]sx?)|(?:^|\/)\.gitignore|(?:^|\/)\.recallignore)$/u;
+ if (!relative || relative.startsWith('.local/source-graph/') || relative.startsWith('.local/source-index/') || !sourcePattern.test(relative)) return;
+ if (timer) clearTimeout(timer);
+ timer = setTimeout(() => void refresh(), 250);
+ });
+ await new Promise((resolve) => {
+ const stop = () => {
+ if (timer) clearTimeout(timer);
+ watcher.close();
+ process.off('SIGINT', stop);
+ process.off('SIGTERM', stop);
+ resolve();
+ };
+ process.on('SIGINT', stop);
+ process.on('SIGTERM', stop);
+ });
+}
+
async function recallMapCommand(values) {
const options = parseRecallMapOptions(values);
if (!options) return;
@@ -2892,6 +3269,16 @@ async function recallMapCommand(values) {
changedLocators,
query: options.query,
sqliteLocator: options.sqliteLocator,
+ sourceGraphPreviewBuilder: async (previewOptions) => {
+ try {
+ return await buildCurrentNativeSourceGraphPreview(previewOptions);
+ } catch (error) {
+ return buildUnavailableSourceGraphPreview({
+ ...previewOptions,
+ errorCode: String(error?.code ?? error?.message ?? 'native_index_unavailable')
+ });
+ }
+ },
clock: fixedNow
});
if (options.format === 'json') {
@@ -2902,7 +3289,7 @@ async function recallMapCommand(values) {
console.log(renderRecallMapSummary({ command: 'recall map', ...map }));
}
} catch (error) {
- console.error(error.message);
+ console.error(strictNativeReadMessage(error));
process.exitCode = 2;
}
}
@@ -3112,8 +3499,14 @@ async function graphPreviewBackedCommand(values, {
}
const root = option(values, '--root') ?? process.cwd();
const workspaceId = option(values, '--workspace') ?? 'ws_local';
+ const requestedEngine = option(values, '--engine') ?? 'native';
+ if (!['auto', 'native', 'native-preview'].includes(requestedEngine)) {
+ console.error('graph --engine must be native, native-preview, or auto');
+ process.exitCode = 2;
+ return;
+ }
try {
- const preview = await buildSourceGraphPreview({
+ const preview = await buildCurrentNativeSourceGraphPreview({
root,
workspaceId,
query,
@@ -3121,15 +3514,12 @@ async function graphPreviewBackedCommand(values, {
changedLocators,
nodeKinds: option(values, '--node-kinds'),
edgeKinds: option(values, '--edge-kinds'),
- labelPattern: option(values, '--label-pattern'),
locatorPrefix: option(values, '--locator-prefix'),
direction,
limit: strictIntegerOption(values, '--limit', 20),
offset: strictIntegerOption(values, '--offset', 0),
depth: strictIntegerOption(values, '--depth', 2),
sampleLimit: strictIntegerOption(values, '--sample-limit', 3),
- maxFiles: strictIntegerOption(values, '--max-files', DEFAULT_SOURCE_GRAPH_PREVIEW_MAX_FILES),
- maxFileBytes: strictIntegerOption(values, '--max-file-bytes', DEFAULT_SOURCE_GRAPH_PREVIEW_MAX_FILE_BYTES),
clock: fixedNow
});
const baseReport = {
@@ -3137,6 +3527,14 @@ async function graphPreviewBackedCommand(values, {
command: commandName,
generatedAt: preview.generatedAt,
workspaceId: preview.workspaceId,
+ engine: {
+ selection: 'native',
+ implementation: 'memory-recall-native',
+ previewOnly: false,
+ publicDefaultChanged: true,
+ requested: requestedEngine,
+ reason: requestedEngine === 'native' ? null : 'native_alias'
+ },
graph: compactGraphCommandGraph(preview.graph),
...pick(preview),
safeguards: preview.safeguards
@@ -3144,11 +3542,83 @@ async function graphPreviewBackedCommand(values, {
const report = { ...baseReport, measurements: graphCommandMeasurements(preview.measurements, baseReport) };
console.log(format === 'summary' ? renderSummary(report) : JSON.stringify(report, null, 2));
} catch (error) {
- console.error(error.message);
+ console.error(strictNativeReadMessage(error));
process.exitCode = 2;
}
}
+async function buildCurrentNativeSourceGraphPreview(options) {
+ const { RustCodeIntelligenceProvider } = await import('../../providers/native/code-intelligence-rust/src/index.mjs');
+ const provider = new RustCodeIntelligenceProvider();
+ const status = await provider.indexStatus({ root: options.root, workspaceId: options.workspaceId });
+ if (!nativeIndexReadyForAutomaticRead(status)) {
+ const code = nativeIndexRecoveryCode(status);
+ const error = new Error(code);
+ error.code = code;
+ throw error;
+ }
+ return buildNativeIndexSourceGraphPreview({ ...options, provider, status });
+}
+
+async function currentNativeSourceGraphPreviewIfReady(options) {
+ try {
+ return await buildCurrentNativeSourceGraphPreview(options);
+ } catch (error) {
+ if (isNativeIndexRecoveryRequired(error)) return null;
+ throw error;
+ }
+}
+
+function nativeIndexRecoveryCode(status) {
+ switch (status?.health?.status) {
+ case 'absent': return 'source_index_build_required';
+ case 'stale': return 'source_index_refresh_required';
+ case 'interrupted':
+ case 'corrupt': return 'source_index_repair_required';
+ case 'migration-required': return 'source_index_migration_required';
+ case 'wrong-repository': return 'source_index_wrong_repository';
+ case 'unsupported-schema': return 'source_index_schema_newer';
+ default: return 'source_index_query_unavailable';
+ }
+}
+
+function strictNativeReadMessage(error) {
+ const code = String(error?.code ?? error?.message ?? 'native_engine_unavailable');
+ if (code === 'source_index_build_required' || code === 'source_index_query_unavailable') {
+ return `${code}: run recall graph index --write --engine native --root . --format summary`;
+ }
+ if (code === 'source_index_refresh_required') {
+ return `${code}: run recall graph index --refresh --engine native --root . --format summary`;
+ }
+ if ([
+ 'source_index_corrupt',
+ 'source_index_integrity_failed',
+ 'source_index_migration_checksum_invalid',
+ 'source_index_migration_required',
+ 'source_index_repair_required',
+ 'source_index_wrong_repository'
+ ].includes(code)) {
+ return `${code}: run recall graph index --doctor --engine native --root . --format summary, then use the exact repair command it reports`;
+ }
+ if (code === 'source_index_schema_newer') {
+ return `${code}: use a Memory Recall version compatible with the newer index schema; do not overwrite it with this version`;
+ }
+ if (code === 'native_platform_unsupported') {
+ return `${code}: this platform has no supported packaged native engine`;
+ }
+ if ([
+ 'native_engine_checksum_mismatch',
+ 'native_engine_manifest_invalid',
+ 'native_engine_path_invalid',
+ 'native_engine_unavailable',
+ 'native_engine_version_mismatch',
+ 'native_platform_package_missing'
+ ].includes(code)) {
+ return `${code}: install the matching @memory-recall/native-* package`;
+ }
+ return code;
+}
+
function graphCommandMeasurements(previewMeasurements = {}, report = {}) {
const fullGraphTokenEstimate = Number(previewMeasurements.fullGraphTokenEstimate ?? 0);
const deliveredTokenEstimate = estimateTokens(JSON.stringify(report));
@@ -3187,10 +3657,11 @@ function renderGraphStatsSummary(report) {
const entryPoints = summary.entryPoints ?? [];
return [
'# Graph Stats',
+ `Engine: ${report.engine?.selection ?? 'js'}`,
`Files: ${summary.fileCount ?? 0}`,
`Symbols: ${summary.symbolCount ?? 0}`,
- `Qualified symbols: ${summary.qualifiedSymbolCount ?? 0}`,
- `Ambiguous labels: ${summary.ambiguousSymbolLabelCount ?? 0}`,
+ `Qualified symbols: ${summary.qualifiedSymbolCount ?? 'unmeasured'}`,
+ `Ambiguous labels: ${summary.ambiguousSymbolLabelCount ?? 'unmeasured'}`,
`Nodes: ${summary.nodeCount ?? 0}`,
`Edges: ${summary.edgeCount ?? 0}`,
`Call edges: ${edgeKinds.calls ?? 0}`,
@@ -3216,10 +3687,11 @@ function renderGraphSearchSummary(report) {
const results = report.search?.results ?? [];
return [
'# Graph Search',
+ `Engine: ${report.engine?.selection ?? 'js'}`,
`Files: ${summary.fileCount ?? 0}`,
`Symbols: ${summary.symbolCount ?? 0}`,
- `Qualified symbols: ${summary.qualifiedSymbolCount ?? 0}`,
- `Ambiguous labels: ${summary.ambiguousSymbolLabelCount ?? 0}`,
+ `Qualified symbols: ${summary.qualifiedSymbolCount ?? 'unmeasured'}`,
+ `Ambiguous labels: ${summary.ambiguousSymbolLabelCount ?? 'unmeasured'}`,
`Results: ${results.length}/${report.search?.total ?? 0}`,
`Fingerprint: ${report.graph?.graphFingerprint ?? 'unavailable'}`,
`Delivered graph tokens: ${report.measurements?.deliveredTokenEstimate ?? 0}`,
@@ -3263,10 +3735,11 @@ function renderGraphTraceSummary(report) {
const paths = report.trace?.paths ?? [];
return [
'# Graph Trace',
+ `Engine: ${report.engine?.selection ?? 'js'}`,
`Files: ${summary.fileCount ?? 0}`,
`Symbols: ${summary.symbolCount ?? 0}`,
- `Qualified symbols: ${summary.qualifiedSymbolCount ?? 0}`,
- `Ambiguous labels: ${summary.ambiguousSymbolLabelCount ?? 0}`,
+ `Qualified symbols: ${summary.qualifiedSymbolCount ?? 'unmeasured'}`,
+ `Ambiguous labels: ${summary.ambiguousSymbolLabelCount ?? 'unmeasured'}`,
`Start nodes: ${report.trace?.startNodeIds?.length ?? 0}`,
`Paths: ${paths.length}`,
`Direction: ${report.trace?.direction ?? 'unknown'}`,
@@ -3290,10 +3763,11 @@ function renderGraphImpactSummary(report) {
const edgeKindSummary = Object.entries(impact.impactedEdgeKindCounts ?? {}).sort((a, b) => a[0].localeCompare(b[0])).map(([kind, count]) => `${kind} ${count}`).join(', ') || 'none';
return [
'# Graph Impact',
+ `Engine: ${report.engine?.selection ?? 'js'}`,
`Files: ${summary.fileCount ?? 0}`,
`Symbols: ${summary.symbolCount ?? 0}`,
- `Qualified symbols: ${summary.qualifiedSymbolCount ?? 0}`,
- `Ambiguous labels: ${summary.ambiguousSymbolLabelCount ?? 0}`,
+ `Qualified symbols: ${summary.qualifiedSymbolCount ?? 'unmeasured'}`,
+ `Ambiguous labels: ${summary.ambiguousSymbolLabelCount ?? 'unmeasured'}`,
`Changed coverage: ${impact.representedChangedLocators?.length ?? 0}/${impact.changedLocators?.length ?? 0}`,
`Affected symbols: ${symbols.length}`,
`Impacted edges: ${impact.impactedEdgeIds?.length ?? 0}`,
@@ -4626,7 +5100,12 @@ async function loadTemporalDataset(datasetPath) {
}
async function resolveBenchmarkDataset(requestedPath, bundledPath) {
- const selectedPath = requestedPath ?? bundledPath;
+ if (requestedPath === null || requestedPath === undefined) {
+ const packagePath = path.join(PACKAGE_ROOT, ...bundledPath.split('/'));
+ return { path: packagePath, ref: `package://${bundledPath}` };
+ }
+
+ const selectedPath = requestedPath;
const workspacePath = path.resolve(selectedPath);
const workspaceFile = await stat(workspacePath).catch(() => null);
if (workspaceFile?.isFile()) {
@@ -5180,7 +5659,16 @@ async function contextPackCommand(values) {
const userSelectedFiles = options(values, '--include-file');
try {
const { changedLocators, detection: changedLocatorDetection } = await resolveChangedLocators(values, { root, workspaceId });
- const pack = await buildContextPack({ root, harnesses, userSelectedFiles, changedLocators, workspaceId, objective, step, targetHarness, tokenBudget });
+ const sourceGraphPreview = await currentNativeSourceGraphPreviewIfReady({
+ root,
+ workspaceId,
+ query: `${objective} ${step}`,
+ changedLocators,
+ limit: 12,
+ sampleLimit: 1,
+ clock: fixedNow
+ });
+ const pack = await buildContextPack({ root, harnesses, userSelectedFiles, changedLocators, workspaceId, objective, step, targetHarness, tokenBudget, sourceGraphPreview });
const markdown = renderContextPackMarkdown(pack);
const usePlan = buildContextPackUsePlan(pack);
if (write) {
@@ -5479,31 +5967,32 @@ async function contextGraphPreviewCommand(values) {
const root = option(values, '--root') ?? process.cwd();
const workspaceId = option(values, '--workspace') ?? 'ws_local';
const query = option(values, '--query') ?? firstPositional(values, new Set(['--format', '--root', '--workspace', '--query', '--trace', '--start-name', '--start-node', '--changed', '--changed-locator', '--changed-locators', '--node-kinds', '--edge-kinds', '--label-pattern', '--locator-prefix', '--direction', '--limit', '--offset', '--depth', '--sample-limit', '--max-files', '--max-file-bytes'])) ?? '';
+ const unsupportedNativeOptions = ['--start-node', '--node-kinds', '--edge-kinds', '--label-pattern', '--max-files', '--max-file-bytes']
+ .filter((flag) => values.includes(flag));
+ if (unsupportedNativeOptions.length) {
+ console.error(`context graph preview does not support ${unsupportedNativeOptions[0]} with the native index`);
+ process.exitCode = 2;
+ return;
+ }
try {
const { changedLocators } = await resolveChangedLocators(values, { root, workspaceId });
- const preview = await buildSourceGraphPreview({
+ const preview = await buildCurrentNativeSourceGraphPreview({
root,
workspaceId,
query,
startName: option(values, '--trace') ?? option(values, '--start-name'),
- startNodeId: option(values, '--start-node'),
changedLocators: [...changedLocators, ...(option(values, '--changed-locators') ? [option(values, '--changed-locators')] : [])],
- nodeKinds: option(values, '--node-kinds'),
- edgeKinds: option(values, '--edge-kinds'),
- labelPattern: option(values, '--label-pattern'),
locatorPrefix: option(values, '--locator-prefix'),
direction: option(values, '--direction') ?? 'outbound',
limit: strictIntegerOption(values, '--limit', 20),
offset: strictIntegerOption(values, '--offset', 0),
depth: strictIntegerOption(values, '--depth', 2),
sampleLimit: strictIntegerOption(values, '--sample-limit', 12),
- maxFiles: strictIntegerOption(values, '--max-files', DEFAULT_SOURCE_GRAPH_PREVIEW_MAX_FILES),
- maxFileBytes: strictIntegerOption(values, '--max-file-bytes', DEFAULT_SOURCE_GRAPH_PREVIEW_MAX_FILE_BYTES),
clock: fixedNow
});
console.log(format === 'summary' ? renderSourceGraphPreviewSummary(preview) : JSON.stringify(preview, null, 2));
} catch (error) {
- console.error(error.message);
+ console.error(strictNativeReadMessage(error));
process.exitCode = 2;
}
}
@@ -5521,8 +6010,8 @@ function renderSourceGraphPreviewSummary(preview) {
`Status: ${preview.status ?? 'ready'}`,
`Files: ${summary.fileCount ?? 0}`,
`Symbols: ${summary.symbolCount ?? 0}`,
- `Qualified symbols: ${summary.qualifiedSymbolCount ?? 0}`,
- `Ambiguous labels: ${summary.ambiguousSymbolLabelCount ?? 0}`,
+ `Qualified symbols: ${summary.qualifiedSymbolCount ?? 'unmeasured'}`,
+ `Ambiguous labels: ${summary.ambiguousSymbolLabelCount ?? 'unmeasured'}`,
`Nodes: ${summary.nodeCount ?? 0}`,
`Edges: ${summary.edgeCount ?? 0}`,
`Hotspots: ${hotspots}`,
@@ -5547,9 +6036,10 @@ async function mcpCommand(values) {
if (subcommand === 'resources') return await mcpResourcesCommand(rest);
if (subcommand === 'server') return await mcpServerCommand(rest);
if (subcommand === 'install') return await mcpInstallCommand(rest);
+ if (subcommand === 'uninstall') return await mcpUninstallCommand(rest);
if (subcommand === 'stats') return await mcpStatsCommand(rest);
if (subcommand === 'smoke') return await mcpSmokeCommand(rest);
- console.error('mcp requires inspect, resources, server, install, stats, or smoke');
+ console.error('mcp requires inspect, resources, server, install, uninstall, stats, or smoke');
process.exitCode = 2;
} catch (error) {
console.error(error.message);
@@ -6233,6 +6723,12 @@ async function mcpServerCommand(values) {
process.exitCode = 2;
return;
}
+ const sourceIndexEngine = option(values, '--engine') ?? 'native';
+ if (!['auto', 'native', 'native-preview'].includes(sourceIndexEngine)) {
+ console.error('mcp server --engine must be native, native-preview, or auto');
+ process.exitCode = 2;
+ return;
+ }
const root = path.resolve(option(values, '--root') ?? process.cwd());
const workspaceId = option(values, '--workspace') ?? 'ws_local';
const state = await loadWorkspaceJson(root, option(values, '--state') ?? '.local/state.json', {
@@ -6349,7 +6845,467 @@ async function buildMcpRealisticSavingsBenchmark({ values, root, workspaceId, ge
}
function buildMcpTokenSaverTools({ values, root, workspaceId, generatedAt, statsRecorder = null, cursorStore = null }) {
+ let nativeProviderPromise = null;
+ const loadNativeProvider = () => {
+ nativeProviderPromise ??= import('../../providers/native/code-intelligence-rust/src/index.mjs')
+ .then(({ RustCodeIntelligenceProvider }) => new RustCodeIntelligenceProvider());
+ return nativeProviderPromise;
+ };
+ const actionableNativeReadError = (error) => {
+ throw new Error(strictNativeReadMessage(error));
+ };
+ const nativeStatus = async () => {
+ try {
+ return await (await loadNativeProvider()).indexStatus({ root, workspaceId });
+ } catch (error) {
+ return actionableNativeReadError(error);
+ }
+ };
+ let nativeRepositoryProviderPromise = null;
+ const requireNativeRepositoryProvider = () => {
+ nativeRepositoryProviderPromise ??= loadNativeProvider()
+ .then(async (provider) => {
+ const health = await provider.health();
+ if (health.status !== 'healthy') throw new Error('unhealthy');
+ return provider;
+ })
+ .catch(() => {
+ throw new Error('cross-repository native engine is unavailable; install the matching @memory-recall/native-* package');
+ });
+ return nativeRepositoryProviderPromise;
+ };
+ const nativeQuery = async (kind, argumentsValue = {}) => {
+ try {
+ return await (await loadNativeProvider()).queryIndex({
+ root,
+ workspaceId,
+ kind,
+ limit: argumentsValue.limit ?? 20,
+ ...(argumentsValue.query === undefined ? {} : { query: argumentsValue.query }),
+ ...(argumentsValue.locator === undefined ? {} : { locator: argumentsValue.locator }),
+ ...(argumentsValue.direction === undefined ? {} : { direction: argumentsValue.direction }),
+ ...(argumentsValue.depth === undefined ? {} : { depth: argumentsValue.depth }),
+ ...(argumentsValue.edgeKinds === undefined ? {} : { edgeKinds: argumentsValue.edgeKinds }),
+ ...(argumentsValue.cursor === undefined ? {} : { cursor: argumentsValue.cursor }),
+ ...(argumentsValue.signal === undefined ? {} : { signal: argumentsValue.signal })
+ });
+ } catch (error) {
+ return actionableNativeReadError(error);
+ }
+ };
+ const nativeCompleteness = (result, locallyTruncated = false) => ({
+ truncated: Boolean(result?.truncated || result?.nextCursor || locallyTruncated),
+ nextCursor: result?.nextCursor ?? null,
+ locallyTruncated
+ });
+ const nativeQueryAtOffset = async (kind, argumentsValue, offset, limit) => {
+ if (offset === 0) return nativeQuery(kind, { ...argumentsValue, limit });
+ const maxPageCalls = 8;
+ const controller = new AbortController();
+ const deadlineTimer = setTimeout(() => controller.abort(), 1_500);
+ let pageCalls = 0;
+ let reachedOffset = 0;
+ let cursor = argumentsValue.cursor ?? null;
+ let lastResult = null;
+ const seenCursors = new Set(cursor ? [cursor] : []);
+ const incompleteResult = () => ({
+ ...(lastResult ?? {}),
+ results: [],
+ relationships: [],
+ truncated: true,
+ offsetIncomplete: true,
+ reachedOffset,
+ nextCursor: lastResult?.nextCursor ?? cursor
+ });
+ try {
+ while (reachedOffset < offset && pageCalls < maxPageCalls - 1 && !controller.signal.aborted) {
+ const skipLimit = Math.min(100, offset - reachedOffset);
+ try {
+ lastResult = await nativeQuery(kind, { ...argumentsValue, limit: skipLimit, ...(cursor ? { cursor } : {}), signal: controller.signal });
+ } catch (error) {
+ if (controller.signal.aborted) return incompleteResult();
+ throw error;
+ }
+ pageCalls += 1;
+ reachedOffset += lastResult.results?.length ?? 0;
+ if (reachedOffset >= offset) {
+ cursor = lastResult.nextCursor ?? null;
+ break;
+ }
+ if (!lastResult.nextCursor || seenCursors.has(lastResult.nextCursor)) break;
+ cursor = lastResult.nextCursor;
+ seenCursors.add(cursor);
+ }
+ if (controller.signal.aborted) return incompleteResult();
+ if (reachedOffset < offset) {
+ if (lastResult?.nextCursor || lastResult?.truncated) return incompleteResult();
+ return {
+ ...(lastResult ?? {}),
+ results: [],
+ relationships: [],
+ truncated: false,
+ offsetIncomplete: false,
+ reachedOffset,
+ nextCursor: null
+ };
+ }
+ if (!cursor) {
+ return {
+ ...(lastResult ?? {}),
+ results: [],
+ relationships: [],
+ truncated: false,
+ offsetIncomplete: false,
+ reachedOffset,
+ nextCursor: null
+ };
+ }
+ try {
+ const result = await nativeQuery(kind, { ...argumentsValue, limit, cursor, signal: controller.signal });
+ return { ...result, offsetIncomplete: false, reachedOffset };
+ } catch (error) {
+ if (controller.signal.aborted) return incompleteResult();
+ throw error;
+ }
+ } finally {
+ clearTimeout(deadlineTimer);
+ }
+ };
return [
+ {
+ name: 'repo.architecture',
+ description: 'Return bounded architecture groups, communities, entry points, hotspots, and evidence-backed entry-to-sink processes from local source metadata.',
+ operation: 'repo.architecture',
+ sideEffectClass: 'read-only',
+ inputSchema: {
+ type: 'object',
+ additionalProperties: false,
+ properties: {
+ limit: { type: 'integer', minimum: 1, maximum: 50, default: 20 }
+ }
+ },
+ handler: async ({ arguments: args }) => {
+ const input = mcpMapArguments(args, ['limit'], 'repo.architecture');
+ const limit = mcpStrictBoundedInteger(input.limit, 20, { min: 1, max: 50, name: 'limit' });
+ const [communities, processes] = await Promise.all([
+ nativeQuery('communities', { limit }),
+ nativeQuery('processes', { depth: 4, limit })
+ ]);
+ return mcpToolJsonResult(mcpStructuralPayload({
+ command: 'repo.architecture', workspaceId, generatedAt: fixedNow(),
+ data: buildNativeIndexArchitecture(communities, processes, limit)
+ }));
+ }
+ },
+ {
+ name: 'repo.index_status',
+ description: 'Report local persistent-index status or list registered repositories; this tool never builds or refreshes indexes.',
+ operation: 'repo.index_status',
+ sideEffectClass: 'read-only',
+ inputSchema: {
+ type: 'object',
+ additionalProperties: false,
+ properties: {
+ scope: { type: 'string', enum: ['local', 'repositories'] },
+ limit: { type: 'integer', minimum: 1, maximum: 64 }
+ }
+ },
+ handler: async ({ arguments: args }) => {
+ const input = mcpMapArguments(args, ['scope', 'limit'], 'repo.index_status');
+ const scope = input.scope ?? 'local';
+ if (!['local', 'repositories'].includes(scope)) throw new Error('repo.index_status scope is invalid');
+ if (scope === 'repositories') {
+ const limit = mcpStrictBoundedInteger(input.limit, 64, { min: 1, max: 64, name: 'limit' });
+ const provider = await requireNativeRepositoryProvider();
+ const result = await provider.listRepositories({ root, workspaceId, limit });
+ return mcpToolJsonResult(mcpStructuralPayload({
+ command: 'repo.index_status', workspaceId, generatedAt: fixedNow(),
+ data: nativeRepositoryListData(result)
+ }));
+ }
+ if (input.limit !== undefined) throw new Error('repo.index_status limit requires repository scope');
+ const result = await nativeStatus();
+ return mcpToolJsonResult(mcpStructuralPayload({
+ command: 'repo.index_status', workspaceId, generatedAt: fixedNow(),
+ data: nativeIndexStatusData(result)
+ }));
+ }
+ },
+ {
+ name: 'code.search',
+ description: 'Search bounded symbols, files, modules, and relationships in the local or selected registered repositories.',
+ operation: 'code.search',
+ sideEffectClass: 'read-only',
+ inputSchema: {
+ type: 'object',
+ additionalProperties: false,
+ required: ['query'],
+ properties: {
+ query: { type: 'string', minLength: 1, maxLength: 512 },
+ repositoryIds: {
+ type: 'array',
+ minItems: 1,
+ maxItems: 8,
+ uniqueItems: true,
+ items: { type: 'string', pattern: '^repo_[a-f0-9]{32}$' }
+ },
+ nodeKinds: { type: 'array', maxItems: 4, items: { type: 'string', enum: ['file', 'chunk', 'symbol', 'module'] } },
+ edgeKinds: { type: 'array', maxItems: 6, items: { type: 'string', enum: ['contains', 'defined_in', 'imports', 'exports', 'references', 'calls'] } },
+ locatorPrefix: { type: 'string', minLength: 1, maxLength: 512 },
+ limit: { type: 'integer', minimum: 1, maximum: 50, default: 20 },
+ offset: { type: 'integer', minimum: 0, maximum: 10000, default: 0 },
+ cursor: { type: 'string', pattern: '^idxcur_[a-f0-9]{32}$' }
+ }
+ },
+ handler: async ({ arguments: args }) => {
+ const input = mcpMapArguments(args, ['query', 'repositoryIds', 'nodeKinds', 'edgeKinds', 'locatorPrefix', 'limit', 'offset', 'cursor'], 'code.search');
+ const query = mcpStructuralString(input.query, 'code.search query', { required: true, max: 512 });
+ const repositoryIds = mcpRepositoryIds(input.repositoryIds, { min: 1, max: 8 });
+ const nodeKinds = mcpStructuralKinds(input.nodeKinds, ['file', 'chunk', 'symbol', 'module']);
+ const edgeKinds = mcpStructuralKinds(input.edgeKinds, ['contains', 'defined_in', 'imports', 'exports', 'references', 'calls']);
+ const locatorPrefix = mcpStructuralLocatorPrefix(input.locatorPrefix);
+ const limit = mcpStrictBoundedInteger(input.limit, 20, { min: 1, max: repositoryIds ? 25 : 50, name: 'limit' });
+ const offset = mcpStrictBoundedInteger(input.offset, 0, { min: 0, max: 10000, name: 'offset' });
+ const cursor = input.cursor === undefined ? null : mcpStructuralString(input.cursor, 'code.search cursor', { required: true, max: 39 });
+ if (cursor && !/^idxcur_[a-f0-9]{32}$/u.test(cursor)) throw new Error('code.search cursor is invalid');
+ if (cursor && offset !== 0) throw new Error('code.search cursor cannot be combined with a non-zero offset');
+ if (repositoryIds) {
+ if (query.length > 160) throw new Error('native repository query exceeds 160 characters');
+ if (nodeKinds?.length || edgeKinds?.length || locatorPrefix || offset !== 0 || cursor) {
+ throw new Error('code.search repository mode does not support local filters, offset, or cursor');
+ }
+ const provider = await requireNativeRepositoryProvider();
+ const result = await provider.searchRepositories({
+ root,
+ workspaceId,
+ query,
+ repositoryIds,
+ perRepositoryLimit: limit,
+ limit
+ });
+ return mcpToolJsonResult(mcpStructuralPayload({
+ command: 'code.search', workspaceId, generatedAt: fixedNow(),
+ data: nativeRepositorySearchData(result, query, repositoryIds)
+ }));
+ }
+ if (query.length > 160) throw new Error('native index query exceeds 160 characters');
+ if (edgeKinds?.length) throw new Error('native index edge-kind filtering is not available');
+ if (offset !== 0 && (nodeKinds?.length || locatorPrefix)) {
+ throw new Error('native code.search offset cannot be combined with local result filters; continue with nextCursor');
+ }
+ const result = await nativeQueryAtOffset('search', { query, ...(cursor ? { cursor } : {}) }, offset, limit);
+ const results = result.results
+ .filter((item) => nativeNodeMatchesKinds(item, nodeKinds))
+ .filter((item) => !locatorPrefix || item.locator.startsWith(locatorPrefix))
+ .slice(0, limit)
+ .map(nativeStructuralNode);
+ const resultIds = new Set(results.map((item) => item.id));
+ const relationships = (result.relationships ?? [])
+ .filter((item) => resultIds.has(item.fromNodeId) && resultIds.has(item.toNodeId))
+ .slice(0, limit)
+ .map(nativeStructuralRelationship);
+ return mcpToolJsonResult(mcpStructuralPayload({
+ command: 'code.search', workspaceId, generatedAt: fixedNow(),
+ data: {
+ query,
+ results,
+ relationships,
+ resultCount: results.length,
+ limit,
+ offset,
+ reachedOffset: result.reachedOffset ?? offset,
+ offsetIncomplete: result.offsetIncomplete === true,
+ truncated: Boolean(result.truncated || result.nextCursor),
+ hasMore: Boolean(result.nextCursor),
+ nextCursor: result.nextCursor,
+ source: nativeIndexSource(result)
+ }
+ }));
+ }
+ },
+ {
+ name: 'code.context',
+ description: 'Return one selected symbol with bounded, optionally filtered incoming and outgoing structural relationships.',
+ operation: 'code.context',
+ sideEffectClass: 'read-only',
+ inputSchema: {
+ type: 'object',
+ additionalProperties: false,
+ required: ['query'],
+ properties: {
+ query: { type: 'string', minLength: 1, maxLength: 512 },
+ direction: { type: 'string', enum: ['outbound', 'inbound', 'both'] },
+ depth: { type: 'integer', enum: [1, 2, 3] },
+ edgeKinds: {
+ type: 'array',
+ minItems: 1,
+ maxItems: 16,
+ uniqueItems: true,
+ items: { type: 'string', enum: CODE_INTELLIGENCE_EDGE_KINDS }
+ },
+ limit: { type: 'integer', minimum: 1, maximum: 50, default: 20 }
+ }
+ },
+ handler: async ({ arguments: args }) => {
+ const input = mcpMapArguments(args, ['query', 'direction', 'depth', 'edgeKinds', 'limit'], 'code.context');
+ const query = mcpStructuralString(input.query, 'code.context query', { required: true, max: 512 });
+ const constrained = ['direction', 'depth', 'edgeKinds'].some((key) => Object.hasOwn(input, key));
+ const direction = mcpStructuralDirection(input.direction ?? 'both');
+ const depth = mcpStrictBoundedInteger(input.depth, 1, { min: 1, max: 3, name: 'depth' });
+ const edgeKinds = mcpStructuralKinds(input.edgeKinds, CODE_INTELLIGENCE_EDGE_KINDS, { minItems: 1, maxItems: 16, unique: true });
+ const limit = mcpStrictBoundedInteger(input.limit, 20, { min: 1, max: 50, name: 'limit' });
+ if (constrained) {
+ const status = await nativeStatus();
+ if (!nativeIndexReadyForAutomaticRead(status)) {
+ throw new Error('code.context constraints require a current native index; refresh it with recall graph index --refresh --engine native --root . --format summary');
+ }
+ }
+ if (query.length > 160) throw new Error('native index query exceeds 160 characters');
+ const [selected, neighborhood] = await Promise.all([
+ nativeQuery('exact', { query, limit: 1 }),
+ constrained
+ ? nativeQuery('dependencies', { query, direction, depth, edgeKinds, limit })
+ : nativeQuery('neighborhood', { query, limit, depth: 1 })
+ ]);
+ const related = neighborhood.results.map(nativeStructuralNode);
+ const relatedIds = new Set(related.map((item) => item.id));
+ const relationships = (neighborhood.relationships ?? [])
+ .filter((item) => relatedIds.has(item.fromNodeId) && relatedIds.has(item.toNodeId))
+ .filter((item) => !edgeKinds || edgeKinds.includes(item.kind))
+ .map(nativeStructuralRelationship);
+ const completeness = {
+ selection: nativeCompleteness(selected),
+ neighborhood: nativeCompleteness(neighborhood)
+ };
+ return mcpToolJsonResult(mcpStructuralPayload({
+ command: 'code.context', workspaceId, generatedAt: fixedNow(),
+ data: {
+ query,
+ selected: selected.results[0] ? nativeStructuralNode(selected.results[0]) : null,
+ related,
+ relationships,
+ completeness,
+ truncated: completeness.selection.truncated || completeness.neighborhood.truncated,
+ ...(constrained ? { direction, depth, edgeKinds: edgeKinds ?? [] } : {}),
+ source: nativeIndexSource(neighborhood)
+ }
+ }));
+ }
+ },
+ {
+ name: 'code.trace',
+ description: 'Trace bounded local call paths or one evidence-backed Go path across two registered repositories.',
+ operation: 'code.trace',
+ sideEffectClass: 'read-only',
+ inputSchema: {
+ type: 'object',
+ additionalProperties: false,
+ oneOf: [{ required: ['symbol'] }, { required: ['crossRepository'] }],
+ properties: {
+ symbol: { type: 'string', minLength: 1, maxLength: 240 },
+ crossRepository: mcpCrossRepositoryInputSchema(),
+ direction: { type: 'string', enum: ['outbound', 'inbound', 'both'] },
+ depth: { type: 'integer', enum: [1, 2, 3] },
+ limit: { type: 'integer', minimum: 1, maximum: 50 },
+ locatorPrefix: { type: 'string', minLength: 1, maxLength: 512 }
+ }
+ },
+ handler: async ({ arguments: args }) => {
+ const input = mcpMapArguments(args, ['symbol', 'crossRepository', 'direction', 'depth', 'limit', 'locatorPrefix'], 'code.trace');
+ const crossRepository = mcpCrossRepository(input.crossRepository);
+ mcpRejectMixedCrossRepositoryArguments(input, crossRepository, ['symbol', 'direction', 'depth', 'locatorPrefix'], 'code.trace');
+ const symbol = mcpStructuralString(input.symbol, 'code.trace symbol', { required: !crossRepository, max: 240 });
+ const direction = mcpStructuralDirection(input.direction);
+ const depth = mcpStrictBoundedInteger(input.depth, 2, { min: 1, max: 3, name: 'depth' });
+ const limit = mcpStrictBoundedInteger(input.limit, 20, { min: 1, max: crossRepository ? 25 : 50, name: 'limit' });
+ const locatorPrefix = mcpStructuralLocatorPrefix(input.locatorPrefix);
+ if (crossRepository) {
+ const provider = await requireNativeRepositoryProvider();
+ const result = await provider.traceGoRepositories({ root, workspaceId, ...crossRepository, limit });
+ return mcpToolJsonResult(mcpStructuralPayload({
+ command: 'code.trace', workspaceId, generatedAt: fixedNow(),
+ data: nativeCrossRepositoryData(result, crossRepository)
+ }));
+ }
+ if (symbol.length > 160) throw new Error('native index query exceeds 160 characters');
+ const result = await nativeQuery('dependencies', { query: symbol, direction, depth, limit });
+ const completeness = nativeCompleteness(result);
+ return mcpToolJsonResult(mcpStructuralPayload({
+ command: 'code.trace', workspaceId, generatedAt: fixedNow(),
+ data: { symbol, direction, depth, nodes: result.results.filter((item) => !locatorPrefix || item.locator.startsWith(locatorPrefix)).map(nativeStructuralNode), relationships: (result.relationships ?? []).filter((item) => !locatorPrefix || item.locator.startsWith(locatorPrefix)).map(nativeStructuralRelationship), completeness, truncated: completeness.truncated, nextCursor: completeness.nextCursor, source: nativeIndexSource(result) }
+ }));
+ }
+ },
+ {
+ name: 'code.dependencies',
+ description: 'Walk a bounded local dependency neighborhood or resolve one exact Go module boundary across repositories.',
+ operation: 'code.dependencies',
+ sideEffectClass: 'read-only',
+ inputSchema: {
+ type: 'object',
+ additionalProperties: false,
+ oneOf: [{ required: ['query'] }, { required: ['crossRepository'] }],
+ properties: {
+ query: { type: 'string', minLength: 1, maxLength: 512 },
+ crossRepository: mcpCrossRepositoryInputSchema(),
+ direction: { type: 'string', enum: ['outbound', 'inbound', 'both'] },
+ depth: { type: 'integer', enum: [1, 2, 3] },
+ limit: { type: 'integer', minimum: 1, maximum: 50 }
+ }
+ },
+ handler: async ({ arguments: args }) => {
+ const input = mcpMapArguments(args, ['query', 'crossRepository', 'direction', 'depth', 'limit'], 'code.dependencies');
+ const crossRepository = mcpCrossRepository(input.crossRepository);
+ mcpRejectMixedCrossRepositoryArguments(input, crossRepository, ['query', 'direction', 'depth', 'limit'], 'code.dependencies');
+ const query = mcpStructuralString(input.query, 'code.dependencies query', { required: !crossRepository, max: 512 });
+ const direction = mcpStructuralDirection(input.direction);
+ const depth = mcpStrictBoundedInteger(input.depth, 2, { min: 1, max: 3, name: 'depth' });
+ const limit = mcpStrictBoundedInteger(input.limit, 20, { min: 1, max: crossRepository ? 25 : 50, name: 'limit' });
+ if (crossRepository) {
+ const provider = await requireNativeRepositoryProvider();
+ const result = await provider.resolveGoRepositories({ root, workspaceId, ...crossRepository });
+ return mcpToolJsonResult(mcpStructuralPayload({
+ command: 'code.dependencies', workspaceId, generatedAt: fixedNow(),
+ data: nativeCrossRepositoryData(result, crossRepository)
+ }));
+ }
+ if (query.length > 160) throw new Error('native index query exceeds 160 characters');
+ const result = await nativeQuery('dependencies', { query, direction, depth, limit });
+ const completeness = nativeCompleteness(result);
+ return mcpToolJsonResult(mcpStructuralPayload({
+ command: 'code.dependencies', workspaceId, generatedAt: fixedNow(),
+ data: { query, direction, depth, nodes: result.results.map(nativeStructuralNode), relationships: (result.relationships ?? []).map(nativeStructuralRelationship), completeness, truncated: completeness.truncated, nextCursor: completeness.nextCursor, source: nativeIndexSource(result) }
+ }));
+ }
+ },
+ {
+ name: 'code.routes',
+ description: 'Discover bounded HTTP route exports with locator-safe static evidence.',
+ operation: 'code.routes',
+ sideEffectClass: 'read-only',
+ inputSchema: {
+ type: 'object',
+ additionalProperties: false,
+ properties: {
+ query: { type: 'string', maxLength: 240 },
+ limit: { type: 'integer', minimum: 1, maximum: 50, default: 20 }
+ }
+ },
+ handler: async ({ arguments: args }) => {
+ const input = mcpMapArguments(args, ['query', 'limit'], 'code.routes');
+ const query = mcpStructuralString(input.query, 'code.routes query', { required: false, max: 240 });
+ const limit = mcpStrictBoundedInteger(input.limit, 20, { min: 1, max: 50, name: 'limit' });
+ const result = await nativeQuery('routes', { limit });
+ const routes = result.results
+ .filter((item) => !query || item.label.toLocaleLowerCase().includes(query.toLocaleLowerCase()))
+ .map(nativeStructuralNode);
+ const completeness = nativeCompleteness(result);
+ return mcpToolJsonResult(mcpStructuralPayload({
+ command: 'code.routes', workspaceId, generatedAt: fixedNow(),
+ data: { query, routes, relationships: (result.relationships ?? []).map(nativeStructuralRelationship), completeness, truncated: completeness.truncated, nextCursor: completeness.nextCursor, source: nativeIndexSource(result) }
+ }));
+ }
+ },
{
name: 'repo.map',
description: 'Return a bounded Recall Map of local source coverage, governed memory, and handoff readiness.',
@@ -6366,40 +7322,108 @@ function buildMcpTokenSaverTools({ values, root, workspaceId, generatedAt, stats
}
},
handler: async ({ arguments: args }) => {
- const payload = await buildMcpRepoMapPayload({
- values,
- root,
- workspaceId,
- generatedAt: fixedNow(),
- args
- });
- return mcpToolJsonResult(payload);
+ const input = mcpMapArguments(args, ['client', 'changed', 'query', 'limit'], 'repo.map');
+ mcpMapClient(input.client);
+ const changedLocators = mcpMapChangedLocators(input.changed, { required: false });
+ const query = mcpMapQuery(input.query);
+ const limit = mcpStrictBoundedInteger(input.limit, 20, { min: 1, max: 50, name: 'limit' });
+ const status = await nativeStatus();
+ const search = query ? await nativeQuery('exact', { query, limit }) : null;
+ const impact = [];
+ for (const locator of changedLocators) {
+ const result = await nativeQuery('impact', { query: locator, limit, depth: 2 });
+ impact.push({ locator, nodes: result.results.map(nativeStructuralNode), relationships: (result.relationships ?? []).map(nativeStructuralRelationship), ...nativeCompleteness(result) });
+ }
+ const completeness = {
+ search: search ? nativeCompleteness(search) : null,
+ impact: impact.map(({ locator, truncated, nextCursor }) => ({ locator, truncated, nextCursor }))
+ };
+ const sqlitePath = await resolveWorkspaceSqlitePath(
+ root,
+ option(values, '--sqlite') ?? '.local/memory.sqlite',
+ 'mcp server',
+ { mustExist: false }
+ );
+ const memory = await buildRecallMapMemorySummary({
+ root,
+ workspaceId,
+ clock: () => fixedNow(),
+ sqliteLocator: sqlitePath.relative
+ });
+ const affectedSymbols = [...new Map(
+ impact.flatMap(({ nodes }) => nodes).map((node) => [node.id, node])
+ ).values()];
+ const payload = mcpStructuralPayload({
+ command: 'repo.map', workspaceId, generatedAt: fixedNow(),
+ data: {
+ sourceIndex: nativeIndexStatusData(status),
+ search: search ? search.results.map(nativeStructuralNode) : [],
+ impact,
+ architecture: {
+ search: {
+ query,
+ results: search ? search.results.map(nativeStructuralNode) : [],
+ truncated: completeness.search?.truncated ?? false,
+ nextCursor: completeness.search?.nextCursor ?? null
+ },
+ impact: {
+ changedLocators,
+ representedChangedLocators: impact.filter(({ nodes }) => nodes.length > 0).map(({ locator }) => locator),
+ affectedSymbols
+ }
+ },
+ completeness,
+ truncated: Boolean(completeness.search?.truncated || completeness.impact.some((item) => item.truncated)),
+ memory,
+ source: nativeIndexSource(status)
+ }
+ });
+ payload.data.safeguards = payload.safeguards;
+ return mcpToolJsonResult(payload);
}
},
{
name: 'code.impact',
- description: 'Return bounded locator-safe impact for changed local source files.',
+ description: 'Return bounded impact for changed local files or one evidence-backed Go boundary across repositories.',
operation: 'code.impact',
sideEffectClass: 'read-only',
inputSchema: {
type: 'object',
additionalProperties: false,
- required: ['changed'],
+ oneOf: [{ required: ['changed'] }, { required: ['crossRepository'] }],
properties: {
changed: { type: 'array', minItems: 1, maxItems: 16, items: { type: 'string', minLength: 1, maxLength: 512 } },
- depth: { type: 'integer', enum: [1, 2, 3], default: 2 },
- limit: { type: 'integer', minimum: 1, maximum: 50, default: 20 }
+ crossRepository: mcpCrossRepositoryInputSchema(),
+ depth: { type: 'integer', enum: [1, 2, 3] },
+ limit: { type: 'integer', minimum: 1, maximum: 50 }
}
},
handler: async ({ arguments: args }) => {
- const payload = await buildMcpCodeImpactPayload({
- values,
- root,
- workspaceId,
- generatedAt: fixedNow(),
- args
- });
- return mcpToolJsonResult(payload);
+ const input = mcpMapArguments(args, ['changed', 'crossRepository', 'depth', 'limit'], 'code.impact');
+ const crossRepository = mcpCrossRepository(input.crossRepository);
+ mcpRejectMixedCrossRepositoryArguments(input, crossRepository, ['changed', 'depth'], 'code.impact');
+ if (crossRepository) {
+ const limit = mcpStrictBoundedInteger(input.limit, 20, { min: 1, max: 25, name: 'limit' });
+ const provider = await requireNativeRepositoryProvider();
+ const result = await provider.impactGoRepositories({ root, workspaceId, ...crossRepository, limit });
+ return mcpToolJsonResult(mcpStructuralPayload({
+ command: 'code.impact', workspaceId, generatedAt: fixedNow(),
+ data: nativeCrossRepositoryData(result, crossRepository)
+ }));
+ }
+ const changedLocators = mcpMapChangedLocators(input.changed, { required: true });
+ const depth = mcpStrictBoundedInteger(input.depth, 2, { min: 1, max: 3, name: 'depth' });
+ const limit = mcpStrictBoundedInteger(input.limit, 20, { min: 1, max: 50, name: 'limit' });
+ const results = [];
+ for (const locator of changedLocators) {
+ const result = await nativeQuery('impact', { query: locator, depth, limit });
+ results.push({ locator, nodes: result.results.map(nativeStructuralNode), relationships: (result.relationships ?? []).map(nativeStructuralRelationship), ...nativeCompleteness(result) });
+ }
+ const status = await nativeStatus();
+ return mcpToolJsonResult(mcpStructuralPayload({
+ command: 'code.impact', workspaceId, generatedAt: fixedNow(),
+ data: { changedLocators, depth, results, completeness: results.map(({ locator, truncated, nextCursor }) => ({ locator, truncated, nextCursor })), truncated: results.some((item) => item.truncated), source: nativeIndexSource(status) }
+ }));
}
},
{
@@ -6492,85 +7516,30 @@ function buildMcpTokenSaverTools({ values, root, workspaceId, generatedAt, stats
budget: { type: 'integer', minimum: 1, maximum: 100000, default: 4096 }
}
},
- handler: async ({ arguments: args }) => mcpToolTextResult(await buildMcpContextPackToolText({
- root,
- workspaceId,
- generatedAt,
- args
- }))
- }
- ];
-}
-
-async function buildMcpRepoMapPayload({ values, root, workspaceId, generatedAt, args }) {
- const input = mcpMapArguments(args, ['client', 'changed', 'query', 'limit'], 'repo.map');
- mcpMapClient(input.client);
- const changedLocators = mcpMapChangedLocators(input.changed, { required: false });
- const query = mcpMapQuery(input.query);
- const limit = mcpStrictBoundedInteger(input.limit, 20, { min: 1, max: 50, name: 'limit' });
- const report = await buildMcpRecallMapReport({
- values,
- root,
- workspaceId,
- generatedAt,
- changedLocators,
- query,
- depth: 2,
- limit
- });
- return mcpNoWritePayload({
- command: 'repo.map',
- workspaceId,
- generatedAt,
- data: report
- });
-}
-
-async function buildMcpCodeImpactPayload({ values, root, workspaceId, generatedAt, args }) {
- const input = mcpMapArguments(args, ['changed', 'depth', 'limit'], 'code.impact');
- const changedLocators = mcpMapChangedLocators(input.changed, { required: true });
- const depth = mcpStrictBoundedInteger(input.depth, 2, { min: 1, max: 3, name: 'depth' });
- const limit = mcpStrictBoundedInteger(input.limit, 20, { min: 1, max: 50, name: 'limit' });
- const report = await buildMcpRecallMapReport({
- values,
- root,
- workspaceId,
- generatedAt,
- changedLocators,
- query: '',
- depth,
- limit
- });
- return mcpNoWritePayload({
- command: 'code.impact',
- workspaceId,
- generatedAt,
- data: {
- schemaVersion: report.schemaVersion,
- reportVersion: report.reportVersion,
- ...report.architecture.impact,
- safeguards: report.safeguards
- }
- });
-}
-
-async function buildMcpRecallMapReport({ values, root, workspaceId, generatedAt, changedLocators, query, depth, limit }) {
- const sqlitePath = await resolveWorkspaceSqlitePath(
- root,
- option(values, '--sqlite') ?? '.local/memory.sqlite',
- 'mcp server',
- { mustExist: false }
- );
- return buildRecallMap({
- root,
- workspaceId,
- changedLocators,
- query,
- depth,
- limit,
- clock: () => generatedAt,
- sqliteLocator: sqlitePath.relative
- });
+ handler: async ({ arguments: args }) => {
+ const objective = mcpRequiredString(args.objective, 'objective', 500);
+ const step = mcpRequiredString(args.step, 'step', 500);
+ const [provider, status] = await Promise.all([loadNativeProvider(), nativeStatus()]);
+ const sourceGraphPreview = await buildNativeIndexSourceGraphPreview({
+ provider,
+ status,
+ root,
+ workspaceId,
+ query: `${objective} ${step}`,
+ limit: 12,
+ sampleLimit: 1,
+ clock: () => generatedAt
+ });
+ return mcpToolTextResult(await buildMcpContextPackToolText({
+ root,
+ workspaceId,
+ generatedAt,
+ args,
+ sourceGraphPreview
+ }));
+ }
+ }
+ ];
}
function mcpMapArguments(args, allowedKeys, toolName) {
@@ -6581,7 +7550,7 @@ function mcpMapArguments(args, allowedKeys, toolName) {
function mcpMapClient(value) {
if (value === undefined || value === null) return;
- if (typeof value !== 'string' || !/^[A-Za-z0-9._:-]{1,80}$/u.test(value) || MCP_PRIVATE_MATERIAL.test(value)) {
+ if (typeof value !== 'string' || !/^[A-Za-z0-9._:-]{1,80}$/u.test(value) || mcpContainsPrivateMaterial(value)) {
throw new Error('repo.map client is invalid');
}
}
@@ -6594,7 +7563,7 @@ function mcpMapChangedLocators(value, { required }) {
if (!Array.isArray(value) || value.length > 16 || (required && !value.length)) throw new Error('mcp map changed locators are invalid');
if (!value.length) return [];
const locators = value.map((item) => {
- if (typeof item !== 'string' || item.length > 512 || MCP_PRIVATE_MATERIAL.test(item)) {
+ if (typeof item !== 'string' || item.length > 512 || mcpContainsPrivateMaterial(item)) {
throw new Error('mcp map changed locators are invalid');
}
try {
@@ -6608,7 +7577,7 @@ function mcpMapChangedLocators(value, { required }) {
function mcpMapQuery(value) {
if (value === undefined || value === null) return '';
- if (typeof value !== 'string' || value.length > 512 || /[\0\r\n]/u.test(value) || MCP_PRIVATE_MATERIAL.test(value)) {
+ if (typeof value !== 'string' || value.length > 512 || /[\0\r\n]/u.test(value) || mcpContainsPrivateMaterial(value)) {
throw new Error('repo.map query is invalid');
}
return value.trim();
@@ -6622,6 +7591,133 @@ function mcpStrictBoundedInteger(value, fallback, { min, max, name }) {
return value;
}
+function mcpStructuralString(value, name, { required, max }) {
+ if (value === undefined || value === null) {
+ if (required) throw new Error(`${name} is invalid`);
+ return '';
+ }
+ if (typeof value !== 'string' || value.length > max || /[\0\r\n]/u.test(value) || mcpContainsPrivateMaterial(value)) {
+ throw new Error(`${name} is invalid`);
+ }
+ const normalized = value.trim();
+ if (required && !normalized) throw new Error(`${name} is invalid`);
+ return normalized;
+}
+
+function mcpStructuralKinds(value, allowed, { minItems = 0, maxItems = allowed.length, unique = false } = {}) {
+ if (value === undefined || value === null) return null;
+ if (
+ !Array.isArray(value)
+ || value.length < minItems
+ || value.length > maxItems
+ || (unique && new Set(value).size !== value.length)
+ || value.some((item) => !allowed.includes(item))
+ ) {
+ throw new Error('mcp structural kinds are invalid');
+ }
+ return [...new Set(value)];
+}
+
+function mcpStructuralDirection(value) {
+ const direction = value ?? 'outbound';
+ if (!['outbound', 'inbound', 'both'].includes(direction)) throw new Error('mcp direction is invalid');
+ return direction;
+}
+
+function mcpStructuralLocatorPrefix(value) {
+ if (value === undefined || value === null || value === '') return null;
+ if (typeof value !== 'string' || value.length > 512 || /[\0\r\n]/u.test(value) || mcpContainsPrivateMaterial(value)) {
+ throw new Error('mcp locator prefix is invalid');
+ }
+ try {
+ return normalizeSourceGraphWorkspaceLocator(value, { stripFragment: true });
+ } catch {
+ throw new Error('mcp locator prefix is invalid');
+ }
+}
+
+function mcpCrossRepositoryInputSchema() {
+ return {
+ type: 'object',
+ additionalProperties: false,
+ required: [
+ 'repositoryIds',
+ 'clientRepositoryId',
+ 'serviceRepositoryId',
+ 'clientEntryNativeId',
+ 'serviceTargetNativeId'
+ ],
+ properties: {
+ repositoryIds: {
+ type: 'array',
+ minItems: 2,
+ maxItems: 2,
+ uniqueItems: true,
+ items: { type: 'string', pattern: '^repo_[a-f0-9]{32}$' }
+ },
+ clientRepositoryId: { type: 'string', pattern: '^repo_[a-f0-9]{32}$' },
+ serviceRepositoryId: { type: 'string', pattern: '^repo_[a-f0-9]{32}$' },
+ clientEntryNativeId: { type: 'string', pattern: '^cinode_[a-f0-9]{32}$' },
+ serviceTargetNativeId: { type: 'string', pattern: '^cinode_[a-f0-9]{32}$' }
+ }
+ };
+}
+
+function mcpRepositoryIds(value, { min, max }) {
+ if (value === undefined || value === null) return null;
+ if (
+ !Array.isArray(value)
+ || value.length < min
+ || value.length > max
+ || new Set(value).size !== value.length
+ || value.some((item) => typeof item !== 'string' || !/^repo_[a-f0-9]{32}$/u.test(item))
+ ) {
+ throw new Error('mcp repository ids are invalid');
+ }
+ return [...value];
+}
+
+function mcpCrossRepository(value) {
+ if (value === undefined || value === null) return null;
+ const expectedKeys = [
+ 'repositoryIds',
+ 'clientRepositoryId',
+ 'serviceRepositoryId',
+ 'clientEntryNativeId',
+ 'serviceTargetNativeId'
+ ];
+ if (!value || typeof value !== 'object' || Array.isArray(value) || Object.keys(value).some((key) => !expectedKeys.includes(key))) {
+ throw new Error('mcp cross-repository selector is invalid');
+ }
+ if (expectedKeys.some((key) => value[key] === undefined)) throw new Error('mcp cross-repository selector is invalid');
+ const repositoryIds = mcpRepositoryIds(value.repositoryIds, { min: 2, max: 2 });
+ const repositoryIdPattern = /^repo_[a-f0-9]{32}$/u;
+ const nativeIdPattern = /^cinode_[a-f0-9]{32}$/u;
+ if (
+ !repositoryIdPattern.test(value.clientRepositoryId)
+ || !repositoryIdPattern.test(value.serviceRepositoryId)
+ || !nativeIdPattern.test(value.clientEntryNativeId)
+ || !nativeIdPattern.test(value.serviceTargetNativeId)
+ || repositoryIds[0] !== value.clientRepositoryId
+ || repositoryIds[1] !== value.serviceRepositoryId
+ ) {
+ throw new Error('mcp cross-repository selector is invalid');
+ }
+ return {
+ repositoryIds,
+ clientRepositoryId: value.clientRepositoryId,
+ serviceRepositoryId: value.serviceRepositoryId,
+ clientEntryNativeId: value.clientEntryNativeId,
+ serviceTargetNativeId: value.serviceTargetNativeId
+ };
+}
+
+function mcpRejectMixedCrossRepositoryArguments(input, crossRepository, localKeys, toolName) {
+ if (crossRepository && localKeys.some((key) => input[key] !== undefined)) {
+ throw new Error(`${toolName} cannot mix local and cross-repository selectors`);
+ }
+}
+
async function buildMcpMemoryRecallPayload({ values, root, workspaceId, generatedAt, args }) {
const query = mcpRequiredString(args.query, 'query', 240);
const scope = mcpSafeScope(args.scope ?? 'workspace');
@@ -6841,7 +7937,7 @@ async function buildMcpContextProfilePayload({ values, root, workspaceId, genera
return payload;
}
-async function buildMcpContextPackToolText({ root, workspaceId, generatedAt, args }) {
+async function buildMcpContextPackToolText({ root, workspaceId, generatedAt, args, sourceGraphPreview = null }) {
const objective = mcpRequiredString(args.objective, 'objective', 500);
const step = mcpRequiredString(args.step, 'step', 500);
const toolValues = [
@@ -6852,7 +7948,7 @@ async function buildMcpContextPackToolText({ root, workspaceId, generatedAt, arg
'--target', mcpSanitizeString(args.target ?? 'generic', 80),
'--token-budget', String(mcpBoundedInteger(args.budget, 4096, { min: 1, max: 100000 }))
];
- const currentContextPack = await buildMcpContextPackResource(toolValues, { root, workspaceId });
+ const currentContextPack = await buildMcpContextPackResource(toolValues, { root, workspaceId, sourceGraphPreview });
const resources = buildOafReadOnlyResourceCatalog({
state: {},
projectStatus: {},
@@ -7159,15 +8255,24 @@ function mcpBoundedInteger(value, fallback, { min, max }) {
return Math.max(min, Math.min(max, parsed));
}
+function mcpContainsPrivateMaterial(value) {
+ return MCP_PRIVATE_PATH.test(value) || MCP_SECRET_MATERIAL.test(value);
+}
+
function mcpSanitizeString(value, maxLength = 240) {
- const text = String(value ?? '').replace(MCP_PRIVATE_MATERIAL_GLOBAL, '[redacted]').normalize('NFKC').replace(/\s+/gu, ' ').trim();
+ const text = String(value ?? '')
+ .replace(MCP_PRIVATE_PATH_GLOBAL, '[redacted]')
+ .replace(MCP_SECRET_MATERIAL_GLOBAL, '[redacted]')
+ .normalize('NFKC')
+ .replace(/\s+/gu, ' ')
+ .trim();
return text.slice(0, maxLength);
}
function mcpSafeLocator(value) {
const raw = String(value ?? '');
if (!raw) return null;
- if (MCP_PRIVATE_MATERIAL.test(raw) || raw.startsWith('file:')) return fingerprintJson(raw);
+ if (mcpContainsPrivateMaterial(raw) || raw.startsWith('file:')) return fingerprintJson(raw);
return mcpSanitizeString(raw, 240);
}
@@ -7204,6 +8309,99 @@ function mcpNoWritePayload({ command, workspaceId, generatedAt, data }) {
};
}
+function mcpStructuralPayload({ command, workspaceId, generatedAt, data }) {
+ const payload = mcpNoWritePayload({ command, workspaceId, generatedAt, data });
+ return {
+ ...payload,
+ safeguards: {
+ ...payload.safeguards,
+ rawSourceBodiesIncluded: false
+ }
+ };
+}
+
+function nativeRepositorySource(result) {
+ return {
+ kind: 'native-persistent-repository-index',
+ engine: 'memory-recall-native',
+ registryLocator: result.registryLocator,
+ operation: result.operation
+ };
+}
+
+function nativeRepositorySearchData(result, query, repositoryIds) {
+ return {
+ query,
+ repositoryIds,
+ repositories: result.repositories,
+ results: result.results,
+ resultCount: result.results.length,
+ perRepository: result.perRepository,
+ partial: result.partial,
+ truncated: result.truncated,
+ measurements: result.measurements,
+ source: nativeRepositorySource(result)
+ };
+}
+
+function nativeRepositoryListData(result) {
+ return {
+ scope: 'repositories',
+ repositories: result.repositories,
+ repositoryCount: result.repositories.length,
+ partial: result.partial,
+ truncated: result.truncated,
+ measurements: result.measurements,
+ source: nativeRepositorySource(result)
+ };
+}
+
+function nativeCrossRepositoryData(result, crossRepository) {
+ return {
+ crossRepository,
+ repositories: result.repositories,
+ modules: result.goModules,
+ relationships: result.goRelationships,
+ paths: result.paths,
+ impactedNodes: result.impactedNodes,
+ partial: result.partial,
+ truncated: result.truncated,
+ measurements: result.measurements,
+ source: nativeRepositorySource(result)
+ };
+}
+
+function nativeNodeMatchesKinds(item, requestedKinds) {
+ if (!requestedKinds?.length) return true;
+ const normalized = item.kind === 'file'
+ ? 'file'
+ : item.kind === 'module' || item.kind === 'package' || item.kind === 'namespace'
+ ? 'module'
+ : 'symbol';
+ return requestedKinds.includes(normalized);
+}
+
+function nativeIndexStatusData(result) {
+ return {
+ status: result.state,
+ freshness: result.freshness,
+ activeGeneration: result.activeGeneration,
+ indexLocator: result.indexLocator,
+ fileCount: result.summary.fileCount,
+ nodeCount: result.summary.nodeCount,
+ edgeCount: result.summary.edgeCount,
+ unresolvedCount: result.summary.unresolvedCount,
+ omittedCount: result.summary.omittedCount,
+ databaseBytes: result.summary.databaseBytes,
+ diagnostics: (result.diagnostics ?? []).slice(0, 32).map((diagnostic) => ({
+ code: mcpSanitizeString(diagnostic.code, 80),
+ ...(Number.isSafeInteger(diagnostic.count) && diagnostic.count >= 0 ? { count: diagnostic.count } : {})
+ })),
+ health: result.health,
+ source: nativeIndexSource(result)
+ };
+}
+
async function createMcpStatsRecorder({ values, root, workspaceId, generatedAt }) {
const statsPath = await resolveWorkspaceStatsPath(root, option(values, '--stats') ?? '.local/mcp-stats.jsonl', 'mcp server stats', { mustExist: false });
const sessionId = `mcpsess_${randomUUID().replaceAll('-', '').slice(0, 24)}`;
@@ -7464,43 +8662,17 @@ function mcpToolJsonResult(payload) {
}
function mcpToolTextResult(text) {
- if (MCP_PRIVATE_MATERIAL.test(text)) throw new Error('mcp tool output contains private material');
+ if (mcpContainsPrivateMaterial(text)) throw new Error('mcp tool output contains private material');
return { content: [{ type: 'text', text }] };
}
async function mcpInstallCommand(values) {
- if (values.includes('--write')) {
- console.error('mcp install uses --apply with --confirm; --write is not supported');
- process.exitCode = 2;
- return;
- }
- const format = option(values, '--format') ?? 'json';
- if (format !== 'json') {
- console.error('mcp install only supports --format json');
- process.exitCode = 2;
- return;
- }
- const client = normalizeMcpInstallClient(option(values, '--client'));
- const apply = values.includes('--apply');
- if (apply && values.includes('--dry-run')) {
- console.error('mcp install accepts either dry-run/default or --apply, not both');
- process.exitCode = 2;
- return;
- }
- const allowedFlags = new Set(['--client', '--server', '--home', '--config', '--root', '--sqlite', '--stats', '--format', '--dry-run', '--apply', '--confirm']);
- const valueFlags = new Set(['--client', '--server', '--home', '--config', '--root', '--sqlite', '--stats', '--format', '--confirm']);
- const unsupported = unsupportedFlags(values, allowedFlags, valueFlags);
- if (unsupported.length) {
- console.error(`mcp install unsupported option: ${unsupported[0]}`);
- process.exitCode = 2;
- return;
- }
+ const { client, apply, home, configPath } = parseMcpConfigMutationOptions(values, 'install');
const root = path.resolve(option(values, '--root') ?? process.cwd());
const rootStat = await stat(root).catch(() => null);
if (!rootStat?.isDirectory()) throw new Error('mcp install --root must point at a local workspace directory');
const sqlitePath = await resolveWorkspaceSqlitePath(root, option(values, '--sqlite') ?? '.local/memory.sqlite', 'mcp install', { mustExist: false });
const statsPath = await resolveWorkspaceStatsPath(root, option(values, '--stats') ?? '.local/mcp-stats.jsonl', 'mcp install', { mustExist: false });
- const home = option(values, '--home') ?? process.env.HOME ?? process.cwd();
const setup = await buildHarnessSetupReport({
action: 'plan',
client: client.id,
@@ -7510,22 +8682,116 @@ async function mcpInstallCommand(values) {
bridgeMode: 'token-saver',
generatedAt: fixedNow()
});
- const installPlan = await buildPortableMcpInstallPlan({ setup, client, root, sqlitePath, statsPath, home, configPath: option(values, '--config') ?? client.configPath });
+ const installPlan = await buildPortableMcpInstallPlan({ setup, client, root, sqlitePath, statsPath, home, configPath });
const preview = buildMcpInstallReport({ setup, installPlan, client, root, sqlitePath, statsPath, apply, applied: false, localFilesWritten: 0 });
const confirm = option(values, '--confirm');
+ if (apply && installPlan.status.server === 'drifted') {
+ console.error('mcp install refuses to replace a drifted server entry; remove or rename that entry manually after reviewing it');
+ process.exitCode = 2;
+ return;
+ }
if (apply && confirm !== preview.planFingerprint) {
console.error('mcp install --apply requires --confirm from a dry-run preview');
process.exitCode = 2;
return;
}
if (apply) {
- await applyMcpInstallConfig({ home, client, configPath: option(values, '--config') ?? client.configPath, server: setup.server, desiredServer: installPlan.desiredServer });
- console.log(JSON.stringify(buildMcpInstallReport({ setup, installPlan, client, root, sqlitePath, statsPath, apply, applied: true, localFilesWritten: 1 }), null, 2));
+ const result = await applyMcpInstallConfig({
+ home,
+ client,
+ configPath,
+ server: setup.server,
+ desiredServer: installPlan.desiredServer,
+ expectedPreimageFingerprint: installPlan.configPreimageFingerprint,
+ generatedAt: setup.generatedAt
+ });
+ console.log(JSON.stringify(buildMcpInstallReport({
+ setup,
+ installPlan,
+ client,
+ root,
+ sqlitePath,
+ statsPath,
+ apply,
+ applied: result.changed,
+ localFilesWritten: result.localFilesWritten,
+ backupRef: result.backupRef
+ }), null, 2));
+ return;
+ }
+ console.log(JSON.stringify(preview, null, 2));
+}
+
+async function mcpUninstallCommand(values) {
+ const { client, apply, home, configPath } = parseMcpConfigMutationOptions(values, 'uninstall');
+ const setup = await buildHarnessSetupReport({
+ action: 'plan',
+ client: client.id,
+ server: option(values, '--server') ?? 'oaf',
+ home,
+ configPath: option(values, '--config'),
+ bridgeMode: 'token-saver',
+ generatedAt: fixedNow()
+ });
+ const uninstallPlan = await buildPortableMcpUninstallPlan({ setup, client, home, configPath });
+ const preview = buildMcpUninstallReport({ setup, uninstallPlan, client, apply, applied: false, localFilesWritten: 0 });
+ if (apply && uninstallPlan.status.server === 'drifted') {
+ console.error('mcp uninstall refuses to remove a drifted or unowned server entry');
+ process.exitCode = 2;
+ return;
+ }
+ if (apply && uninstallPlan.status.server === 'absent') {
+ console.error('mcp uninstall found no exact owned server entry to remove');
+ process.exitCode = 2;
+ return;
+ }
+ if (apply && option(values, '--confirm') !== preview.planFingerprint) {
+ console.error('mcp uninstall --apply requires --confirm from a dry-run preview');
+ process.exitCode = 2;
+ return;
+ }
+ if (apply) {
+ const result = await removeMcpInstallConfig({
+ home,
+ client,
+ configPath,
+ server: setup.server,
+ expectedPreimageFingerprint: uninstallPlan.configPreimageFingerprint,
+ generatedAt: setup.generatedAt
+ });
+ console.log(JSON.stringify(buildMcpUninstallReport({
+ setup,
+ uninstallPlan,
+ client,
+ apply,
+ applied: result.changed,
+ localFilesWritten: result.localFilesWritten,
+ backupRef: result.backupRef
+ }), null, 2));
return;
}
console.log(JSON.stringify(preview, null, 2));
}
+function parseMcpConfigMutationOptions(values, action) {
+ if (values.includes('--write')) throw new Error(`mcp ${action} uses --apply with --confirm; --write is not supported`);
+ if ((option(values, '--format') ?? 'json') !== 'json') throw new Error(`mcp ${action} only supports --format json`);
+ const apply = values.includes('--apply');
+ if (apply && values.includes('--dry-run')) throw new Error(`mcp ${action} accepts either dry-run/default or --apply, not both`);
+ const installOnly = action === 'install' ? ['--root', '--sqlite', '--stats'] : [];
+ const allowedFlags = new Set(['--client', '--server', '--home', '--config', '--format', '--dry-run', '--apply', '--confirm', ...installOnly]);
+ const valueFlags = new Set(['--client', '--server', '--home', '--config', '--format', '--confirm', ...installOnly]);
+ const unsupported = unsupportedFlags(values, allowedFlags, valueFlags);
+ if (unsupported.length) throw new Error(`mcp ${action} unsupported option: ${unsupported[0]}`);
+ const client = normalizeMcpInstallClient(option(values, '--client'));
+ return {
+ client,
+ apply,
+ home: option(values, '--home') ?? process.env.HOME ?? process.cwd(),
+ configPath: option(values, '--config') ?? client.configPath
+ };
+}
+
function normalizeMcpInstallClient(value) {
const aliases = new Map([['claude', 'claude-code']]);
const id = aliases.get(String(value ?? '').trim()) ?? String(value ?? '').trim();
@@ -7545,6 +8811,8 @@ async function buildPortableMcpInstallPlan({ setup, client, root, sqlitePath, st
'mcp',
'server',
'--read-only',
+ '--engine',
+ 'native',
'--root',
realRoot,
'--sqlite',
@@ -7558,20 +8826,26 @@ async function buildPortableMcpInstallPlan({ setup, client, root, sqlitePath, st
externalWrites: false
};
const serverConfig = { command: desiredServer.command, args: desiredServer.args };
- const status = await classifyMcpInstallServer({ home, client, configPath, server: setup.server, desiredServer }).catch(() => setup.status.server);
+ const configState = await readMcpInstallConfigState({ home, client, configPath, server: setup.server });
+ const status = classifyMcpInstallServer({ configState, desiredServer });
const diffOperations = status === 'installed'
? []
: [{
- op: status === 'absent' ? 'add' : 'replace',
+ op: status === 'absent' ? 'add' : status === 'upgradeable' ? 'replace' : 'conflict',
target: client.format === 'toml' ? `mcp_servers.${setup.server}` : `mcpServers.${setup.server}`,
before: status,
after: 'read-only-oaf-mcp-stdio',
- summary: `${status === 'absent' ? 'add' : 'replace'} ${setup.server} with read-only OAF MCP stdio token-saver server`
+ summary: status === 'absent'
+ ? `add ${setup.server} as read-only OAF MCP stdio token-saver server`
+ : status === 'upgradeable'
+ ? `upgrade ${setup.server} from the owned native alias to the canonical native engine`
+ : `refuse to replace drifted ${setup.server} server entry`
}];
return {
desiredServer,
workspaceRoot: realRoot,
sqlitePath,
+ configPreimageFingerprint: fingerprintMcpConfigPreimage(configState),
status: {
...setup.status,
server: status
@@ -7590,6 +8864,44 @@ async function buildPortableMcpInstallPlan({ setup, client, root, sqlitePath, st
};
}
+async function buildPortableMcpUninstallPlan({ setup, client, home, configPath }) {
+ const configState = await readMcpInstallConfigState({ home, client, configPath, server: setup.server });
+ const status = !configState.serverConfig
+ ? 'absent'
+ : isOwnedMcpInstallServer(configState.serverConfig) ? 'installed' : 'drifted';
+ const target = client.format === 'toml' ? `mcp_servers.${setup.server}` : `mcpServers.${setup.server}`;
+ const operations = status === 'installed'
+ ? [{ op: 'remove', target, before: 'installed', after: 'absent', summary: `remove exact Memory Recall-owned ${setup.server} server entry` }]
+ : status === 'drifted'
+ ? [{ op: 'conflict', target, before: 'drifted', after: 'unchanged', summary: `refuse to remove drifted or unowned ${setup.server} server entry` }]
+ : [];
+ return {
+ workspaceRoot: null,
+ desiredServer: null,
+ configPreimageFingerprint: fingerprintMcpConfigPreimage(configState),
+ status: { ...setup.status, server: status },
+ diff: {
+ ...setup.diff,
+ operations,
+ preview: operations.map((operation) => operation.summary)
+ }
+ };
+}
+
+function isOwnedMcpInstallServer(serverConfig) {
+ if (serverConfig?.command !== process.execPath || !Array.isArray(serverConfig.args)) return false;
+ const args = serverConfig.args;
+ return args.length === 13 &&
+ args[0] === CLI_PATH &&
+ arraysEqual(args.slice(1, 5), ['mcp', 'server', '--read-only', '--engine']) &&
+ ['native', 'auto', 'native-preview'].includes(args[5]) &&
+ args[6] === '--root' &&
+ path.isAbsolute(args[7]) &&
+ args[8] === '--sqlite' && path.isAbsolute(args[9]) &&
+ args[10] === '--stats' && path.isAbsolute(args[11]) &&
+ args[12] === '--stdio';
+}
+
function buildMcpInstallManualConfigSnippet({ client, server, configRef, serverConfig }) {
let content;
if (client.format === 'toml') {
@@ -7607,31 +8919,29 @@ function buildMcpInstallManualConfigSnippet({ client, server, configRef, serverC
};
}
-async function classifyMcpInstallServer({ home, client, configPath, server, desiredServer }) {
- const existing = await readMcpInstallServerConfig({ home, client, configPath, server });
+function classifyMcpInstallServer({ configState, desiredServer }) {
+ const existing = configState.serverConfig;
if (!existing) return 'absent';
if (existing.command === desiredServer.command && arraysEqual(existing.args, desiredServer.args)) return 'installed';
+ if (isOwnedMcpInstallServer(existing)) return 'upgradeable';
return 'drifted';
}
-async function readMcpInstallServerConfig({ home, client, configPath, server }) {
- const realHome = await realpath(home);
- if (path.isAbsolute(configPath) || configPath.includes('..')) throw new Error('mcp install config path must stay inside --home');
- const target = path.resolve(realHome, configPath);
- if (!isInside(realHome, target)) throw new Error('mcp install config path escapes --home');
- const text = await readFile(target, 'utf8').catch((error) => {
- if (error.code === 'ENOENT') return null;
- throw error;
- });
- if (text === null) return null;
+async function readMcpInstallConfigState({ home, client, configPath, server }) {
+ const current = await readHomeFile(home, configPath);
+ const text = current.text;
+ let serverConfig = null;
if (client.format === 'json') {
const parsed = JSON.parse(text || '{}');
const existing = parsed?.mcpServers?.[server];
- if (existing && typeof existing === 'object' && !Array.isArray(existing)) return existing;
- return null;
+ if (existing && typeof existing === 'object' && !Array.isArray(existing)) serverConfig = existing;
}
- if (client.format === 'toml') return readMcpInstallTomlServerConfig(text, server);
- return null;
+ if (client.format === 'toml') serverConfig = readMcpInstallTomlServerConfig(text, server);
+ return { exists: current.exists, text, serverConfig };
+}
+
+function fingerprintMcpConfigPreimage(configState) {
+ return fingerprintJson({ exists: configState.exists, text: configState.text });
}
function readMcpInstallTomlServerConfig(text, server) {
@@ -7658,7 +8968,7 @@ function arraysEqual(left, right) {
return Array.isArray(left) && Array.isArray(right) && left.length === right.length && left.every((item, index) => item === right[index]);
}
-function buildMcpInstallReport({ setup, installPlan, client, root, sqlitePath, statsPath, apply, applied, localFilesWritten }) {
+function buildMcpInstallReport({ setup, installPlan, client, root, sqlitePath, statsPath, apply, applied, localFilesWritten, backupRef = null }) {
const reportBase = {
schemaVersion: '1.0.0',
command: 'mcp install',
@@ -7667,7 +8977,8 @@ function buildMcpInstallReport({ setup, installPlan, client, root, sqlitePath, s
apply: {
requested: apply,
confirmed: apply,
- applied
+ applied,
+ backupRef
},
client: setup.client,
clientLabel: setup.clientLabel,
@@ -7688,6 +8999,8 @@ function buildMcpInstallReport({ setup, installPlan, client, root, sqlitePath, s
config: setup.config,
status: installPlan.status,
desiredServer: installPlan.desiredServer,
+ indexBuildCommand: `recall graph index --write --engine native --root ${JSON.stringify(installPlan.workspaceRoot)} --format summary`,
+ configPreimageFingerprint: installPlan.configPreimageFingerprint,
manualConfigSnippet: installPlan.manualConfigSnippet,
reversal: {
mode: 'manual',
@@ -7706,12 +9019,55 @@ function buildMcpInstallReport({ setup, installPlan, client, root, sqlitePath, s
return {
...reportBase,
planFingerprint,
- nextCommand: apply || applied
+ nextCommand: apply || applied || installPlan.status.server === 'drifted' || installPlan.status.server === 'installed'
+ ? null
+ : `recall mcp install --client ${client.id} --root ${JSON.stringify(root)} --apply --confirm ${planFingerprint} --format json`,
+ warnings: [
+ 'Dry-run is the default; Memory Recall writes home config only with --apply and matching --confirm.',
+ 'mcp install configures the packaged native engine but never builds or refreshes an index. Run indexBuildCommand explicitly before using structural tools.',
+ 'Structural tools fail with an actionable build, refresh, repair, or package error. The MCP server remains local stdio and read-only.'
+ ]
+ };
+}
+
+function buildMcpUninstallReport({ setup, uninstallPlan, client, apply, applied, localFilesWritten, backupRef = null }) {
+ const reportBase = {
+ schemaVersion: '1.0.0',
+ command: 'mcp uninstall',
+ generatedAt: setup.generatedAt,
+ dryRun: !apply,
+ apply: {
+ requested: apply,
+ confirmed: apply,
+ applied,
+ backupRef
+ },
+ client: setup.client,
+ clientLabel: setup.clientLabel,
+ server: setup.server,
+ bridgeMode: setup.bridgeMode,
+ config: setup.config,
+ configPreimageFingerprint: uninstallPlan.configPreimageFingerprint,
+ status: uninstallPlan.status,
+ desiredServer: uninstallPlan.desiredServer,
+ diff: uninstallPlan.diff,
+ safeguards: {
+ ...setup.safeguards,
+ localFilesWritten,
+ homeConfigMutated: applied,
+ workspaceStateMutated: false
+ }
+ };
+ const planFingerprint = fingerprintMcpInstallPlan(reportBase);
+ return {
+ ...reportBase,
+ planFingerprint,
+ nextCommand: apply || applied || uninstallPlan.status.server !== 'installed'
? null
- : `npm run oaf -- mcp install --client ${client.id} --root ${JSON.stringify(root)} --apply --confirm ${planFingerprint} --format json`,
+ : `recall mcp uninstall --client ${client.id} --apply --confirm ${planFingerprint} --format json`,
warnings: [
- 'Dry-run is the default; OAF writes home config only with --apply and matching --confirm.',
- 'Review the config before applying. The MCP server is local stdio and read-only.'
+ 'Dry-run is the default; Memory Recall removes only an exact owned server entry after matching confirmation.',
+ 'Workspace .local data is never removed by this command.'
]
};
}
@@ -7724,27 +9080,40 @@ function fingerprintMcpInstallPlan(report) {
bridgeMode: report.bridgeMode,
workspaceRootRef: report.workspaceRootRef,
config: report.config,
+ configPreimageFingerprint: report.configPreimageFingerprint,
status: report.status,
desiredServer: report.desiredServer,
diff: report.diff
});
}
-async function applyMcpInstallConfig({ home, client, configPath, server, desiredServer }) {
- const realHome = await realpath(home);
- if (path.isAbsolute(configPath) || configPath.includes('..')) throw new Error('mcp install config path must stay inside --home');
- const target = path.resolve(realHome, configPath);
- if (!isInside(realHome, target)) throw new Error('mcp install config path escapes --home');
- await mkdir(path.dirname(target), { recursive: true, mode: 0o700 });
- const current = await readFile(target, 'utf8').catch((error) => {
- if (error.code === 'ENOENT') return null;
- throw error;
- });
+async function applyMcpInstallConfig({ home, client, configPath, server, desiredServer, expectedPreimageFingerprint, generatedAt }) {
+ const current = await readMcpInstallConfigState({ home, client, configPath, server });
+ if (fingerprintMcpConfigPreimage(current) !== expectedPreimageFingerprint) throw new Error('mcp install config changed after preview; run a new dry-run');
const serverConfig = { command: desiredServer.command, args: desiredServer.args };
const next = client.format === 'toml'
- ? mergeMcpInstallToml(current ?? '', server, serverConfig)
- : mergeMcpInstallJson(current ?? '{}', server, serverConfig);
- await writeFile(target, next, { mode: 0o600 });
+ ? mergeMcpInstallToml(current.text, server, serverConfig)
+ : mergeMcpInstallJson(current.text || '{}', server, serverConfig);
+ return writeMcpInstallConfig({ home, configPath, current, next, generatedAt });
+}
+
+async function removeMcpInstallConfig({ home, client, configPath, server, expectedPreimageFingerprint, generatedAt }) {
+ const current = await readMcpInstallConfigState({ home, client, configPath, server });
+ if (fingerprintMcpConfigPreimage(current) !== expectedPreimageFingerprint) throw new Error('mcp uninstall config changed after preview; run a new dry-run');
+ const next = client.format === 'toml'
+ ? removeMcpInstallToml(current.text, server)
+ : removeMcpInstallJson(current.text, server);
+ return writeMcpInstallConfig({ home, configPath, current, next, generatedAt });
+}
+
+async function writeMcpInstallConfig({ home, configPath, current, next, generatedAt }) {
+ if (next === current.text) return { changed: false, localFilesWritten: 0, backupRef: null };
+ const { root, absolute } = await resolveHomePath(home, configPath);
+ await assertNoSymlinkAncestors(root, configPath);
+ await mkdir(path.dirname(absolute), { recursive: true, mode: 0o700 });
+ const backupRef = current.exists ? await writeHomeBackup({ home, relativePath: configPath, text: current.text, generatedAt }) : null;
+ await writePrivateFileAtomic(absolute, next);
+ return { changed: true, localFilesWritten: backupRef ? 2 : 1, backupRef };
}
function mergeMcpInstallJson(text, server, serverConfig) {
@@ -7766,6 +9135,22 @@ function mergeMcpInstallToml(text, server, serverConfig) {
return `${prefix ? `${prefix}\n\n` : ''}${section}`;
}
+function removeMcpInstallJson(text, server) {
+ const parsed = JSON.parse(text || '{}');
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) throw new Error('mcp uninstall JSON config must be an object');
+ const mcpServers = parsed.mcpServers && typeof parsed.mcpServers === 'object' && !Array.isArray(parsed.mcpServers)
+ ? { ...parsed.mcpServers }
+ : {};
+ delete mcpServers[server];
+ return `${JSON.stringify({ ...parsed, mcpServers }, null, 2)}\n`;
+}
+
+function removeMcpInstallToml(text, server) {
+ const escaped = server.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
+ const sectionPattern = new RegExp(`(?:^|\\n)\\[mcp_servers\\.${escaped}\\]\\n(?:[^\\[]|\\[(?!mcp_servers\\.))*`, 'u');
+ return text.replace(sectionPattern, (match) => match.startsWith('\n') ? '\n' : '').replace(/^\n+|\n+$/gu, '').concat('\n');
+}
+
async function mcpSmokeCommand(values) {
const [target, ...rest] = values;
if (target !== 'context-pack') {
@@ -8412,8 +9797,23 @@ async function loadMcpContextPackRegistryStatus(values, { root, workspaceId }) {
return report.registry.exists || report.currentPointer.exists ? report : null;
}
-async function buildMcpContextPackResource(values, { root, workspaceId }) {
+async function buildMcpContextPackResource(values, { root, workspaceId, sourceGraphPreview = null }) {
if (!values.includes('--context-pack')) return null;
+ const contextPackFd = option(values, '--context-pack-fd');
+ if (contextPackFd !== null) {
+ if (!values.includes('--stdio') || contextPackFd !== '3') {
+ throw new Error('prebuilt context pack input is available only to internal MCP stdio verification');
+ }
+ const serialized = await readBoundedFileDescriptor(3, MCP_CONTEXT_PACK_AUX_MAX_BYTES, 'prebuilt context pack');
+ let pack;
+ try {
+ pack = JSON.parse(serialized);
+ } catch {
+ throw new Error('prebuilt context pack is not valid JSON');
+ }
+ assertJsonSchema(contextPackSchema, pack, 'prebuilt context pack');
+ return { pack, markdown: renderContextPackMarkdown(pack) };
+ }
const objective = option(values, '--objective');
const step = option(values, '--step');
if (!objective || !step) {
@@ -8435,6 +9835,7 @@ async function buildMcpContextPackResource(values, { root, workspaceId }) {
step,
targetHarness,
tokenBudget,
+ sourceGraphPreview,
clock: fixedNow
});
return {
@@ -8443,7 +9844,7 @@ async function buildMcpContextPackResource(values, { root, workspaceId }) {
};
}
-async function buildMcpContextPackSmokeReport(values, { objective, step, fixedTimestamp = null }) {
+async function buildMcpContextPackSmokeReport(values, { objective, step, fixedTimestamp = null, contextPack = null }) {
const root = option(values, '--root') ?? process.cwd();
const workspaceId = option(values, '--workspace') ?? 'ws_local';
const targetHarness = option(values, '--target') ?? option(values, '--target-harness') ?? 'generic';
@@ -8480,6 +9881,7 @@ async function buildMcpContextPackSmokeReport(values, { objective, step, fixedTi
for (const value of options(values, '--changed-locator')) childArgs.push('--changed-locator', value);
if (gitChangedLocatorsRequested(values)) childArgs.push('--changed-from-git');
if (option(values, '--changed-shard')) childArgs.push('--changed-shard', String(changedShard(values)));
+ if (contextPack) childArgs.push('--context-pack-fd', '3');
const messages = [
{ jsonrpc: '2.0', id: 1, method: 'initialize' },
@@ -8490,7 +9892,8 @@ async function buildMcpContextPackSmokeReport(values, { objective, step, fixedTi
];
const started = process.hrtime.bigint();
const child = await runCliStdio(childArgs, messages.map((message) => JSON.stringify(message)).join('\n'), {
- env: fixedTimestamp ? { ...process.env, OAF_FIXED_NOW: fixedTimestamp } : process.env
+ env: fixedTimestamp ? { ...process.env, OAF_FIXED_NOW: fixedTimestamp } : process.env,
+ auxiliaryInput: contextPack ? JSON.stringify(contextPack) : null
});
const durationMs = Math.max(0, Math.round(Number(process.hrtime.bigint() - started) / 1_000_000));
if (child.code !== 0) {
@@ -8606,6 +10009,15 @@ async function buildContextHandoffReport(values, { objective, step }) {
const tokenBudget = parseIntegerOption(values, '--token-budget', parseIntegerOption(values, '--budget', 4096));
const generatedAt = fixedNow();
const { changedLocators, detection } = await resolveChangedLocators(values, { root, workspaceId });
+ const sourceGraphPreview = await currentNativeSourceGraphPreviewIfReady({
+ root,
+ workspaceId,
+ query: `${objective} ${step}`,
+ changedLocators,
+ limit: 12,
+ sampleLimit: 1,
+ clock: () => generatedAt
+ });
const pack = await buildContextPack({
root,
harnesses: sourceHarnesses,
@@ -8616,11 +10028,12 @@ async function buildContextHandoffReport(values, { objective, step }) {
step,
targetHarness,
tokenBudget,
+ sourceGraphPreview,
clock: () => generatedAt
});
const usePlan = buildContextPackUsePlan(pack);
assertJsonSchema(contextPackUsePlanSchema, usePlan, 'context-pack handoff use plan');
- const smoke = await buildMcpContextPackSmokeReport(values, { objective, step, fixedTimestamp: generatedAt });
+ const smoke = await buildMcpContextPackSmokeReport(values, { objective, step, fixedTimestamp: generatedAt, contextPack: pack });
const memoryProposalPreflight = await buildMemoryProposalPreflight(values, { root, workspaceId, generatedAt });
const skillCatalog = await buildSkillCatalogPreflight({ root, workspaceId, generatedAt });
const setupClient = contextHandoffSetupClient(targetHarness);
@@ -9162,6 +10575,15 @@ async function buildContextPackMeasurementReport(values, { objective, step }) {
const { changedLocators, detection } = await resolveChangedLocators(values, { root, workspaceId });
const largeContext = buildLargeContextMeasurement({ values, changedLocators, detection });
const started = process.hrtime.bigint();
+ const sourceGraphPreview = await currentNativeSourceGraphPreviewIfReady({
+ root,
+ workspaceId,
+ query: `${objective} ${step}`,
+ changedLocators,
+ limit: 12,
+ sampleLimit: 1,
+ clock: () => generatedAt
+ });
const pack = await buildContextPack({
root,
harnesses: sourceHarnesses,
@@ -9172,10 +10594,11 @@ async function buildContextPackMeasurementReport(values, { objective, step }) {
step,
targetHarness,
tokenBudget,
+ sourceGraphPreview,
clock: () => generatedAt
});
const buildDurationMs = Math.max(0, Math.round(Number(process.hrtime.bigint() - started) / 1_000_000));
- const smoke = await buildMcpContextPackSmokeReport(values, { objective, step, fixedTimestamp: generatedAt });
+ const smoke = await buildMcpContextPackSmokeReport(values, { objective, step, fixedTimestamp: generatedAt, contextPack: pack });
const usePlan = buildContextPackUsePlan(pack, { generatedAt });
const impactBrief = buildContextPackImpactBrief(pack, {
generatedAt,
@@ -9425,6 +10848,7 @@ function runCliStdio(
input,
{
env = process.env,
+ auxiliaryInput = null,
timeoutMs = MCP_STDIO_CHILD_TIMEOUT_MS,
maxStdoutBytes = MCP_STDIO_CHILD_MAX_STDOUT_BYTES,
maxStderrBytes = MCP_STDIO_CHILD_MAX_STDERR_BYTES
@@ -9434,11 +10858,15 @@ function runCliStdio(
if (inputBytes > MCP_STDIO_MAX_STDIN_BYTES) {
return Promise.reject(new Error(`mcp stdio child input exceeded ${MCP_STDIO_MAX_STDIN_BYTES} bytes`));
}
+ const auxiliaryBytes = auxiliaryInput === null ? 0 : Buffer.byteLength(auxiliaryInput, 'utf8');
+ if (auxiliaryBytes > MCP_CONTEXT_PACK_AUX_MAX_BYTES) {
+ return Promise.reject(new Error(`mcp stdio auxiliary input exceeded ${MCP_CONTEXT_PACK_AUX_MAX_BYTES} bytes`));
+ }
return new Promise((resolve, reject) => {
const child = spawn(process.execPath, nodeArgs, {
cwd: process.cwd(),
env,
- stdio: ['pipe', 'pipe', 'pipe']
+ stdio: auxiliaryInput === null ? ['pipe', 'pipe', 'pipe'] : ['pipe', 'pipe', 'pipe', 'pipe']
});
const stdout = [];
const stderr = [];
@@ -9482,6 +10910,12 @@ function runCliStdio(
child.stdin.on('error', (error) => {
if (!settled) fail(error);
});
+ if (auxiliaryInput !== null) {
+ child.stdio[3].on('error', (error) => {
+ if (!settled) fail(error);
+ });
+ child.stdio[3].end(auxiliaryInput);
+ }
child.on('error', fail);
child.on('close', (code) => {
if (settled) return;
@@ -10092,7 +11526,7 @@ function cleanDecisionObject(value) {
.replace(/[.;:,]+$/u, '')
.trim()
.slice(0, 240);
- if (!object || MCP_PRIVATE_MATERIAL.test(object)) return null;
+ if (!object || mcpContainsPrivateMaterial(object)) return null;
return object;
}
@@ -10145,14 +11579,21 @@ function dedupeMemoryIngestEpisodes(episodes) {
}
async function collectSourceGraphMemoryFacts(root, workspaceId, generatedAt, projectSubject) {
- const preview = await buildSourceGraphPreview({
- root,
- workspaceId,
- query: 'memory context mcp',
- sampleLimit: 12,
- maxFiles: DEFAULT_SOURCE_GRAPH_PREVIEW_MAX_FILES,
- clock: () => generatedAt
- });
+ let preview;
+ try {
+ preview = await buildCurrentNativeSourceGraphPreview({
+ root,
+ workspaceId,
+ query: 'memory context mcp',
+ sampleLimit: 12,
+ clock: () => generatedAt
+ });
+ } catch (error) {
+ // Memory ingestion is useful before a repository has been indexed. It must
+ // not manufacture graph facts or fall back to the retired JS engine.
+ if (isNativeIndexRecoveryRequired(error)) return [];
+ throw error;
+ }
const summary = preview.graph?.summary ?? {};
const facts = [
factTriple(projectSubject, 'source_graph_files', `files_${Math.max(0, Number(summary.fileCount ?? 0))}`),
@@ -10166,6 +11607,28 @@ async function collectSourceGraphMemoryFacts(root, workspaceId, generatedAt, pro
return facts;
}
+function isNativeIndexRecoveryRequired(error) {
+ return [
+ // Read-only memory and handoff operations remain useful before a matching
+ // platform package has been installed. They must report no graph facts,
+ // rather than resurrecting the retired JS engine or failing unrelated
+ // memory work.
+ 'native_platform_package_missing',
+ 'native_platform_unsupported',
+ 'native_engine_unavailable',
+ 'native_engine_checksum_mismatch',
+ 'native_engine_manifest_invalid',
+ 'native_engine_path_invalid',
+ 'native_engine_version_mismatch',
+ 'source_index_build_required',
+ 'source_index_refresh_required',
+ 'source_index_repair_required',
+ 'source_index_migration_required',
+ 'source_index_wrong_repository',
+ 'source_index_schema_newer'
+ ].includes(String(error?.code ?? error?.message ?? ''));
+}
+
function factTriple(subject, predicate, object) {
return `${safeFactToken(subject, 'subject')} ${safeFactToken(predicate, 'predicate')} ${safeFactObjectToken(object, 'object')}.`;
}
@@ -10477,6 +11940,8 @@ async function readHomeFile(home, relativePath) {
}
async function writeHomeFileIfChanged({ home, relativePath, current, nextText, generatedAt, role }) {
+ const latest = await readHomeFile(home, relativePath);
+ if (fingerprintMcpConfigPreimage(latest) !== fingerprintMcpConfigPreimage(current)) throw new Error('home config changed after preflight; retry the command');
if ((current.text ?? '') === nextText) return {
role,
target: `home://${toPosix(relativePath)}`,
@@ -10487,14 +11952,9 @@ async function writeHomeFileIfChanged({ home, relativePath, current, nextText, g
};
const { root, absolute } = await resolveHomePath(home, relativePath);
await assertNoSymlinkAncestors(root, relativePath);
- await mkdir(path.dirname(absolute), { recursive: true });
+ await mkdir(path.dirname(absolute), { recursive: true, mode: 0o700 });
const backupRef = current.exists ? await writeHomeBackup({ home, relativePath, text: current.text, generatedAt }) : null;
- const existing = await lstat(absolute).catch((error) => {
- if (error.code === 'ENOENT') return null;
- throw error;
- });
- if (existing?.isSymbolicLink()) throw new Error(`home config target is a symlink: ${relativePath}`);
- await writeFile(absolute, nextText, 'utf8');
+ await writePrivateFileAtomic(absolute, nextText);
return {
role,
target: `home://${toPosix(relativePath)}`,
@@ -10506,15 +11966,31 @@ async function writeHomeFileIfChanged({ home, relativePath, current, nextText, g
}
async function writeHomeBackup({ home, relativePath, text, generatedAt }) {
- const suffix = `${generatedAt.replace(/[^0-9A-Za-z_-]/gu, '-')}-${createHash('sha256').update(text).digest('hex').slice(0, 8)}`;
+ const suffix = `${generatedAt.replace(/[^0-9A-Za-z_-]/gu, '-')}-${createHash('sha256').update(text).digest('hex').slice(0, 8)}-${randomUUID().slice(0, 8)}`;
const backupRelative = `${relativePath}.oaf-backup-${suffix}`;
const { root, absolute } = await resolveHomePath(home, backupRelative);
await assertNoSymlinkAncestors(root, backupRelative);
- await mkdir(path.dirname(absolute), { recursive: true });
- await writeFile(absolute, text, 'utf8');
+ await mkdir(path.dirname(absolute), { recursive: true, mode: 0o700 });
+ await writePrivateFileAtomic(absolute, text);
return `home://${toPosix(backupRelative)}`;
}
+async function writePrivateFileAtomic(target, text) {
+ const temporary = path.join(path.dirname(target), `.${path.basename(target)}.${process.pid}.${randomUUID()}.tmp`);
+ let handle;
+ try {
+ handle = await open(temporary, 'wx', 0o600);
+ await handle.writeFile(text, 'utf8');
+ await handle.sync();
+ await handle.close();
+ handle = null;
+ await renameFile(temporary, target);
+ } finally {
+ await handle?.close().catch(() => {});
+ await rm(temporary, { force: true }).catch(() => {});
+ }
+}
+
async function resolveHomePath(home, relativePath) {
if (!relativePath || path.isAbsolute(relativePath) || relativePath.includes('..')) throw new Error(`home config path is unsupported: ${relativePath}`);
const root = await realpath(home);
@@ -10738,11 +12214,43 @@ function runNode(nodeArgs, { cwd = PACKAGE_ROOT, env = process.env } = {}) {
const [script, ...rest] = nodeArgs;
const resolvedScript = path.isAbsolute(script) ? script : path.join(PACKAGE_ROOT, script);
const child = spawn(process.execPath, [resolvedScript, ...rest], { stdio: 'inherit', env, cwd });
- child.on('error', reject);
- child.on('exit', (code) => resolve(code ?? 1));
+ const forwardSignal = (signal) => {
+ if (!child.killed) child.kill(signal);
+ };
+ const onSigint = () => forwardSignal('SIGINT');
+ const onSigterm = () => forwardSignal('SIGTERM');
+ const cleanup = () => {
+ process.removeListener('SIGINT', onSigint);
+ process.removeListener('SIGTERM', onSigterm);
+ };
+ process.once('SIGINT', onSigint);
+ process.once('SIGTERM', onSigterm);
+ child.once('error', (error) => {
+ cleanup();
+ reject(error);
+ });
+ child.once('exit', (code, signal) => {
+ cleanup();
+ resolve(code ?? (signal === 'SIGINT' ? 130 : signal === 'SIGTERM' ? 143 : 1));
+ });
});
}
+async function readBoundedFileDescriptor(fd, maxBytes, label) {
+ const stream = createReadStream(null, { fd, autoClose: false });
+ const chunks = [];
+ let total = 0;
+ for await (const chunk of stream) {
+ total += chunk.length;
+ if (total > maxBytes) {
+ stream.destroy();
+ throw new Error(`${label} exceeded ${maxBytes} bytes`);
+ }
+ chunks.push(chunk);
+ }
+ return Buffer.concat(chunks).toString('utf8');
+}
+
function isHelpCommand(value) {
return ['help', '--help', '-h'].includes(value);
}
diff --git a/apps/web/api.js b/apps/web/api.js
new file mode 100644
index 00000000..fbfc9445
--- /dev/null
+++ b/apps/web/api.js
@@ -0,0 +1,54 @@
+export class ApiRequestError extends Error {
+ constructor(message, { status = null, code = '', correlationId = '', issues = [] } = {}) {
+ super(message);
+ this.name = 'ApiRequestError';
+ this.status = status;
+ this.code = code;
+ this.correlationId = correlationId;
+ this.issues = issues;
+ }
+}
+
+export async function requestJson(path, { method = 'GET', body, signal, headers: inputHeaders } = {}) {
+ const headers = new Headers(inputHeaders ?? {});
+ if (body !== undefined && !headers.has('content-type')) headers.set('content-type', 'application/json');
+ if (!['GET', 'HEAD'].includes(method)) {
+ const token = csrfToken();
+ if (token) headers.set('x-csrf-token', token);
+ }
+ const response = await fetch(path, {
+ method,
+ body,
+ signal,
+ headers,
+ credentials: 'same-origin'
+ });
+ const payload = await readPayload(response);
+ if (!response.ok) throw apiError(response, payload);
+ return payload;
+}
+
+export function csrfToken() {
+ return /(?:^|;\s*)oaf_csrf=([^;]+)/u.exec(globalThis.document?.cookie ?? '')?.[1] ?? '';
+}
+
+async function readPayload(response) {
+ return response.clone().json().catch(() => null);
+}
+
+function apiError(response, payload) {
+ const code = payload?.error?.code ?? '';
+ const message = code === 'bootstrap_required'
+ ? 'Local owner setup is required.'
+ : code === 'invalid_credentials'
+ ? 'Username or password is incorrect.'
+ : response.status === 401
+ ? 'Local authentication required.'
+ : payload?.error?.message ?? `Request failed with ${response.status}`;
+ return new ApiRequestError(message, {
+ status: response.status,
+ code,
+ correlationId: payload?.error?.correlationId ?? response.headers.get('x-correlation-id') ?? '',
+ issues: Array.isArray(payload?.error?.issues) ? payload.error.issues : []
+ });
+}
diff --git a/apps/web/app.js b/apps/web/app.js
index d70b77a9..efd54938 100644
--- a/apps/web/app.js
+++ b/apps/web/app.js
@@ -1,8 +1,36 @@
-import { navigationItemsFor, navigationOwner, selectOverviewPrimaryAction } from './shell-model.js';
+import { navigationItemsFor, navigationOwner } from './shell-model.js';
+import { csrfToken, requestJson as api } from './api.js';
+import { buildOrientationModel, selectOrientationGroup } from './orientation-model.js';
+import { bindOrientation, renderOrientation } from './orientation-view.js';
+import {
+ bindSourceMap,
+ buildMapRequest,
+ parseMapUrl,
+ renderSourceMap,
+ serializeMapUrl
+} from './source-map-view.js';
+import {
+ bindMemoryGraph,
+ buildMemoryGraphViewModel,
+ renderMemoryGraphView
+} from './memory-graph-view.js';
+import {
+ buildApiErrorUiModel,
+ escapeHtml as esc,
+ formatDate as date,
+ renderApiErrorPanel,
+ renderApiErrorRecovery,
+ safeErrorToken,
+ shortFingerprint,
+ statePanel,
+ titleize
+} from './ui-primitives.js';
+
+export { buildApiErrorUiModel } from './ui-primitives.js';
export const SHELL_STATES = new Set(['loading','setup','empty','error','denied','stale','partial','success']);
-const OAF_CHECKOUT_COMMAND_PREFIX = 'npm --silent run oaf --';
+const OAF_CHECKOUT_COMMAND_PREFIX = 'recall';
const OAF_COMPATIBILITY_URL = 'https://github.com/rebel0789/Memory-Recall/blob/main/docs/usage/oaf-compatibility.md';
const OAF_URI_COMPATIBILITY_NOTE = 'Legacy oaf:// URIs remain supported compatibility identifiers; normal commands use recall.';
@@ -14,7 +42,7 @@ export const ROUTES = [
{ id:'fabric-map', path:'/fabric-map', label:'Fabric Map', title:'Fabric Map', description:'Visualize local process flow, context assembly, node handoffs, and disabled external boundaries.' },
{ id:'context', path:'/context', label:'Context', title:'Context', description:'Selected and excluded records, budgets, conflicts, assembly, and compiler versions.' },
{ id:'context-pack', path:'/context-pack', label:'Context Pack', title:'Context Pack', description:'Build a safe, token-aware handoff for Codex, Claude Code, Cursor, or a generic agent.' },
- { id:'source-graph', path:'/source-graph', label:'Source Graph', title:'Source Graph', description:'Search symbols, trace calls, and inspect likely diff impact from local JS/TS metadata.' },
+ { id:'source-graph', path:'/source-graph', label:'Source Graph', title:'Source Graph', description:'Search symbols, trace calls, and inspect likely diff impact from the local source index.' },
{ id:'memory', path:'/memory', label:'Memory', title:'Memory', description:'Proposals, active records, supersession, retraction, expiry, and provenance.' },
{ id:'memory-graph', path:'/memory-graph', label:'Graph', title:'Memory Graph', description:'Explore current and historical governed memory relationships from the local SQLite store.' },
{ id:'evidence', path:'/evidence', label:'Evidence', title:'Evidence', description:'Snapshots, observations, citations, staleness, and inferred pattern boundaries.' },
@@ -61,13 +89,19 @@ let memoryIntakeDraft={sourceLocator:'memory/inbox.md',text:''};
let memoryGraph=null;
let memoryGraphError=null;
let memoryGraphOptions={history:false,query:'',entity:'',communities:false};
+let memoryGraphCleanup=()=>{};
let contextSourcePreviewResult=null;
let contextSourcePreviewError=null;
let sourceGraphResult=null;
let sourceGraphError=null;
+let sourceGraphLoading=false;
+let sourceGraphLoadSequence=0;
+let sourceMapCleanup=()=>{};
let harnessSetupResult=null;
let harnessSetupError=null;
let activeFabricNode='context';
+let orientationModel=null;
+let orientationCleanup=()=>{};
export function legacyViewPath(view) {
return legacyViews.get(String(view??'')) ?? '/';
@@ -160,55 +194,6 @@ function gitDetectionUnavailableMessage(reason) {
})[reason] ?? 'Git change detection is unavailable. Retry the local scan.';
}
-const API_ISSUE_HINTS = new Map([
- ['$.body.changedLocators',['Changed files','Use workspace-relative paths under this repository, one per line. Keep the list bounded and review it before building.']],
- ['$.body.userSelectedFiles',['Explicit files','Use workspace-relative paths under this repository. Do not paste file bodies, absolute paths, credentials, or provider URLs.']],
- ['$.body.memoryConfig.memoryPaths',['Memory preflight sources','Use reviewed workspace-relative files only. Do not use absolute paths, URLs, credentials, or generated/local state directories.']],
- ['$.body.client',['Client','Choose a supported local harness client from the menu.']],
- ['$.body.objective',['Objective','Use a plain task summary. Do not include secrets, provider URLs, session tokens, absolute paths, or hidden reasoning.']],
- ['$.body.step',['Step','Use a short current-step label. Do not include secrets, provider URLs, session tokens, absolute paths, or hidden reasoning.']],
- ['$.body.tokenBudget',['Token budget','Use a positive number within the field limit.']],
- ['$.body.sourceLocator',['Source locator','Use a workspace-relative source file such as notes/memory.md.']],
- ['$.body.text',['Memory text','Use simple Fact or Decision lines with safe subject, predicate, and object text.']],
- ['$.body.targetHarness',['Target','Choose Codex, Claude Code, Cursor, or Generic agent.']],
- ['$.body.from',['Source families','Use supported source families only, such as codex, cursor, or claude-code.']],
- ['$.body.workspaceId',['Workspace','Use the current local workspace.']]
-]);
-
-function safeErrorToken(value,fallback,maxLength=120) {
- const text=String(value ?? '').trim();
- if(!text)return fallback;
- if(/(?:\/Users|\/private|\/var\/folders|https?:|file:|token|secret|api[_-]?key|authorization|cookie)/iu.test(text))return fallback;
- const normalized=text.replace(/[^\w$.[\]:-]/gu,'_').slice(0,maxLength);
- if(/(?:\/Users|\/private|\/var\/folders|https?:|file:|token|secret|api[_-]?key|authorization|cookie)/iu.test(normalized))return fallback;
- return normalized;
-}
-
-function apiIssueHint(path,code) {
- const direct=API_ISSUE_HINTS.get(path);
- if(direct)return { label:direct[0], detail:direct[1] };
- if(path.startsWith('$.body.'))return { label:titleize(path.slice('$.body.'.length)), detail:'Review this field and use only supported local values.' };
- return { label:'Request field', detail:'Review the highlighted request field and retry with supported local values.' };
-}
-
-export function buildApiErrorUiModel(errorLike) {
- const error=typeof errorLike==='object' && errorLike ? errorLike : { message:String(errorLike ?? 'Request failed.') };
- const message=String(error.message ?? 'Request failed.');
- const issues=Array.isArray(error.issues) ? error.issues.slice(0,5).map((issue)=>{
- const path=safeErrorToken(issue?.path,'$.body');
- const code=safeErrorToken(issue?.code,'validation_failed',64);
- return { path, code, ...apiIssueHint(path,code) };
- }) : [];
- const correlationId=safeErrorToken(error.correlationId,'',96);
- return {
- message,
- status:Number.isFinite(Number(error.status)) ? Number(error.status) : null,
- code:safeErrorToken(error.code,'',64),
- correlationId,
- issues
- };
-}
-
export const WORKFLOW_STEPS = [
{ id:'collect', label:'Collect', detail:'Read bounded local or caller-supplied sources.' },
{ id:'normalize', label:'Normalize', detail:'Create observation records and retrieval eligibility.' },
@@ -574,7 +559,8 @@ export function buildMemoryCockpitModel(cockpit = null) {
};
}
-export function deliveryChangeLabel(percent) {
+export function deliveryChangeLabel(percent, baselineTokens = null) {
+ if (baselineTokens !== null && !(Number(baselineTokens) > 0)) return 'Not measured';
const value=Math.round(Number(percent) || 0);
if(value>0)return `${value}% reduction`;
if(value<0)return `${Math.abs(value)}% overhead`;
@@ -810,8 +796,8 @@ export function buildHarnessSetupUiModel(report = null) {
serverStatus:safeText(report?.status?.server ?? 'not checked'),
operation:operation ? safeText(operation.summary) : 'No MCP config change needed',
operationKind:safeText(operation?.op ?? 'none'),
- command:report ? `npm run oaf -- harness setup plan --client ${safeText(report.client)} --server oaf --dry-run --format json` : 'npm run oaf -- harness setup plan --client codex --server oaf --dry-run --format json',
- bridgeCommand:report?.desiredServer ? [report.desiredServer.command,...report.desiredServer.args].join(' ') : oafCommand('mcp resources --read-only --stdio'),
+ command:report ? `recall harness setup plan --client ${safeText(report.client)} --server oaf --dry-run --format json` : 'recall harness setup plan --client codex --server oaf --dry-run --format json',
+ bridgeCommand:report?.desiredServer ? publicRecallCommand([report.desiredServer.command,...report.desiredServer.args].join(' ')) : oafCommand('mcp resources --read-only --stdio'),
manualConfigSnippet:report?.manualConfigSnippet ? {
format:safeText(report.manualConfigSnippet.format),
configRef:safeText(report.manualConfigSnippet.configRef),
@@ -856,40 +842,10 @@ function currentRoute() {
return resolveRoute(globalThis.location?.href ?? '/');
}
-function csrfToken() {
- return /(?:^|;\s*)oaf_csrf=([^;]+)/.exec(globalThis.document?.cookie ?? '')?.[1] ?? '';
-}
-
export function shouldLoadProtectedShellData({ bootstrapRequired = false, csrfTokenValue = '' } = {}) {
return bootstrapRequired === false && String(csrfTokenValue ?? '').trim().length > 0;
}
-async function api(path, options = {}) {
- const headers = new Headers(options.headers ?? {});
- if (options.body && !headers.has('content-type')) headers.set('content-type','application/json');
- const token = csrfToken();
- if (token && options.method && !['GET','HEAD'].includes(options.method)) headers.set('x-csrf-token', token);
- const response = await fetch(path, { ...options, headers });
- const payload = await response.clone().json().catch(()=>null);
- if (!response.ok) {
- const code = payload?.error?.code ?? null;
- const message = code === 'bootstrap_required'
- ? 'Local owner setup is required.'
- : code === 'invalid_credentials'
- ? 'Username or password is incorrect.'
- : response.status === 401
- ? 'Local authentication required.'
- : payload?.error?.message ?? `Request failed with ${response.status}`;
- const error = new Error(message);
- error.status = response.status;
- error.code = code;
- error.correlationId = payload?.error?.correlationId ?? response.headers.get('x-correlation-id') ?? null;
- error.issues = Array.isArray(payload?.error?.issues) ? payload.error.issues : [];
- throw error;
- }
- return payload ?? response.json();
-}
-
async function load() {
const root = document.querySelector('#view-root');
root.setAttribute('aria-busy','true');
@@ -908,7 +864,14 @@ async function load() {
return;
}
dashboard = await api(`/api/dashboard?workspaceId=${encodeURIComponent(workspaceId())}`);
- await Promise.all([loadRecallMap(), loadPinnedHandoffStatus(), loadLoopWorkbench(), loadMemoryCockpit(), loadMemoryGraph()]);
+ await Promise.all([
+ loadRecallMap(),
+ loadPinnedHandoffStatus(),
+ loadLoopWorkbench(),
+ loadMemoryCockpit(),
+ loadMemoryGraph(),
+ currentRoute().id==='source-graph' ? loadSourceMap(parseMapUrl(globalThis.location?.href)) : Promise.resolve()
+ ]);
shellState = classifyDashboardState(dashboard);
} catch (error) {
dashboard = { error:{ status:error.status, code:error.code, message:error.message }, metrics:{ runs:0, completed:0, events:0, pendingApprovals:0 }, runs:[], approvals:[], latestRun:null, latestManifest:null };
@@ -944,6 +907,25 @@ async function loadRecallMap() {
}
}
+async function loadSourceMap(state,{refresh=false}={}) {
+ const sequence=++sourceGraphLoadSequence;
+ sourceGraphLoading=true;
+ try{
+ sourceGraphResult=await api('/api/context/graph/preview',{
+ method:'POST',
+ body:JSON.stringify({workspaceId:workspaceId(),...buildMapRequest(state),...(refresh?{refresh:true}:{})})
+ });
+ if(sequence!==sourceGraphLoadSequence)return;
+ sourceGraphError=null;
+ }catch(error){
+ if(sequence!==sourceGraphLoadSequence)return;
+ sourceGraphResult=null;
+ sourceGraphError=error;
+ }finally{
+ if(sequence===sourceGraphLoadSequence)sourceGraphLoading=false;
+ }
+}
+
function recallMapSearchQuery(){return String(new URL(globalThis.location?.href??'http://127.0.0.1/').searchParams.get('query')??'').trim().slice(0,256)}
async function refreshRecallMap(event) {
@@ -1069,6 +1051,12 @@ async function submitMemoryIntake(event) {
}
function render() {
+ orientationCleanup();
+ orientationCleanup=()=>{};
+ sourceMapCleanup();
+ sourceMapCleanup=()=>{};
+ memoryGraphCleanup();
+ memoryGraphCleanup=()=>{};
const route=currentRoute();
const setupScreen = shellState.kind === 'setup' || shellState.kind === 'denied';
const appShell = document.querySelector('.app-shell');
@@ -1084,7 +1072,7 @@ function render() {
: renderRoute(route);
root.querySelectorAll('[data-action=run]').forEach(button=>button.addEventListener('click',runDemo));
root.querySelectorAll('[data-action=reset]').forEach(button=>button.addEventListener('click',resetDemo));
- root.querySelectorAll('[data-action=refresh-recall-map]').forEach(button=>button.addEventListener('click',refreshRecallMap));
+ if(route.id!=='home')root.querySelectorAll('[data-action=refresh-recall-map]').forEach(button=>button.addEventListener('click',refreshRecallMap));
root.querySelectorAll('[data-run-id]').forEach(link=>link.addEventListener('click',showRun));
root.querySelectorAll('[data-step-id],[data-record-id]').forEach(link=>link.addEventListener('click',navigateLocal));
root.querySelector('#auth-form')?.addEventListener('submit',submitAuthForm);
@@ -1093,11 +1081,7 @@ function render() {
root.querySelectorAll('[data-action=detect-git-changes]').forEach(button=>button.addEventListener('click',detectContextPackGitChanges));
root.querySelectorAll('[data-action=refresh-pinned-handoff]').forEach(button=>button.addEventListener('click',refreshPinnedHandoff));
root.querySelectorAll('[data-action=receive-pinned-handoff]').forEach(button=>button.addEventListener('click',receivePinnedHandoff));
- root.querySelector('#source-graph-form')?.addEventListener('submit',submitSourceGraph);
- root.querySelector('#memory-graph-form')?.addEventListener('submit',submitMemoryGraph);
root.querySelector('#memory-intake-form')?.addEventListener('submit',submitMemoryIntake);
- root.querySelector('#memory-graph-history')?.addEventListener('change',toggleMemoryGraphHistory);
- root.querySelector('#memory-graph-communities')?.addEventListener('change',toggleMemoryGraphCommunities);
root.querySelector('#harness-setup-form')?.addEventListener('submit',submitHarnessSetupPlan);
root.querySelectorAll('[data-action=copy-pack]').forEach(button=>button.addEventListener('click',copyContextPack));
root.querySelectorAll('[data-action=copy-receiver-packet]').forEach(button=>button.addEventListener('click',copyPinnedReceiverPacket));
@@ -1112,8 +1096,42 @@ function render() {
root.querySelectorAll('[data-action=preview-pack-setup]').forEach(button=>button.addEventListener('click',previewContextPackSetup));
root.querySelectorAll('[data-action=copy-launch-prompt]').forEach(button=>button.addEventListener('click',copyContextPackLaunchPrompt));
root.querySelectorAll('[data-fabric-node]').forEach(button=>button.addEventListener('click',selectFabricNode));
- if(route.id==='memory-graph')drawMemoryGraphCanvas(root.querySelector('#memory-graph-canvas'),memoryGraph,memoryGraphOptions);
document.querySelectorAll('[data-route]').forEach(link=>link.onclick=navigate);
+ if(route.id==='home')bindCurrentOrientation(root);
+ if(route.id==='source-graph')bindCurrentSourceMap(root);
+ if(route.id==='memory-graph')bindCurrentMemoryGraph(root);
+}
+
+function bindCurrentOrientation(root) {
+ orientationCleanup=bindOrientation(root,{
+ onSelectGroup:(groupId)=>{
+ orientationModel=selectOrientationGroup(orientationModel,groupId);
+ root.innerHTML=renderOrientation(orientationModel);
+ document.querySelectorAll('[data-route]').forEach(link=>link.onclick=navigate);
+ orientationCleanup();
+ bindCurrentOrientation(root);
+ },
+ onRefresh:refreshRecallMap
+ });
+}
+
+function bindCurrentSourceMap(root) {
+ sourceMapCleanup=bindSourceMap(root,{
+ report:sourceGraphResult,
+ onSubmit:submitSourceGraph,
+ onRefresh:refreshSourceGraph,
+ onPage:pageSourceGraph
+ });
+}
+
+function bindCurrentMemoryGraph(root) {
+ const model=buildMemoryGraphViewModel(memoryGraph,memoryGraphOptions,memoryGraphError);
+ memoryGraphCleanup=bindMemoryGraph(root,{
+ model,
+ onSubmit:submitMemoryGraph,
+ onHistoryChange:toggleMemoryGraphHistory,
+ onGroupChange:toggleMemoryGraphCommunities
+ });
}
function renderNav(container, mode) {
@@ -1132,6 +1150,10 @@ function renderRepositoryBar(route) {
document.querySelector('#repository-name').textContent = repository?.name ?? 'Local workspace';
document.querySelector('#repository-branch').textContent = repository?.branch ?? 'Branch unavailable';
document.querySelector('#repository-scan').textContent = recallMap?.generatedAt ? `Scanned ${date(recallMap.generatedAt)}` : 'Not scanned';
+ const boundary=document.querySelector('#repository-boundary');
+ const externalWrites=recallMap?.safeguards?.externalWritesEnabled===true;
+ boundary.textContent=`Local only / External writes ${externalWrites?'on':'off'}`;
+ boundary.dataset.state=externalWrites?'warning':'safe';
const conditionNode = document.querySelector('#repository-condition');
conditionNode.textContent = condition.kind;
conditionNode.dataset.state = condition.kind;
@@ -1220,7 +1242,7 @@ export function buildPinnedHandoffStatusModel(report=null,error=null) {
usePlanFingerprint:currentEntry?.usePlan?.fingerprint ? shortFingerprint(currentEntry.usePlan.fingerprint) : 'unavailable',
sourceChecks,
targetLabel:harnessClientLabel(targetHarness),
- primaryCommand:verified ? {label:'Receive pinned pack',command:`npm run oaf -- context receive --read-only --root . --target ${targetHarness} --format json`} : null,
+ primaryCommand:verified ? {label:'Receive pinned pack',command:`recall context receive --read-only --root . --target ${targetHarness} --format json`} : null,
commands:pinnedHandoffCommands(targetHarness,verified),
facts:[
['Registry', registryExists ? report.registry.fingerprintStatus : 'missing'],
@@ -1239,13 +1261,13 @@ export function canReceivePinnedHandoff(state) {
function pinnedHandoffCommands(targetHarness='codex',includeUsePlan=false) {
const commands=[
- {label:'Receive pinned pack',command:`npm run oaf -- context receive --read-only --root . --target ${targetHarness} --format json`},
- {label:'Receive summary',command:`npm run oaf -- context receive --read-only --root . --target ${targetHarness} --format summary`},
- {label:'Check registry',command:'npm run oaf -- context registry status --read-only --format json'},
- {label:'Read registry',command:'npm run oaf -- mcp resources --read-only --uri oaf://workspace/ws_local/context-pack/registry/current --format json'}
+ {label:'Receive pinned pack',command:`recall context receive --read-only --root . --target ${targetHarness} --format json`},
+ {label:'Receive summary',command:`recall context receive --read-only --root . --target ${targetHarness} --format summary`},
+ {label:'Check registry',command:'recall context registry status --read-only --format json'},
+ {label:'Read registry',command:'recall mcp resources --read-only --uri oaf://workspace/ws_local/context-pack/registry/current --format json'}
];
if(includeUsePlan){
- commands.splice(2,0,{label:'Read pinned use plan',command:'npm run oaf -- mcp resources --read-only --uri oaf://workspace/ws_local/context-pack/use-plan/current --format json'});
+ commands.splice(2,0,{label:'Read pinned use plan',command:'recall mcp resources --read-only --uri oaf://workspace/ws_local/context-pack/use-plan/current --format json'});
}
return commands;
}
@@ -1255,238 +1277,54 @@ function renderRoute(route) {
if (shellState.kind === 'denied') return renderSetupScreen('login', 'Use the local owner account for this workspace.');
if (shellState.kind === 'error') return statePanel('error','Could not load local state', shellState.message, true);
if (route.id === 'home') return renderHome();
- if (route.id === 'runs') return activeRunDetail ? renderRunDetail(activeRunDetail) : renderRuns();
- if (route.id === 'workflows') return renderWorkflows();
- if (route.id === 'loop-workbench') return renderLoopWorkbench();
- if (route.id === 'fabric-map') return renderFabricMap();
- if (route.id === 'context') return renderContext();
+ if (route.id === 'runs') return renderSecondaryRoute(route, activeRunDetail ? renderRunDetail(activeRunDetail) : renderRuns());
+ if (route.id === 'workflows') return renderSecondaryRoute(route, renderWorkflows());
+ if (route.id === 'loop-workbench') return renderSecondaryRoute(route, renderLoopWorkbench());
+ if (route.id === 'fabric-map') return renderSecondaryRoute(route, renderFabricMap());
+ if (route.id === 'context') return renderSecondaryRoute(route, renderContext());
if (route.id === 'context-pack') return renderContextPack();
if (route.id === 'source-graph') return renderSourceGraph();
if (route.id === 'memory') return renderMemory();
- if (route.id === 'memory-graph') return renderMemoryGraph(memoryGraph,memoryGraphOptions,memoryGraphError);
- if (route.id === 'evidence') return renderEvidence();
- if (route.id === 'approvals') return renderApprovals();
- if (route.id === 'content') return renderContentLab();
- if (route.id === 'agents') return renderAgentsTools();
+ if (route.id === 'memory-graph') return renderMemoryGraphView(buildMemoryGraphViewModel(memoryGraph,memoryGraphOptions,memoryGraphError));
+ if (route.id === 'evidence') return renderSecondaryRoute(route, renderEvidence());
+ if (route.id === 'approvals') return renderSecondaryRoute(route, renderApprovals());
+ if (route.id === 'content') return renderSecondaryRoute(route, renderContentLab());
+ if (route.id === 'agents') return renderSecondaryRoute(route, renderAgentsTools());
if (route.id === 'settings') return renderSettings();
return renderHome();
}
+export function renderSecondaryRoute(route, content) {
+ return ``;
+}
+
function renderHome() {
- return renderOverview(buildRecallMapHomeModel({
+ orientationModel=buildOrientationModel({
report: recallMap,
error: recallMapError,
+ loading:!recallMap&&!recallMapError,
gitChanges: recallMapGitChanges,
- pinnedHandoffStatus,
- pinnedHandoffError
- }));
+ handoff:pinnedHandoffStatus,
+ handoffError:pinnedHandoffError,
+ selectedGroupId:orientationModel?.selectedGroupId
+ });
+ return renderOrientation(orientationModel);
}
export function buildRecallMapHomeModel({ report=null, error=null, gitChanges=null, pinnedHandoffStatus=null, pinnedHandoffError=null }={}) {
- if (error) {
- return {
- state:'error',
- error:buildApiErrorUiModel(error),
- title:'Recall Map unavailable',
- copy:'The local API did not return a map. Retry the read-only request or inspect the correlation details below.',
- commands:[]
- };
- }
- if (!report) {
- return {
- state:'loading',
- title:'Loading Recall Map',
- copy:'Reading bounded local source metadata and governed memory summaries.',
- commands:[]
- };
- }
- const sourceGraph=report.support?.sourceGraph ?? {};
- const coverage=sourceGraph.coverage ?? {};
- const architecture=report.architecture ?? {};
- const impact=architecture.impact ?? {};
- const memory=report.memory ?? {};
- const repository=report.repository ?? {
- name:'Local workspace',
- branch:null,
- commitSha:null,
- dirtyCount:0,
- gitStatusAvailable:false,
- reason:'repository_identity_unavailable'
- };
- const entryPoints=Array.isArray(architecture.entryPoints)?architecture.entryPoints:[];
- const hotspots=Array.isArray(architecture.hotspots)?architecture.hotspots:[];
- const changedLocators=Array.isArray(impact.changedLocators)?impact.changedLocators:[];
- const representedChangedLocators=Array.isArray(impact.representedChangedLocators)?impact.representedChangedLocators:[];
- const affectedSymbols=Array.isArray(impact.affectedSymbols)?impact.affectedSymbols:[];
- const detectedChanges=normalizeRecallMapGitChanges(gitChanges);
- const activeFacts=Array.isArray(memory.activeFacts)?memory.activeFacts:[];
- const pendingProposals=Array.isArray(memory.pendingProposals)?memory.pendingProposals:[];
- const handoffStatus=String(pinnedHandoffStatus?.current?.status ?? '');
- const handoffEntryId=pinnedHandoffStatus?.current?.entryId ?? null;
- const handoffEntry=(pinnedHandoffStatus?.entries ?? []).find((entry)=>entry.id===handoffEntryId) ?? null;
- const handoffState=pinnedHandoffError
- ? 'blocked'
- : handoffStatus==='verified'
- ? 'ready'
- : handoffStatus==='stale'||handoffStatus==='review'
- ? 'review'
- : handoffStatus==='tampered'
- ? 'blocked'
- : report.readiness?.handoff?.status==='available'
- ? 'pending'
- : 'blocked';
- const sourceUnavailable=sourceGraph.status==='unavailable'||coverage.status==='unavailable';
- const noArchitecture=entryPoints.length===0&&hotspots.length===0&&changedLocators.length===0&&affectedSymbols.length===0;
- const baseState=sourceUnavailable?'partial':noArchitecture?'empty':'success';
- const state=handoffState==='review'?'stale':baseState;
- const nextCommands=[
- 'recall map --root . --sqlite .local/memory.sqlite --format summary',
- ...(Array.isArray(report.readiness?.nextCommands)?report.readiness.nextCommands:[]),
- report.readiness?.mcp?.command
- ].filter((command,index,all)=>typeof command==='string'&&command.length>0&&all.indexOf(command)===index).slice(0,5);
- return {
- state,
- generatedAt:report.generatedAt ?? null,
- repository,
- index:{
- status:sourceGraph.status ?? 'unavailable',
- kind:sourceGraph.status==='implemented'?'success':'error',
- label:sourceGraph.status==='implemented'?'JS/TS map indexed':'Source graph unavailable',
- copy:sourceGraph.status==='implemented'?'Bounded static metadata only; raw source bodies stay local.':'The local source graph could not be read.'
- },
- coverage:{
- status:coverage.status ?? 'unavailable',
- kind:coverage.status==='unavailable'?'error':'partial',
- label:`${Number(coverage.analyzedFileCount??0)} / ${Number(coverage.maxFiles??0)} files`,
- diagnosticCount:Number(coverage.diagnosticCount??0),
- reasonCodes:Array.isArray(coverage.reasonCodes)?coverage.reasonCodes:[]
- },
- entryPoints,
- hotspots,
- impact:{
- changedLocators,
- representedChangedLocators,
- affectedSymbols,
- changedCount:changedLocators.length,
- representedCount:representedChangedLocators.length,
- affectedCount:affectedSymbols.length,
- totalChangedCount:detectedChanges.status==='available'?detectedChanges.totalCount:changedLocators.length,
- omittedChangedCount:detectedChanges.status==='available'?detectedChanges.omittedCount:0,
- truncated:detectedChanges.truncated,
- detectionStatus:detectedChanges.status,
- detectionReason:detectedChanges.reason,
- detectionMessage:detectedChanges.message,
- repositoryDirtyCount:Number(repository.dirtyCount??0),
- depth:Number(impact.depth??0)
- },
- memory:{
- status:memory.status ?? 'unavailable',
- kind:memory.status==='available'?(Number(memory.staleFactCount??0)>0?'stale':'success'):'error',
- activeCount:activeFacts.length,
- pendingCount:pendingProposals.length,
- staleCount:Number(memory.staleFactCount??0),
- unavailableReason:memory.unavailableReason ?? null
- },
- handoff:{
- state:handoffState,
- kind:handoffState==='ready'?'success':handoffState==='review'||handoffState==='pending'?'partial':'error',
- command:report.readiness?.handoff?.command ?? 'recall handoff',
- createdAt:handoffEntry?.createdAt ?? null,
- ageLabel:relativeAge(handoffEntry?.createdAt,pinnedHandoffStatus?.generatedAt??report.generatedAt),
- copy:handoffState==='ready'
- ? 'Pinned handoff is verified for the next coding agent.'
- : handoffState==='review'
- ? 'Pinned sources changed and need review before handoff.'
- : handoffState==='pending'
- ? 'The handoff command is available; no verified pinned packet is active.'
- : 'Handoff verification is unavailable. Review the local registry before sharing context.'
- },
- safeguards:report.safeguards ?? {},
- commands:nextCommands.map((command)=>({ label:recallMapCommandLabel(command), command })),
- recentActivity:[
- ...pendingProposals.slice(0,3).map((proposal)=>({
- kind:'proposal',
- label:'Memory proposed',
- detail:proposal.sourceLocator,
- at:proposal.enqueuedAt
- })),
- ...activeFacts.slice(0,3).map((fact)=>({
- kind:'memory',
- label:'Memory current',
- detail:fact.sourceLocator,
- at:fact.validFrom
- }))
- ].sort((left,right)=>String(right.at).localeCompare(String(left.at))).slice(0,5)
- };
-}
-
-export function renderOverview(model) {
- if (model.state==='loading') return `${statePanel('loading',model.title,model.copy)} `;
- if (model.state==='error') return `${renderApiErrorPanel(model.title,model.error)} `;
- const action=selectOverviewPrimaryAction(model);
- const actionHtml=action?.action
- ? `${esc(action.label)} `
- : action
- ? `${esc(action.label)} `
- : 'No action queued ';
- const stateCopy=model.state==='stale'
- ? statePanel('stale','Source changes need review','Repository evidence changed after the current handoff was pinned. Review the affected sources before sharing context.')
- : model.state==='empty'
- ? statePanel('empty','No JS/TS entry points yet','The map is live, but this workspace did not yield a bounded JS/TS entry point. Inspect supported coverage in Map before broadening the workspace.')
- : model.state==='partial'||model.coverage.status==='partial'
- ? statePanel('partial','Bounded coverage','The bounded scan completed, but the Map only indexes supported JS/TS metadata within its scan limits. Review its coverage notes before treating the repository picture as complete.')
- : '';
- const detectionFailed=model.impact.detectionStatus==='unavailable'||model.impact.detectionStatus==='error';
- const omittedChangeEvidence=model.impact.detectionStatus==='available'&&model.impact.omittedChangedCount>0;
- const changed=model.impact.changedLocators.length
- ? `${model.impact.changedLocators.map((locator)=>`${esc(locator)} `).join('')} ${model.impact.omittedChangedCount?`${model.impact.changedCount} shown · ${model.impact.omittedChangedCount} omitted by safety or scan bounds.
`:''}`
- : detectionFailed
- ? `${model.impact.repositoryDirtyCount>0?`${model.impact.repositoryDirtyCount} changed entr${model.impact.repositoryDirtyCount===1?'y':'ies'}; `:''}file detection unavailable. ${esc(model.impact.detectionMessage)}
Retry scan `
- : omittedChangeEvidence
- ? `0 shown · ${model.impact.omittedChangedCount} omitted by safety or scan bounds.
`
- : model.impact.detectionStatus==='available'
- ? 'No changed files detected.
'
- : 'Changed-file detection has not run.
';
- const attention=[
- model.memory.pendingCount?`${model.memory.pendingCount} pending Review proposed memory `:'',
- model.memory.staleCount?`${model.memory.staleCount} stale Check source changes `:'',
- model.handoff.state==='blocked'?`Handoff blocked Repair registry or pinned artifacts `:'',
- model.handoff.state==='review'?`Handoff needs review Update changed sources `:'',
- detectionFailed?`Change detection unavailable ${esc(model.impact.detectionReason)} `:'',
- omittedChangeEvidence?`${model.impact.omittedChangedCount} change${model.impact.omittedChangedCount===1?'':'s'} omitted Inspect safety and scan bounds `:'',
- model.coverage.status==='partial'||model.coverage.diagnosticCount?`${model.coverage.diagnosticCount?`${model.coverage.diagnosticCount} coverage note${model.coverage.diagnosticCount===1?'':'s'}`:'Bounded coverage'} Inspect supported files and scan scope `:''
- ].filter(Boolean).join('')||'Nothing needs review.
';
- const affected=model.impact.affectedSymbols.length
- ? `${model.impact.affectedSymbols.slice(0,6).map((entry)=>`${esc(entry.label)} ${esc(entry.locator ?? 'locator unavailable')} `).join('')} `
- : 'No focused impact set.
';
- const activity=model.recentActivity.length
- ? `${model.recentActivity.map((item)=>`${esc(item.label)} ${esc(item.detail ?? 'source unavailable')}${esc(item.at?date(item.at):'time unavailable')} `).join('')} `
- : 'No memory activity recorded.
';
- return `
-
- ${esc(model.repository.name)} ${esc(model.repository.branch ?? 'Branch unavailable')} · ${model.repository.dirtyCount} changed · scanned ${esc(model.generatedAt?date(model.generatedAt):'not yet')}
- ${actionHtml}
-
- ${stateCopy}
-
-
-
-
Impact ${model.impact.affectedCount} affected ${affected}
-
State ${esc(model.handoff.state)}
Age ${esc(model.handoff.ageLabel)}
Source check ${esc(model.handoff.copy)}
-
Recent activity ${model.recentActivity.length} ${activity}
-
- `;
+ const model=buildOrientationModel({
+ report,
+ error,
+ loading:!report&&!error,
+ gitChanges,
+ handoff:pinnedHandoffStatus,
+ handoffError:pinnedHandoffError
+ });
+ return model.state==='failure' ? Object.freeze({...model,state:'error'}) : model;
}
-export const renderRecallMapHome=renderOverview;
-
-function recallMapCommandLabel(command) {
- if (command.startsWith('recall map')) return 'Refresh map locally';
- if (command.startsWith('recall handoff')) return 'Create Next-Agent Handoff';
- if (command.includes('mcp inspect')) return 'Inspect read-only MCP';
- if (command.includes('graph stats')) return 'Check source graph';
- return 'Copy command';
-}
+export const renderOverview=renderOrientation;
+export const renderRecallMapHome=renderOrientation;
function renderRuns() {
if (activeRunDetail) return renderRunDetail(activeRunDetail);
@@ -1502,7 +1340,7 @@ function renderRunDetail(data) {
function renderWorkflows() {
const steps=['collect','normalize','analyze-patterns','compile-context','generate-angles','verify-recommendations','local-draft-outcome'];
- return `
Content Intelligence workflow:content-intelligence ${steps.map((step,index)=>`${index+1} ${step} ${workflowStepCopy(step)} `).join('')} Equivalent outline Graph information is presented as an ordered list for keyboard and screen-reader access.
Risk Read-only/local-only outputs
Timeout 5s deterministic steps, 120s model step
Approval Local candidate approval record only `;
+ return `
Content analysis workflow:content-intelligence ${steps.map((step,index)=>`${index+1} ${step} ${workflowStepCopy(step)} `).join('')} Equivalent outline Graph information is presented as an ordered list for keyboard and screen-reader access.
Risk Read-only/local-only outputs
Timeout 5s deterministic steps, 120s model step
Approval Local candidate approval record only `;
}
export function buildLoopWorkbenchModel(report=null,{dashboard=null,error=null}={}) {
@@ -2103,7 +1941,7 @@ function zeroCount(value) {
function contextPackHarnessCommands(pack,usePlan=null,{memoryConfig=null}={}) {
const packCommands=Array.isArray(pack?.handoff?.commands) ? pack.handoff.commands.filter((command)=>typeof command==='string'&&command.trim()) : [];
if(packCommands.length){
- const commands=packCommands.map((command)=>({ label:contextPackCommandLabel(command), command }));
+ const commands=packCommands.map((command)=>({ label:contextPackCommandLabel(command), command:publicRecallCommand(command) }));
insertContextPackReceiveCommand(commands,pack);
const generated=[
{label:'Test local handoff',command:contextPackPreflightCommand(pack,{memoryConfig})},
@@ -2132,18 +1970,18 @@ function contextPackHarnessCommands(pack,usePlan=null,{memoryConfig=null}={}) {
{ label:'Test local handoff', command:contextPackPreflightCommand(pack,{memoryConfig}) },
{ label:'Test handoff summary', command:contextPackPreflightCommand(pack,{memoryConfig,format:'summary'}) },
{ label:'Copy impact command', command:contextPackImpactCommand(pack) },
- { label:'Rebuild from CLI', command:`npm run oaf -- context pack --from ${from} --root . --objective ${objective} --step ${step} --target ${target}${selected}${changed} --dry-run --format markdown` },
- { label:'Pin locally', command:`npm run oaf -- context pack --from ${from} --root . --objective ${objective} --step ${step} --target ${target}${selected}${changed} --write --pin --out context-packs/CONTEXT_PACK.md --format json` },
- { label:'Verify pin', command:'npm run oaf -- context registry status --read-only --format json' },
+ { label:'Rebuild from CLI', command:`recall context pack --from ${from} --root . --objective ${objective} --step ${step} --target ${target}${selected}${changed} --dry-run --format markdown` },
+ { label:'Pin locally', command:`recall context pack --from ${from} --root . --objective ${objective} --step ${step} --target ${target}${selected}${changed} --write --pin --out context-packs/CONTEXT_PACK.md --format json` },
+ { label:'Verify pin', command:'recall context registry status --read-only --format json' },
{ label:'Receive pinned pack', command:contextPackReceiveCommand(pack) },
{ label:'Receive summary', command:contextPackReceiveSummaryCommand(pack) },
{ label:'Start MCP bridge', command:oafCommand('mcp resources --read-only --stdio') },
- { label:'Preview harness setup', command:`npm run oaf -- harness setup plan --client ${setupClient} --server oaf --dry-run --format json` },
- { label:'Read use plan', command:'npm run oaf -- mcp resources --read-only --uri oaf://workspace/ws_local/context-pack/use-plan/current --format json' },
- { label:'Read registry', command:'npm run oaf -- mcp resources --read-only --uri oaf://workspace/ws_local/context-pack/registry/current --format json' },
- { label:'Read current context pack', command:`npm run oaf -- mcp resources --read-only --context-pack --from ${from} --root . --objective ${objective} --step ${step} --target ${target}${selected}${changed} --uri oaf://workspace/ws_local/context-pack/current --format json` },
- { label:'Read MCP resources', command:'npm run oaf -- mcp resources --read-only --format json' },
- { label:'Read latest handoff', command:'npm run oaf -- mcp resources --read-only --uri oaf://workspace/ws_local/handoff/latest --format json' }
+ { label:'Preview harness setup', command:`recall harness setup plan --client ${setupClient} --server oaf --dry-run --format json` },
+ { label:'Read use plan', command:'recall mcp resources --read-only --uri oaf://workspace/ws_local/context-pack/use-plan/current --format json' },
+ { label:'Read registry', command:'recall mcp resources --read-only --uri oaf://workspace/ws_local/context-pack/registry/current --format json' },
+ { label:'Read current context pack', command:`recall mcp resources --read-only --context-pack --from ${from} --root . --objective ${objective} --step ${step} --target ${target}${selected}${changed} --uri oaf://workspace/ws_local/context-pack/current --format json` },
+ { label:'Read MCP resources', command:'recall mcp resources --read-only --format json' },
+ { label:'Read latest handoff', command:'recall mcp resources --read-only --uri oaf://workspace/ws_local/handoff/latest --format json' }
];
}
@@ -2195,12 +2033,12 @@ function contextPackPreflightCommand(pack,{memoryConfig=null,format='json'}={})
function contextPackReceiveCommand(pack) {
const target=String(pack?.targetHarness ?? 'generic');
- return `npm run oaf -- context receive --read-only --root . --target ${target} --format json`;
+ return `recall context receive --read-only --root . --target ${target} --format json`;
}
function contextPackReceiveSummaryCommand(pack) {
const target=String(pack?.targetHarness ?? 'generic');
- return `npm run oaf -- context receive --read-only --root . --target ${target} --format summary`;
+ return `recall context receive --read-only --root . --target ${target} --format summary`;
}
function contextPackGeneratedUsePlanCommands(pack,usePlan=null) {
@@ -2215,13 +2053,13 @@ function contextPackGeneratedUsePlanCommands(pack,usePlan=null) {
const changed=(pack?.sourceGraph?.impact?.changedLocators ?? []).map((locator)=>` --changed ${quoteShell(locator.replace(/^workspace:\/\//u,''))}`).join('');
const uri=String(usePlan?.resource?.uri ?? 'oaf://workspace/ws_local/context-pack/use-plan/current');
return [
- { label:'Pin locally', command:`npm run oaf -- context pack --from ${from} --root . --objective ${objective} --step ${step} --target ${target}${selected}${changed} --write --pin --out context-packs/CONTEXT_PACK.md --format json` },
- { label:'Verify pin', command:'npm run oaf -- context registry status --read-only --format json' },
+ { label:'Pin locally', command:`recall context pack --from ${from} --root . --objective ${objective} --step ${step} --target ${target}${selected}${changed} --write --pin --out context-packs/CONTEXT_PACK.md --format json` },
+ { label:'Verify pin', command:'recall context registry status --read-only --format json' },
{ label:'Receive pinned pack', command:contextPackReceiveCommand(pack) },
{ label:'Receive summary', command:contextPackReceiveSummaryCommand(pack) },
{ label:'Start MCP bridge', command:oafCommand('mcp resources --read-only --stdio') },
- { label:'Read registry', command:'npm run oaf -- mcp resources --read-only --uri oaf://workspace/ws_local/context-pack/registry/current --format json' },
- { label:'Read use plan', command:`npm run oaf -- mcp resources --read-only --uri ${uri} --format json` }
+ { label:'Read registry', command:'recall mcp resources --read-only --uri oaf://workspace/ws_local/context-pack/registry/current --format json' },
+ { label:'Read use plan', command:`recall mcp resources --read-only --uri ${uri} --format json` }
];
}
@@ -2252,6 +2090,12 @@ function oafCommand(args) {
return `${OAF_CHECKOUT_COMMAND_PREFIX} ${args}`;
}
+function publicRecallCommand(command) {
+ return String(command ?? '')
+ .replace(/^npm\s+--silent\s+run\s+oaf\s+--\s+/u, 'recall ')
+ .replace(/^npm\s+run\s+oaf\s+--\s+/u, 'recall ');
+}
+
function contextPackSetupClient(pack) {
const target=String(pack?.targetHarness ?? 'codex');
return target === 'cursor' || target === 'claude-code' || target === 'codex' ? target : 'codex';
@@ -2286,11 +2130,12 @@ function contextPackFormDraft() {
const payload=selectContextPackPinPayload({reviewedPayload:contextPackResult?.reviewedPayload ?? contextPackReviewedPayload});
const memoryConfig=normalizeMemoryWorkspaceConfig(contextPackResult?.memoryConfig ?? contextPackMemoryConfig);
const sourceFamilies=String(payload?.from ?? 'codex').split(',').map((item)=>item.trim()).filter(Boolean);
+ const objectiveFromUrl=String(new URL(globalThis.location?.href??'http://127.0.0.1/handoffs').searchParams.get('objective')??'').trim().slice(0,2000);
return {
targetHarness:String(payload?.targetHarness ?? 'codex'),
tokenBudget:String(Number(payload?.tokenBudget ?? 4096)),
sourceFamilies:sourceFamilies.length ? sourceFamilies : ['codex'],
- objective:String(payload?.objective ?? DEFAULT_CONTEXT_PACK_OBJECTIVE),
+ objective:objectiveFromUrl||String(payload?.objective ?? DEFAULT_CONTEXT_PACK_OBJECTIVE),
step:String(payload?.step ?? DEFAULT_CONTEXT_PACK_STEP),
userSelectedFiles:(payload?.userSelectedFiles ?? []).join('\n'),
changedLocators:(payload?.changedLocators ?? []).map((locator)=>String(locator).replace(/^workspace:\/\//u,'')).join('\n'),
@@ -2534,10 +2379,12 @@ function memoryConfigDownloadName() {
}
function renderSourceGraph() {
- const errorPanel=sourceGraphError?renderApiErrorPanel('Source graph preview failed',sourceGraphError):'';
- const query=recallMapSearchQuery();
- const globalResults=renderRepositorySearchState({query,report:recallMap,error:recallMapError});
- return ``;
+ return renderSourceMap({
+ state:parseMapUrl(globalThis.location?.href),
+ report:sourceGraphResult,
+ error:sourceGraphError,
+ loading:sourceGraphLoading
+ });
}
function renderRecallMapSearchResults(report,query){const search=report?.architecture?.search;const results=Array.isArray(search?.results)?search.results:[];return `
Search results ${Number(search?.total??0)} matches for ${esc(query)} ${results.length?`${results.map((item)=>`${esc(item.label)} ${esc(item.locator)} `).join('')} `:'No bounded source-graph matches.
'} `}
@@ -2548,133 +2395,11 @@ export function renderRepositorySearchState({query='',report=null,error=null}={}
return renderRecallMapSearchResults(report,query);
}
-export function renderSourceGraphResult(report) {
- const summary=report.graph?.summary ?? {};
- return ``;
-}
-
-function renderRepoMap(report) {
- const nodes=report.graph?.sampleNodes ?? [];
- const byId=new Map(nodes.map((node)=>[node.id,node]));
- const files=nodes.filter((node)=>node.kind==='file').slice(0,6);
- const symbols=uniqueBy([
- ...(report.graph?.summary?.entryPoints ?? []),
- ...(report.graph?.summary?.hotspots ?? []),
- ...nodes.filter((node)=>node.kind==='symbol')
- ],(item)=>item.locator ?? item.label).slice(0,6);
- const imports=(report.graph?.sampleEdges ?? []).filter((edge)=>edge.kind==='imports').map((edge)=>{
- const from=byId.get(edge.fromNodeId);
- const to=byId.get(edge.toNodeId);
- return from&&to?`${from.label} -> ${to.label}`:'';
- }).filter(Boolean).slice(0,6);
- const readFirst=(report.graph?.summary?.entryPoints ?? []).map((item)=>item.locator).filter(Boolean).slice(0,6);
- return `
Repo Map ${files.length} files ${sourceGraphStartHere(report)}
Read first ${sourceGraphTextList(readFirst)}
Files ${sourceGraphNodeList(files)}
Key symbols ${symbols.length} ${sourceGraphSymbolList(symbols)}
Import neighbors ${imports.length} ${sourceGraphTextList(imports)} `;
-}
-
-function uniqueBy(items,key) {
- const seen=new Set();
- return items.filter((item)=>{const value=key(item);if(!value||seen.has(value))return false;seen.add(value);return true;});
-}
-
-function sourceGraphStartHere(report) {
- const entry=report.graph?.summary?.entryPoints?.[0];
- const changed=report.impact?.representedChangedLocators?.[0] ?? report.impact?.changedLocators?.[0];
- const affected=report.impact?.affectedSymbols?.[0];
- if(!entry && !changed && !affected)return '';
- return `Start here ${entry?`Begin at ${esc(entry.label)} (${esc(entry.locator)}).`:'Use the read-first list below.'}${changed?` Changed impact: ${esc(changed)}${affected?` touches ${esc(affected.name)}`:''}.`:''}
`;
-}
-
-function sourceGraphSymbolList(symbols=[]) {
- if(!symbols.length)return 'No key symbols in the bounded preview.
';
- return `${symbols.map((symbol)=>`${esc(symbol.label)} ${esc(symbol.symbolKind??'symbol')} · ${esc(symbol.locator??`${Number(symbol.total??0)} links`)} `).join('')} `;
-}
-
-function sourceGraphTextList(items=[]) {
- if(!items.length)return 'No bounded preview items.
';
- return `${items.map((item)=>`${esc(item)} `).join('')} `;
-}
-
-function sourceGraphSearchList(results=[]) {
- if(!results.length)return 'No matching graph records.
';
- return `${results.map((item)=>`${esc(item.label)} ${esc(item.kind)} · ${esc(item.locator??'no locator')} · ${Number(item.score??0).toFixed(3)} `).join('')} `;
-}
-
-function sourceGraphNodeList(nodes=[]) {
- if(!nodes.length)return 'No sample nodes.
';
- return `${nodes.map((node)=>`${esc(node.label)} ${esc(node.kind)} · ${esc(node.locator??node.sourceRef??node.id)} `).join('')} `;
-}
-
-function sourceGraphTraceList(paths=[]) {
- if(!paths.length)return 'No trace paths for the selected symbol.
';
- return `${paths.map((path)=>`${esc(path.terminalLabel)} depth ${Number(path.depth??0)} · ${path.nodeIds?.length??0} nodes `).join('')} `;
-}
-
-function sourceGraphImpactList(symbols=[]) {
- if(!symbols.length)return 'No impacted symbols for the supplied locator.
';
- return `${symbols.map((symbol)=>`${esc(symbol.name)} ${esc(symbol.symbolKind)} · ${esc(symbol.locator)} `).join('')} `;
-}
-
-function sourceGraphSafeguards(safeguards={}) {
- return `
Persisted ${safeguards.persisted?'yes':'no'}
Model calls ${Number(safeguards.modelCalls??0)}
Network ${Number(safeguards.networkCalls??0)}
Graph DB ${safeguards.graphDatabaseUsed?'yes':'no'}
Raw bodies ${safeguards.rawBodyIncluded?'included':'excluded'} `;
-}
-
function renderMemory() {
if(memoryCockpitError)return statePanel('error','Memory cockpit unavailable',memoryCockpitError);
return renderMemoryCockpit(memoryCockpit);
}
-export function buildMemoryGraphModel(report = null) {
- if(!report?.graph)return {ready:false,summary:{nodeCount:0,edgeCount:0,communityCount:0},nodes:[],edges:[],focus:null};
- const nodes=Array.isArray(report.graph.nodes)?report.graph.nodes:[];
- const edges=Array.isArray(report.graph.edges)?report.graph.edges:[];
- const summary={nodeCount:nodes.length,edgeCount:edges.length,communityCount:0,...(report.summary??{})};
- return {
- ready:true,
- provider:report.provider??'provider:native:memory:sqlite',
- mode:report.mode??'current',
- generatedAt:report.generatedAt,
- reportFingerprint:report.reportFingerprint,
- communityMethod:report.communityMethod??'label-propagation',
- summary,
- nodes,
- edges,
- focus:report.focus,
- safeguards:report.safeguards??{}
- };
-}
-
-export function renderMemoryGraph(report = null, options = {}, error = null) {
- if(error)return statePanel('error','Memory graph unavailable',error);
- const model=buildMemoryGraphModel(report);
- if(!model.ready)return statePanel('empty','No governed graph loaded','Ingest and approve temporal memory facts, then refresh this local graph view.');
- const query=options.query??'';
- const historyChecked=options.history?' checked':'';
- const communityChecked=options.communities?' checked':'';
- const focus=model.focus?.nodes?.length?model.focus:null;
- const focusList=focus
- ? `${focus.nodes.slice(0,12).map((node)=>`${esc(node.name)} ${esc(node.type)} · degree ${Number(node.degree??0)} · community ${Number(node.community??0)} `).join('')} `
- : 'Click a node or search for an entity to focus its governed neighborhood.
';
- const currentEdges=model.edges.filter((edge)=>edge.current).slice(0,12);
- const staleEdges=model.edges.filter((edge)=>!edge.current).slice(0,12);
- const currentList=currentEdges.length
- ? memoryGraphEdgeList(currentEdges)
- : 'No current graph facts are visible.
';
- const historyList=staleEdges.length
- ? memoryGraphEdgeList(staleEdges)
- : 'No superseded graph edges are visible in this mode.
';
- return `${metric(model.summary.nodeCount,'Nodes',`${model.summary.currentNodeCount??0} current`)}${metric(model.summary.edgeCount,'Edges',`${model.summary.currentEdgeCount??0} current`)}${metric(model.summary.communityCount,'Communities',model.communityMethod)}${metric(model.summary.historyEdgeCount??0,'History edges',model.mode==='history'?'visible':'hidden')}
Governed knowledge graph ${esc(model.mode)} · ${esc(shortFingerprint(model.reportFingerprint))}
${memoryGraphLegend(model.nodes)}
Current facts ${currentList}History facts ${historyList}Focus neighborhood ${focusList}
Provider ${esc(model.provider)}
Generated ${date(model.generatedAt)}
Read-only ${model.safeguards.readOnly?'yes':'no'}
Model calls ${Number(model.safeguards.modelCalls??0)}
Network ${Number(model.safeguards.networkCalls??0)}
External writes ${model.safeguards.externalWritesEnabled?'enabled':'disabled'} `;
-}
-
-function memoryGraphEdgeList(edges=[]) {
- return `${edges.map((edge)=>`${esc(edge.from)} ${esc(edge.predicate)} ${esc(edge.to)} ${edge.current?'Current':'Superseded'} · ${edge.supersededBy?`superseded by ${esc(edge.supersededBy)}`:'current winner'} Valid from ${date(edge.validFrom)} · Valid until ${edge.validUntil?date(edge.validUntil):'open'} · Provenance ${esc(edge.source)} `).join('')} `;
-}
-
-function memoryGraphLegend(nodes=[]) {
- const types=[...new Set(nodes.map((node)=>node.type))].sort();
- if(!types.length)return 'No node types to render.
';
- return types.map((type)=>` ${esc(type)} `).join('');
-}
-
export function renderMemoryIntakePanel(result=null,error=null,draft={sourceLocator:'memory/inbox.md',text:''}) {
const rows=Array.isArray(result?.proposalFacts) && result.proposalFacts.length
? `${result.proposalFacts.map((item)=>`${esc(item.subject)} ${esc(item.predicate)} ${esc(item.object)} ${esc(item.id)} · ${esc(item.status)} · ${esc(item.sourceLocator)} `).join('')} `
@@ -2705,7 +2430,8 @@ export function renderMemoryCockpit(cockpit = null) {
const toolStats=model.mcpStats.byTool.length
? `${model.mcpStats.byTool.map((item)=>`${esc(item.toolName)} · ${item.callCount} ${item.deliveredTokens} delivered · ${item.tokensSaved} saved `).join('')} `
: 'No MCP delivery calls recorded for this workspace yet.
';
- return ``;
+ const deliveryLabel=deliveryChangeLabel(model.savings.percent,model.savings.beforeDeliveryTokens);
+ return ``;
}
function renderEvidence() {
@@ -2743,22 +2469,12 @@ function renderHarnessSetupResult(report) {
}
function renderSettings() {
- return `
Local system Shared tokens ${[['Ink','--ink'],['Paper','--paper'],['Signal','--signal'],['Proof','--proof'],['Caution','--caution'],['Danger','--danger'],['Success','--success']].map(([name,token])=>`
${name}${token}
`).join('')}
Defaults ${localBoundary()} `;
+ return ``;
}
function metric(value,label,copy){return `${Number(value??0)} ${label} ${copy}
`}
function statusChip(kind,label,description){return `${esc(label)} ${esc(description)} `}
function localBoundary(){return `
Residency Local-only
Network Denied by default
Writes External writes disabled
Model Deterministic offline default `}
-function renderApiErrorPanel(heading,error) {
- const model=buildApiErrorUiModel(error);
- return statePanel('error',heading,model.message,false,renderApiErrorRecovery(model));
-}
-function renderApiErrorRecovery(model) {
- const issues=model.issues.length ? `Fix this field ${model.issues.map((issue)=>`${esc(issue.label)} ${esc(issue.detail)} ${esc(issue.path)} · ${esc(issue.code)} `).join('')} ` : '';
- const correlation=model.correlationId ? `Correlation ${esc(model.correlationId)}
` : '';
- return `${issues}${correlation}`;
-}
-function statePanel(kind,heading,copy,button=false,extra=''){return `${esc(heading)} ${esc(copy)}
${extra}${button?'Run local demo Reset demo
':''} `}
export function renderSetupScreen(mode, copy, inputModel=null) {
const model=inputModel ?? buildAuthViewModel({mode,copy,draft:authDraft,error:authError});
const isBootstrap = mode === 'bootstrap';
@@ -2871,10 +2587,11 @@ function keyValueFacts(items){
return `${items.map((item)=>`
${esc(item.key)} ${esc(item.value)} `).join('')} `;
}
-function navigate(event) {
+async function navigate(event) {
event.preventDefault();
activeRunDetail=null;
history.pushState({},'',event.currentTarget.getAttribute('href'));
+ if(currentRoute().id==='source-graph')await loadSourceMap(parseMapUrl(globalThis.location?.href));
render();
document.querySelector('#main').focus({preventScroll:true});
}
@@ -2886,7 +2603,40 @@ function navigateLocal(event) {
document.querySelector('#main').focus({preventScroll:true});
}
-async function submitGlobalSearch(event){event.preventDefault();const input=event.currentTarget.elements.query;const query=String(input?.value??'').trim().slice(0,256);if(!query){input?.focus();return}const params=new URLSearchParams({query});const currentWorkspace=workspaceId();if(currentWorkspace!=='ws_local')params.set('workspaceId',currentWorkspace);history.pushState({},'',`/map?${params.toString()}`);document.querySelector('#live-status').textContent='Searching bounded repository metadata.';await loadRecallMap();render();document.querySelector('#main').focus({preventScroll:true});document.querySelector('#live-status').textContent=recallMapError?`Repository search failed. ${buildApiErrorUiModel(recallMapError).message}`:'Repository search loaded.'}
+const COMMAND_TARGETS=Object.freeze({
+ explain:(value)=>`/map?query=${encodeURIComponent(value)}`,
+ trace:(value)=>`/map?query=${encodeURIComponent(value)}&start=${encodeURIComponent(value)}`,
+ impact:(value)=>`/map?query=${encodeURIComponent(value)}&changed=${encodeURIComponent(value)}`,
+ handoff:(value)=>`/handoffs?objective=${encodeURIComponent(value)}`
+});
+
+async function submitGlobalSearch(event){
+ event.preventDefault();
+ const input=event.currentTarget.elements.query;
+ const query=String(input?.value??'').trim().slice(0,256);
+ if(!query){
+ input?.focus();
+ document.querySelector('#live-status').textContent='Enter a file, symbol, concept, or path.';
+ return;
+ }
+ const intent=String(event.currentTarget.elements.intent?.value??'explain');
+ const target=(COMMAND_TARGETS[intent]??COMMAND_TARGETS.explain)(query);
+ const url=new URL(target,'http://127.0.0.1');
+ const currentWorkspace=workspaceId();
+ if(currentWorkspace!=='ws_local')url.searchParams.set('workspaceId',currentWorkspace);
+ history.pushState({},'',`${url.pathname}${url.search}`);
+ if(intent==='handoff'){
+ render();
+ document.querySelector('#main').focus({preventScroll:true});
+ document.querySelector('#live-status').textContent='Handoff objective filled in for review.';
+ return;
+ }
+ document.querySelector('#live-status').textContent='Loading bounded repository metadata.';
+ await loadSourceMap(parseMapUrl(globalThis.location?.href));
+ render();
+ document.querySelector('#main').focus({preventScroll:true});
+ document.querySelector('#live-status').textContent=sourceGraphError?`Map request failed. ${buildApiErrorUiModel(sourceGraphError).message}`:'Map loaded.';
+}
function selectFabricNode(event) {
activeFabricNode=event.currentTarget.dataset.fabricNode ?? 'context';
@@ -3220,66 +2970,49 @@ async function pinCurrentContextPack(event) {
}
}
-async function submitSourceGraph(event){
- event.preventDefault();
- const form=event.currentTarget;
- const button=form.querySelector('button[type=submit]');
- const data=new FormData(form);
- const query=String(data.get('query') ?? '').trim();
- const startName=String(data.get('startName') ?? '').trim();
- const changedLocator=String(data.get('changedLocator') ?? '').trim();
- const limit=Number(data.get('limit') ?? 8);
- const depth=Number(data.get('depth') ?? 2);
- const body={
- workspaceId:workspaceId(),
- limit,
- depth,
- sampleLimit:6
- };
- if(query)body.query=query;
- if(startName)body.startName=startName;
- if(changedLocator)body.changedLocators=[changedLocator];
- button.disabled=true;
- button.textContent='Previewing...';
- document.querySelector('#live-status').textContent='Previewing local source graph.';
- try{
- sourceGraphResult=await api('/api/context/graph/preview',{method:'POST',body:JSON.stringify(body)});
- sourceGraphError=null;
- document.querySelector('#live-status').textContent='Source graph preview ready.';
- render();
- }catch(error){
- document.querySelector('#live-status').textContent=error.message;
- sourceGraphError=error;
- render();
- }finally{
- button.disabled=false;
- button.textContent='Preview repo map';
- }
+async function submitSourceGraph(state){
+ state={...state,offset:0};
+ const target=serializeMapUrl(state);
+ const current=`${globalThis.location?.pathname??''}${globalThis.location?.search??''}`;
+ if(target!==current)history.pushState({},'',target);
+ document.querySelector('#live-status').textContent='Loading the submitted map scope.';
+ await loadSourceMap(state);
+ render();
+ document.querySelector('#live-status').textContent=sourceGraphError?`Map request failed. ${buildApiErrorUiModel(sourceGraphError).message}`:'Map loaded.';
}
-async function submitMemoryGraph(event){
- event.preventDefault();
- const form=event.currentTarget;
- const button=form.querySelector('button[type=submit]');
- const data=new FormData(form);
- const query=String(data.get('query')??'').trim();
- const history=data.get('history')==='on';
- const communities=data.get('communities')==='on';
- button.disabled=true;
- button.textContent='Refreshing...';
+async function pageSourceGraph(offset){
+ const state={...parseMapUrl(globalThis.location?.href),offset};
+ const target=serializeMapUrl(state);
+ history.pushState({},'',target);
+ document.querySelector('#live-status').textContent='Loading the requested query page.';
+ await loadSourceMap(state);
+ render();
+ document.querySelector('#live-status').textContent=sourceGraphError?`Map request failed. ${buildApiErrorUiModel(sourceGraphError).message}`:'Query page loaded.';
+}
+
+async function refreshSourceGraph(){
+ const state=parseMapUrl(globalThis.location?.href);
+ document.querySelector('#live-status').textContent='Refreshing the local source scan.';
+ await loadSourceMap(state,{refresh:true});
+ render();
+ document.querySelector('#live-status').textContent=sourceGraphError?`Map refresh failed. ${buildApiErrorUiModel(sourceGraphError).message}`:'Map refreshed.';
+}
+
+async function submitMemoryGraph(options){
document.querySelector('#live-status').textContent='Refreshing governed memory graph.';
- await loadMemoryGraph({history,query,entity:'',communities});
+ await loadMemoryGraph(options);
render();
document.querySelector('#live-status').textContent=memoryGraphError??'Governed memory graph ready.';
}
-async function toggleMemoryGraphHistory(event){
- await loadMemoryGraph({...memoryGraphOptions,history:event.currentTarget.checked,entity:''});
+async function toggleMemoryGraphHistory(checked){
+ await loadMemoryGraph({...memoryGraphOptions,history:checked,entity:''});
render();
}
-function toggleMemoryGraphCommunities(event){
- memoryGraphOptions={...memoryGraphOptions,communities:event.currentTarget.checked};
+function toggleMemoryGraphCommunities(checked){
+ memoryGraphOptions={...memoryGraphOptions,communities:checked};
render();
}
@@ -3512,12 +3245,7 @@ async function loadRunById(id,{push=true}={}){
}
}
-function esc(value){return String(value??'').replace(/[&<>'"]/g,char=>({'&':'&','<':'<','>':'>',"'":''','"':'"'}[char]))}
-function relativeAge(from,to){const start=Date.parse(String(from??''));const end=Date.parse(String(to??''));if(!Number.isFinite(start)||!Number.isFinite(end)||endpart[0]?.toUpperCase()+part.slice(1)).join(' ')||'Step'}
function labelize(value){return titleize(value).replace(/\bId\b/g,'ID')}
function safeText(value){return String(value??'').replace(/[\r\n\t]+/g,' ').slice(0,160)}
function previewText(value){return safeText(value).slice(0,220)}
@@ -3530,165 +3258,11 @@ function memoryDisplayText(value){const text=String(value??'');return /sk-[A-Za-
function safeKeyValueList(value){if(!value||typeof value!=='object'||Array.isArray(value))return [];return Object.entries(value).filter(([key])=>!/prompt|body|credential|token|secret|path|url|reasoning|sql/i.test(key)).slice(0,8).map(([key,raw])=>({key:labelize(key),value:Array.isArray(raw)?raw.slice(0,4).map(safeText).join(', '):safeText(raw)}))}
function quoteShell(value){return `'${String(value??'').replaceAll("'","'\"'\"'")}'`}
-function memoryGraphNodeColor(type,community=0,useCommunity=false){
- if(useCommunity){
- const palette=['#4cc9a6','#7aa2ff','#f7b955','#e56b8b','#b38cff','#62d3ff','#9bd66f','#f08f4f'];
- return palette[Math.abs(Number(community??0))%palette.length];
- }
- return ({project:'#4cc9a6',provider:'#7aa2ff',port:'#f7b955',decision:'#e56b8b',module:'#b38cff',entity:'#8a96a8'})[type]??'#8a96a8';
-}
-
-function memoryGraphVisiblePayload(report){
- const nodes=Array.isArray(report?.graph?.nodes)?report.graph.nodes:[];
- const edges=Array.isArray(report?.graph?.edges)?report.graph.edges:[];
- const focusNames=new Set((report?.focus?.nodes??[]).map((node)=>node.name));
- if(!focusNames.size)return {nodes,edges};
- return {
- nodes:nodes.filter((node)=>focusNames.has(node.name)),
- edges:edges.filter((edge)=>focusNames.has(edge.from)&&focusNames.has(edge.to))
- };
-}
-
-function layoutMemoryGraph(nodes,edges,width,height){
- const positions=new Map();
- const centerX=width/2;
- const centerY=height/2;
- const radius=Math.max(80,Math.min(width,height)*0.36);
- nodes.forEach((node,index)=>{
- const angle=(Math.PI*2*index)/Math.max(1,nodes.length);
- positions.set(node.id,{x:centerX+Math.cos(angle)*radius,y:centerY+Math.sin(angle)*radius,vx:0,vy:0,node});
- });
- const linked=edges.map((edge)=>({source:positions.get(edge.from),target:positions.get(edge.to),edge})).filter((item)=>item.source&&item.target);
- for(let tick=0;tick<90;tick+=1){
- for(let i=0;inode.name));
- const query=String(options.query??'').toLowerCase();
- ctx.lineCap='round';
- for(const edge of edges){
- const source=positions.get(edge.from);
- const target=positions.get(edge.to);
- if(!source||!target)continue;
- const focused=!focusNodes.size||focusNodes.has(edge.from)||focusNodes.has(edge.to);
- ctx.globalAlpha=edge.current?(focused?0.72:0.32):0.18;
- ctx.strokeStyle=edge.current?'#4f5d75':'#9aa3b2';
- ctx.lineWidth=edge.current?1.4:1;
- ctx.setLineDash(edge.current?[]:[5,5]);
- ctx.beginPath();
- ctx.moveTo(source.x,source.y);
- ctx.lineTo(target.x,target.y);
- ctx.stroke();
- ctx.setLineDash([]);
- const labelX=(source.x+target.x)/2;
- const labelY=(source.y+target.y)/2;
- ctx.globalAlpha=edge.current?0.75:0.32;
- ctx.fillStyle='#c7ced9';
- ctx.font='11px Inter, system-ui, sans-serif';
- ctx.fillText(edge.predicate.slice(0,28),labelX+4,labelY-4);
- }
- ctx.globalAlpha=1;
- for(const node of nodes){
- const point=positions.get(node.id);
- if(!point)continue;
- const matched=query&&node.name.toLowerCase().includes(query);
- const focused=!focusNodes.size||focusNodes.has(node.name);
- const r=Number(node.size??10)+(matched?4:0);
- ctx.globalAlpha=node.current?(focused?1:0.52):0.34;
- ctx.fillStyle=memoryGraphNodeColor(node.type,node.community,options.communities);
- ctx.beginPath();
- ctx.arc(point.x,point.y,r,0,Math.PI*2);
- ctx.fill();
- if(node.governedDecision||matched){
- ctx.strokeStyle=node.governedDecision?'#ff7395':'#f7b955';
- ctx.lineWidth=3;
- ctx.stroke();
- }
- ctx.globalAlpha=node.current?0.92:0.46;
- ctx.fillStyle='#f5f7fb';
- ctx.font='12px Inter, system-ui, sans-serif';
- ctx.fillText(node.name.slice(0,34),point.x+r+5,point.y+4);
- }
- ctx.globalAlpha=1;
- canvas.onclick=async (event)=>{
- const box=canvas.getBoundingClientRect();
- const x=(event.clientX-box.left)*(width/box.width);
- const y=(event.clientY-box.top)*(height/box.height);
- let selected=null;
- let best=Infinity;
- for(const node of nodes){
- const point=positions.get(node.id);
- if(!point)continue;
- const distance=Math.hypot(point.x-x,point.y-y);
- const hit=(Number(node.size??10)+8);
- if(distance{if(event.key==='Escape'){const menu=document.querySelector('#repository-menu[open]');if(menu){menu.open=false;menu.querySelector('summary')?.focus()}}});
- window.addEventListener('popstate',async()=>{activeRunDetail=null;const runId=new URL(location.href).searchParams.get('run');if(currentRoute().id==='runs'&&runId)loadRunById(runId,{push:false});else if(currentRoute().id==='source-graph'){await loadRecallMap();render()}else render()});
+ window.addEventListener('popstate',async()=>{activeRunDetail=null;const runId=new URL(location.href).searchParams.get('run');if(currentRoute().id==='runs'&&runId)loadRunById(runId,{push:false});else if(currentRoute().id==='source-graph'){await loadSourceMap(parseMapUrl(location.href));render()}else render()});
const runId=new URL(location.href).searchParams.get('run');
load().then(()=>{if(runId)loadRunById(runId,{push:false})});
}
diff --git a/apps/web/graph-layout-worker.js b/apps/web/graph-layout-worker.js
new file mode 100644
index 00000000..c196a747
--- /dev/null
+++ b/apps/web/graph-layout-worker.js
@@ -0,0 +1,71 @@
+export function layoutFocusedGraph(nodes = [], edges = [], width = 960, height = 560) {
+ if (nodes.length > 200 || edges.length > 400) throw new Error('graph_layout_bounds_exceeded');
+ const ordered = [...nodes].sort((left, right) => String(left.id).localeCompare(String(right.id)));
+ const adjacency = new Map(ordered.map(({ id }) => [id, new Set()]));
+ for (const { fromNodeId, toNodeId } of edges) {
+ if (!adjacency.has(fromNodeId) || !adjacency.has(toNodeId)) continue;
+ adjacency.get(fromNodeId).add(toNodeId);
+ adjacency.get(toNodeId).add(fromNodeId);
+ }
+
+ const roots = [...ordered].sort((left, right) => (
+ adjacency.get(right.id).size - adjacency.get(left.id).size
+ || String(left.id).localeCompare(String(right.id))
+ ));
+ const layerById = new Map();
+ let componentOffset = 0;
+ for (const root of roots) {
+ if (layerById.has(root.id)) continue;
+ const queue = [{ id: root.id, layer: componentOffset }];
+ let cursor = 0;
+ let componentMax = componentOffset;
+ while (cursor < queue.length) {
+ const current = queue[cursor++];
+ if (layerById.has(current.id)) continue;
+ layerById.set(current.id, current.layer);
+ componentMax = Math.max(componentMax, current.layer);
+ for (const neighbor of [...adjacency.get(current.id)].sort()) {
+ if (!layerById.has(neighbor)) queue.push({ id: neighbor, layer: current.layer + 1 });
+ }
+ }
+ componentOffset = componentMax + 2;
+ }
+
+ const layers = new Map();
+ for (const node of ordered) {
+ const layer = layerById.get(node.id) ?? 0;
+ if (!layers.has(layer)) layers.set(layer, []);
+ layers.get(layer).push(node.id);
+ }
+ const layerIds = [...layers.keys()].sort((left, right) => left - right);
+ const safeWidth = Math.max(160, Number(width) || 960);
+ const safeHeight = Math.max(160, Number(height) || 560);
+ const xStep = (safeWidth - 96) / Math.max(1, layerIds.length - 1);
+ const positions = {};
+ layerIds.forEach((layer, column) => {
+ const ids = layers.get(layer);
+ const yStep = (safeHeight - 96) / Math.max(1, ids.length - 1);
+ ids.forEach((id, row) => {
+ positions[id] = {
+ x: 48 + column * xStep,
+ y: ids.length === 1 ? safeHeight / 2 : 48 + row * yStep
+ };
+ });
+ });
+ return {
+ positions,
+ bounds: { minX: 48, minY: 48, maxX: safeWidth - 48, maxY: safeHeight - 48 }
+ };
+}
+
+if (typeof self !== 'undefined') {
+ self.onmessage = ({ data }) => {
+ const { requestId, nodes = [], edges = [], width = 960, height = 560 } = data ?? {};
+ if (nodes.length > 200 || edges.length > 400) {
+ self.postMessage({ requestId, error: 'graph_layout_bounds_exceeded' });
+ return;
+ }
+ const { positions, bounds } = layoutFocusedGraph(nodes, edges, width, height);
+ self.postMessage({ requestId, positions, bounds });
+ };
+}
diff --git a/apps/web/graph-viewport.js b/apps/web/graph-viewport.js
new file mode 100644
index 00000000..08870501
--- /dev/null
+++ b/apps/web/graph-viewport.js
@@ -0,0 +1,356 @@
+export function createGraphViewport(canvas, outline, inspector, {
+ nodes = [],
+ edges = [],
+ onSelect = () => {},
+ onError = () => {}
+} = {}) {
+ if (!canvas) return inertViewport();
+ if (nodes.length > 200 || edges.length > 400) {
+ onError('graph_layout_bounds_exceeded');
+ return inertViewport();
+ }
+
+ const worker = new Worker(new URL('./graph-layout-worker.js', import.meta.url), { type: 'module' });
+ const controller = new AbortController();
+ const signal = controller.signal;
+ const context = canvas.getContext('2d');
+ const nodeById = new Map(nodes.map((node) => [node.id, node]));
+ let positions = {};
+ let bounds = null;
+ let requestId = 0;
+ let selectedNodeId = outline?.querySelector('[data-node-id][aria-current="true"]')?.dataset.nodeId ?? nodes[0]?.id ?? null;
+ let scale = 1;
+ let panX = 0;
+ let panY = 0;
+ let pointer = null;
+ let hoveredNodeId = null;
+
+ const resizeObserver = typeof ResizeObserver === 'function'
+ ? new ResizeObserver(() => requestLayout())
+ : null;
+ resizeObserver?.observe(canvas);
+ if (!resizeObserver && typeof window !== 'undefined') window.addEventListener('resize', requestLayout, { signal });
+
+ worker.addEventListener('message', ({ data }) => {
+ if (data?.requestId !== requestId) return;
+ if (data.error) {
+ onError(data.error);
+ return;
+ }
+ positions = data.positions ?? {};
+ bounds = data.bounds ?? null;
+ canvas.dataset.layoutReady = 'true';
+ reset();
+ }, { signal });
+ worker.addEventListener('error', () => onError('graph_layout_worker_failed'), { signal });
+
+ outline?.addEventListener('click', (event) => {
+ const button = event.target.closest('[data-node-id]');
+ if (!button) return;
+ select(button.dataset.nodeId, { focusView: true });
+ }, { signal });
+ canvas.addEventListener('pointerdown', (event) => {
+ pointer = { id: event.pointerId, x: event.clientX, y: event.clientY, moved: false };
+ canvas.setPointerCapture?.(event.pointerId);
+ }, { signal });
+ canvas.addEventListener('pointermove', (event) => {
+ if (!pointer || pointer.id !== event.pointerId) {
+ const nextHoveredNodeId = hitTest(event);
+ if (nextHoveredNodeId !== hoveredNodeId) {
+ hoveredNodeId = nextHoveredNodeId;
+ canvas.style.cursor = hoveredNodeId ? 'pointer' : 'grab';
+ draw();
+ }
+ return;
+ }
+ const dx = event.clientX - pointer.x;
+ const dy = event.clientY - pointer.y;
+ if (Math.abs(dx) + Math.abs(dy) > 2) pointer.moved = true;
+ pointer.x = event.clientX;
+ pointer.y = event.clientY;
+ panX += dx;
+ panY += dy;
+ draw();
+ }, { signal });
+ canvas.addEventListener('pointerup', (event) => {
+ if (!pointer || pointer.id !== event.pointerId) return;
+ if (!pointer.moved) {
+ const nodeId = hitTest(event);
+ if (nodeId) select(nodeId);
+ }
+ pointer = null;
+ canvas.releasePointerCapture?.(event.pointerId);
+ }, { signal });
+ canvas.addEventListener('pointercancel', () => { pointer = null; }, { signal });
+ canvas.addEventListener('pointerleave', () => {
+ if (!pointer && hoveredNodeId) {
+ hoveredNodeId = null;
+ canvas.style.cursor = 'grab';
+ draw();
+ }
+ }, { signal });
+ canvas.addEventListener('wheel', (event) => {
+ event.preventDefault();
+ const rect = canvas.getBoundingClientRect();
+ const anchorX = event.clientX - rect.left;
+ const anchorY = event.clientY - rect.top;
+ const nextScale = clamp(scale * Math.exp(-event.deltaY * 0.0015), 0.5, 2.5);
+ const graphX = (anchorX - panX) / scale;
+ const graphY = (anchorY - panY) / scale;
+ scale = nextScale;
+ panX = anchorX - graphX * scale;
+ panY = anchorY - graphY * scale;
+ draw();
+ }, { passive: false, signal });
+
+ const stage = canvas.closest('.source-map-stage');
+ stage?.querySelector('[data-graph-action="fit"]')?.addEventListener('click', () => fit(), { signal });
+ stage?.querySelector('[data-graph-action="reset"]')?.addEventListener('click', () => reset(), { signal });
+
+ if (selectedNodeId) select(selectedNodeId);
+ requestLayout();
+
+ function requestLayout() {
+ const rect = canvas.getBoundingClientRect();
+ const width = Math.max(320, Math.round(rect.width || canvas.width || 960));
+ const height = Math.max(280, Math.round(rect.height || canvas.height || 560));
+ syncCanvas(width, height);
+ requestId += 1;
+ worker.postMessage({ requestId, nodes, edges, width, height });
+ }
+
+ function syncCanvas(width, height) {
+ const ratio = Math.min(2, globalThis.devicePixelRatio || 1);
+ canvas.width = Math.round(width * ratio);
+ canvas.height = Math.round(height * ratio);
+ canvas.dataset.pixelRatio = String(ratio);
+ draw();
+ }
+
+ function select(nodeId, { focusView = false } = {}) {
+ if (!nodeById.has(nodeId)) return;
+ selectedNodeId = nodeId;
+ outline?.querySelectorAll('[data-node-id]').forEach((button) => {
+ if (button.dataset.nodeId === nodeId) button.setAttribute('aria-current', 'true');
+ else button.removeAttribute('aria-current');
+ });
+ if (inspector) inspector.dataset.selectedNodeId = nodeId;
+ onSelect(nodeById.get(nodeId));
+ if (focusView) focus(nodeId);
+ else draw();
+ }
+
+ function focus(nodeId = selectedNodeId) {
+ const point = positions[nodeId];
+ if (!point) return;
+ const { width, height } = cssSize();
+ scale = Math.max(1, scale);
+ panX = width / 2 - point.x * scale;
+ panY = height / 2 - point.y * scale;
+ draw();
+ }
+
+ function fit() {
+ if (selectedNodeId && positions[selectedNodeId]) {
+ scale = 1.35;
+ focus(selectedNodeId);
+ return;
+ }
+ fitBounds();
+ }
+
+ function fitBounds() {
+ if (!bounds) return reset();
+ const { width, height } = cssSize();
+ const graphWidth = Math.max(1, bounds.maxX - bounds.minX);
+ const graphHeight = Math.max(1, bounds.maxY - bounds.minY);
+ scale = clamp(Math.min((width - 48) / graphWidth, (height - 48) / graphHeight), 0.5, 2.5);
+ panX = (width - (bounds.minX + bounds.maxX) * scale) / 2;
+ panY = (height - (bounds.minY + bounds.maxY) * scale) / 2;
+ draw();
+ }
+
+ function reset() {
+ scale = 1;
+ panX = 0;
+ panY = 0;
+ draw();
+ }
+
+ function draw() {
+ if (!context) return;
+ const ratio = Number(canvas.dataset.pixelRatio) || 1;
+ const { width, height } = cssSize();
+ const palette = graphPalette(canvas);
+ context.setTransform(ratio, 0, 0, ratio, 0, 0);
+ context.clearRect(0, 0, width, height);
+ context.fillStyle = palette.panel;
+ context.fillRect(0, 0, width, height);
+ context.save();
+ context.translate(panX, panY);
+ context.scale(scale, scale);
+ context.lineWidth = 1 / scale;
+ context.strokeStyle = palette.rule;
+ for (const edge of edges) {
+ const from = positions[edge.fromNodeId];
+ const to = positions[edge.toNodeId];
+ if (!from || !to) continue;
+ context.beginPath();
+ context.moveTo(from.x, from.y);
+ context.lineTo(to.x, to.y);
+ context.stroke();
+ }
+ context.font = '11px ui-monospace, SFMono-Regular, Menlo, monospace';
+ context.textBaseline = 'middle';
+ const visibleLabelIds = visibleGraphLabelIds({
+ nodes,
+ edges,
+ selectedNodeId,
+ hoveredNodeId,
+ scale,
+ budget: scale < 0.75 ? 5 : scale < 1.35 ? 8 : 14
+ });
+ for (const node of nodes) {
+ const point = positions[node.id];
+ if (!point) continue;
+ const selected = node.id === selectedNodeId;
+ context.fillStyle = selected ? palette.accent : palette.ink;
+ context.beginPath();
+ context.arc(point.x, point.y, selected ? 6 : 4, 0, Math.PI * 2);
+ context.fill();
+ }
+ const placedLabelBoxes = [];
+ const labelNodes = nodes
+ .filter((node) => visibleLabelIds.has(node.id) && positions[node.id])
+ .sort((left, right) => labelPriority(right.id, selectedNodeId, hoveredNodeId) - labelPriority(left.id, selectedNodeId, hoveredNodeId));
+ for (const node of labelNodes) {
+ const point = positions[node.id];
+ const label = String(node.label ?? '').slice(0, 32);
+ const labelWidth = context.measureText(label).width;
+ const placement = graphLabelPlacement({
+ pointX: point.x,
+ labelWidth,
+ scale,
+ panX,
+ viewportWidth: width
+ });
+ const anchorX = point.x + placement.offset;
+ const screenAnchorX = panX + anchorX * scale;
+ const screenY = panY + point.y * scale;
+ const scaledWidth = labelWidth * scale;
+ const box = {
+ left: placement.align === 'right' ? screenAnchorX - scaledWidth : screenAnchorX,
+ right: placement.align === 'right' ? screenAnchorX : screenAnchorX + scaledWidth,
+ top: screenY - 7,
+ bottom: screenY + 7
+ };
+ const forced = node.id === selectedNodeId || node.id === hoveredNodeId;
+ if (!forced && graphLabelBoxesOverlap(box, placedLabelBoxes)) continue;
+ placedLabelBoxes.push(box);
+ context.fillStyle = palette.ink;
+ context.textAlign = placement.align;
+ context.fillText(label, anchorX, point.y);
+ }
+ context.restore();
+ }
+
+ function hitTest(event) {
+ const rect = canvas.getBoundingClientRect();
+ const x = ((event.clientX - rect.left) - panX) / scale;
+ const y = ((event.clientY - rect.top) - panY) / scale;
+ let selected = null;
+ let distance = 12 / scale;
+ for (const node of nodes) {
+ const point = positions[node.id];
+ if (!point) continue;
+ const candidate = Math.hypot(point.x - x, point.y - y);
+ if (candidate <= distance) {
+ selected = node.id;
+ distance = candidate;
+ }
+ }
+ return selected;
+ }
+
+ function cssSize() {
+ const ratio = Number(canvas.dataset.pixelRatio) || 1;
+ return { width: canvas.width / ratio, height: canvas.height / ratio };
+ }
+
+ return {
+ fit,
+ reset,
+ focus,
+ destroy() {
+ controller.abort();
+ resizeObserver?.disconnect();
+ worker.terminate();
+ }
+ };
+}
+
+export function visibleGraphLabelIds({ nodes = [], edges = [], selectedNodeId = null, hoveredNodeId = null, scale = 1, budget = 8 } = {}) {
+ const nodeIds = new Set(nodes.map((node) => node.id));
+ const limit = Math.max(1, Math.min(nodes.length, Math.round(Number(budget) || 8) + (Number(scale) >= 1.75 ? 4 : 0)));
+ const visible = new Set();
+ const add = (nodeId) => {
+ if (visible.size < limit && nodeIds.has(nodeId)) visible.add(nodeId);
+ };
+ add(selectedNodeId);
+ add(hoveredNodeId);
+ for (const anchor of [selectedNodeId, hoveredNodeId]) {
+ if (!anchor) continue;
+ for (const edge of edges) {
+ if (edge.fromNodeId === anchor) add(edge.toNodeId);
+ if (edge.toNodeId === anchor) add(edge.fromNodeId);
+ }
+ }
+ for (const node of nodes) add(node.id);
+ return visible;
+}
+
+export function graphLabelBoxesOverlap(box, placedBoxes = [], gap = 4) {
+ const padding = Math.max(0, Number(gap) || 0);
+ return placedBoxes.some((placed) => !(
+ box.right + padding < placed.left
+ || box.left - padding > placed.right
+ || box.bottom + padding < placed.top
+ || box.top - padding > placed.bottom
+ ));
+}
+
+function labelPriority(nodeId, selectedNodeId, hoveredNodeId) {
+ if (nodeId === selectedNodeId) return 2;
+ if (nodeId === hoveredNodeId) return 1;
+ return 0;
+}
+
+export function graphLabelPlacement({ pointX = 0, labelWidth = 0, scale = 1, panX = 0, viewportWidth = 0 } = {}) {
+ const resolvedScale = Math.max(0.01, Number(scale) || 1);
+ const screenX = Number(panX) + Number(pointX) * resolvedScale;
+ const scaledLabelWidth = Math.max(0, Number(labelWidth) || 0) * resolvedScale;
+ const rightEdge = screenX + (10 * resolvedScale) + scaledLabelWidth;
+ const leftEdge = screenX - (10 * resolvedScale) - scaledLabelWidth;
+ return rightEdge > Number(viewportWidth) - 8 && leftEdge >= 8
+ ? { align: 'right', offset: -10 }
+ : { align: 'left', offset: 10 };
+}
+
+function graphPalette(canvas) {
+ const styles = getComputedStyle(canvas);
+ const token = (name, fallback) => styles.getPropertyValue(name).trim() || fallback;
+ return {
+ panel: token('--color-panel', '#ffffff'),
+ rule: token('--color-rule-strong', '#a7a7a7'),
+ ink: token('--color-ink', '#202020'),
+ accent: token('--color-accent', '#345cff')
+ };
+}
+
+function clamp(value, minimum, maximum) {
+ return Math.max(minimum, Math.min(maximum, value));
+}
+
+function inertViewport() {
+ return { fit() {}, reset() {}, focus() {}, destroy() {} };
+}
diff --git a/apps/web/index.html b/apps/web/index.html
index 571712e3..7886bf2b 100644
--- a/apps/web/index.html
+++ b/apps/web/index.html
@@ -36,14 +36,22 @@
Branch unavailable
Not scanned
+ Local only / External writes off
diff --git a/apps/web/memory-graph-view.js b/apps/web/memory-graph-view.js
new file mode 100644
index 00000000..1ee7c18f
--- /dev/null
+++ b/apps/web/memory-graph-view.js
@@ -0,0 +1,215 @@
+import { createGraphViewport } from './graph-viewport.js';
+import { escapeHtml, formatDate, renderApiErrorPanel, statePanel } from './ui-primitives.js';
+
+export function buildMemoryGraphViewModel(report = null, options = {}, error = null) {
+ const sourceNodes = arrayValue(report?.graph?.nodes);
+ const sourceEdges = arrayValue(report?.graph?.edges);
+ const history = options.history === true;
+ const query = String(options.query ?? '').trim().slice(0, 512);
+ const groupRelated = options.communities === true;
+ const currentNodes = history ? sourceNodes : sourceNodes.filter(({ current }) => current !== false);
+ const currentEdges = history ? sourceEdges : sourceEdges.filter(({ current }) => current !== false);
+ const focusIds = new Set(arrayValue(report?.focus?.nodes).flatMap((node) => [node.id, node.name]).filter(Boolean));
+ const focusedNodes = focusIds.size ? currentNodes.filter((node) => focusIds.has(node.id) || focusIds.has(node.name)) : currentNodes;
+ const { nodes, edges } = filterMemoryGraph(focusedNodes, currentEdges, query);
+ const orderedNodes = groupRelated
+ ? [...nodes].sort((left, right) => nonNegativeInteger(left.community) - nonNegativeInteger(right.community) || String(left.name ?? left.id).localeCompare(String(right.name ?? right.id)))
+ : nodes;
+ const boundedNodes = orderedNodes.length > 200
+ ? [...orderedNodes].sort((left, right) => nonNegativeInteger(right.degree) - nonNegativeInteger(left.degree) || String(left.id).localeCompare(String(right.id))).slice(0, 200)
+ : orderedNodes;
+ const boundedEdges = edges.length > 400
+ ? [...edges].sort((left, right) => Number(right.current !== false) - Number(left.current !== false) || String(left.id).localeCompare(String(right.id))).slice(0, 400)
+ : edges;
+ const nodeIds = new Set(boundedNodes.map(({ id }) => id));
+ const viewportEdges = boundedEdges
+ .filter((edge) => nodeIds.has(edge.from) && nodeIds.has(edge.to))
+ .map((edge) => ({ ...edge, fromNodeId: edge.from, toNodeId: edge.to, kind: edge.predicate }));
+ const summary = {
+ nodeCount: sourceNodes.length,
+ edgeCount: sourceEdges.length,
+ currentNodeCount: sourceNodes.filter(({ current }) => current !== false).length,
+ currentEdgeCount: sourceEdges.filter(({ current }) => current !== false).length,
+ historyNodeCount: sourceNodes.filter(({ current }) => current === false).length,
+ historyEdgeCount: sourceEdges.filter(({ current }) => current === false).length,
+ ...(report?.summary ?? {})
+ };
+ return Object.freeze({
+ ready: Boolean(report?.graph),
+ error,
+ workspaceId: report?.workspaceId ?? 'ws_local',
+ provider: report?.provider ?? 'provider:native:memory:sqlite',
+ generatedAt: report?.generatedAt ?? null,
+ reportFingerprint: report?.reportFingerprint ?? null,
+ safeguards: report?.safeguards ?? {},
+ summary,
+ query,
+ history,
+ groupRelated,
+ nodes: Object.freeze(boundedNodes.map((node) => Object.freeze({ ...node, label: node.name ?? node.id }))),
+ edges: Object.freeze(boundedEdges),
+ viewportEdges: Object.freeze(viewportEdges),
+ omittedNodeCount: Math.max(0, orderedNodes.length - boundedNodes.length),
+ omittedEdgeCount: Math.max(0, edges.length - boundedEdges.length),
+ sourceNodeCount: sourceNodes.length,
+ sourceEdgeCount: sourceEdges.length
+ });
+}
+
+export function renderMemoryGraphView(model) {
+ if (model.error) return `${memoryGraphHeading()}${renderApiErrorPanel('Memory graph unavailable', model.error)}
`;
+ if (!model.ready) return `${memoryGraphHeading()}${statePanel('empty', 'Memory graph not loaded', 'The local memory provider did not return a graph report.')}
`;
+
+ const controls = renderMemoryGraphControls(model);
+ if (model.sourceNodeCount === 0) {
+ return ``;
+ }
+ if (model.nodes.length === 0) {
+ return `${memoryGraphHeading()}${controls}${statePanel('empty', 'No matching memory', 'No governed facts match the current search and history scope.')}${memoryGraphBoundary(model)}
`;
+ }
+
+ const first = model.nodes[0];
+ return ``;
+}
+
+export function bindMemoryGraph(root, {
+ model,
+ onSubmit,
+ onHistoryChange,
+ onGroupChange,
+ onSelectNode
+} = {}) {
+ if (!root) return () => {};
+ const controller = new AbortController();
+ const signal = controller.signal;
+ let viewport = null;
+ root.querySelector('#memory-graph-form')?.addEventListener('submit', (event) => {
+ event.preventDefault();
+ onSubmit?.(memoryGraphOptionsFromForm(event.currentTarget), event);
+ }, { signal });
+ root.querySelector('#memory-graph-history')?.addEventListener('change', (event) => onHistoryChange?.(event.currentTarget.checked, event), { signal });
+ root.querySelector('#memory-graph-communities')?.addEventListener('change', (event) => onGroupChange?.(event.currentTarget.checked, event), { signal });
+
+ const canvas = root.querySelector('#memory-graph-canvas');
+ if (canvas && model) {
+ viewport = createGraphViewport(
+ canvas,
+ root.querySelector('.memory-graph-outline'),
+ root.querySelector('#memory-graph-selection'),
+ {
+ nodes: model.nodes,
+ edges: model.viewportEdges,
+ onSelect: (node) => {
+ const selection = root.querySelector('#memory-graph-selection');
+ if (selection) selection.innerHTML = memoryNodeSelection(node);
+ onSelectNode?.(node);
+ },
+ onError: (code) => {
+ const failure = root.querySelector('[data-memory-graph-error]');
+ if (!failure) return;
+ failure.hidden = false;
+ failure.textContent = code === 'graph_layout_bounds_exceeded'
+ ? 'The visible memory graph exceeds the 200-node or 400-relationship display limit.'
+ : 'Graph layout could not start. Use the governed memory outline.';
+ }
+ }
+ );
+ root.querySelector('[data-memory-graph-action="fit"]')?.addEventListener('click', () => viewport.fit(), { signal });
+ root.querySelector('[data-memory-graph-action="reset"]')?.addEventListener('click', () => viewport.reset(), { signal });
+ }
+ return () => {
+ controller.abort();
+ viewport?.destroy();
+ };
+}
+
+function memoryGraphHeading() {
+ return '';
+}
+
+function renderMemoryGraphControls(model) {
+ return ``;
+}
+
+function memoryGraphOutline(nodes, groupRelated) {
+ let lastCommunity = null;
+ return `${nodes.map((node, index) => {
+ const community = nonNegativeInteger(node.community);
+ const groupLabel = groupRelated && community !== lastCommunity ? `Related group ${community} ` : '';
+ lastCommunity = community;
+ return `${groupLabel}${escapeHtml(node.name ?? node.id)} ${escapeHtml(memoryNodeStatus(node))} / ${escapeHtml(node.type ?? 'entity')} `;
+ }).join('')} `;
+}
+
+function memoryNodeSelection(node) {
+ if (!node) return 'No selection.
';
+ return `
Name ${escapeHtml(node.name ?? node.id)}
Status ${escapeHtml(memoryNodeStatus(node))}
Type ${escapeHtml(node.type ?? 'entity')}
Degree ${nonNegativeInteger(node.degree)} ${node.governedDecision ? '
Governance Decision record ' : ''} `;
+}
+
+function memoryEdgeList(edges) {
+ if (!edges.length) return 'No relationships in the current scope.
';
+ return `${edges.slice(0, 16).map((edge) => `${escapeHtml(edge.from)} ${escapeHtml(edge.predicate)} ${escapeHtml(edge.to)} ${escapeHtml(edge.current === false ? 'Superseded' : 'Current')} Valid from ${escapeHtml(formatDate(edge.validFrom))} / Valid until ${edge.validUntil ? escapeHtml(formatDate(edge.validUntil)) : 'open'} / Provenance ${escapeHtml(edge.source ?? 'unavailable')} `).join('')} `;
+}
+
+function memoryGraphBoundary(model) {
+ const safeguards = model.safeguards ?? {};
+ return `Provider check
Provider ${escapeHtml(model.provider)}
Generated ${escapeHtml(formatDate(model.generatedAt))}
Read-only ${safeguards.readOnly === false ? 'no' : 'yes'}
Model calls ${nonNegativeInteger(safeguards.modelCalls)}
Network calls ${nonNegativeInteger(safeguards.networkCalls)}
External writes ${safeguards.externalWritesEnabled ? 'on' : 'off'} `;
+}
+
+function memoryGraphOptionsFromForm(form) {
+ const data = new FormData(form);
+ return {
+ query: String(data.get('query') ?? '').trim().slice(0, 512),
+ history: data.get('history') === 'on',
+ communities: data.get('communities') === 'on',
+ entity: ''
+ };
+}
+
+function filterMemoryGraph(nodes, edges, query) {
+ if (!query) return { nodes: [...nodes], edges: [...edges] };
+ const needle = query.toLocaleLowerCase();
+ const selectedIds = new Set(nodes.filter((node) => [node.id, node.name, node.type].some((value) => String(value ?? '').toLocaleLowerCase().includes(needle))).map(({ id }) => id));
+ for (const edge of edges) {
+ const edgeMatches = [edge.from, edge.to, edge.predicate, edge.source].some((value) => String(value ?? '').toLocaleLowerCase().includes(needle));
+ if (edgeMatches || selectedIds.has(edge.from) || selectedIds.has(edge.to)) {
+ selectedIds.add(edge.from);
+ selectedIds.add(edge.to);
+ }
+ }
+ return {
+ nodes: nodes.filter(({ id }) => selectedIds.has(id)),
+ edges: edges.filter((edge) => selectedIds.has(edge.from) && selectedIds.has(edge.to))
+ };
+}
+
+function memoryNodeStatus(node) {
+ return node.current === false ? 'Historical' : 'Current';
+}
+
+function arrayValue(value) {
+ return Array.isArray(value) ? value : [];
+}
+
+function nonNegativeInteger(value) {
+ const number = Number(value);
+ return Number.isFinite(number) && number >= 0 ? Math.floor(number) : 0;
+}
diff --git a/apps/web/orientation-model.js b/apps/web/orientation-model.js
new file mode 100644
index 00000000..db2843de
--- /dev/null
+++ b/apps/web/orientation-model.js
@@ -0,0 +1,575 @@
+import { buildApiErrorUiModel } from './ui-primitives.js';
+import { selectOverviewPrimaryAction } from './shell-model.js';
+
+const MAX_GROUPS = 12;
+const MAX_RELATIONS = 20;
+const MAX_START_ITEMS = 3;
+const START_REASON_PRIORITY = new Map([
+ ['application_route', 0],
+ ['package_entry_point', 1],
+ ['changed_central_module', 2],
+ ['executable_command', 3],
+ ['inbound_dependency_hub', 4]
+]);
+const START_REASON_LABEL = new Map([
+ ['application_route', 'application route'],
+ ['package_entry_point', 'package entry point'],
+ ['changed_central_module', 'changed central module'],
+ ['executable_command', 'executable command'],
+ ['inbound_dependency_hub', 'inbound dependency hub']
+]);
+
+export function buildOrientationModel({
+ report = null,
+ loading = false,
+ error = null,
+ gitChanges = null,
+ handoff = null,
+ handoffError = null,
+ selectedGroupId = null,
+ now = null
+} = {}) {
+ if (loading) return frozenState('loading', 'Loading repository map', 'Reading bounded local source metadata.');
+ if (error) return Object.freeze({
+ state: 'failure',
+ error: buildApiErrorUiModel(error),
+ title: 'Repository map unavailable',
+ copy: 'The local API did not return a map. Retry the read-only request.',
+ groups: Object.freeze([]),
+ relations: Object.freeze([]),
+ startHere: Object.freeze([])
+ });
+ if (!report) return frozenState('empty', 'Repository index unavailable', 'Build the local index, then reload this page.');
+
+ const architecture = objectValue(report.architecture);
+ const repository = normalizeRepository(report.repository);
+ const sourceGraph = objectValue(report.support?.sourceGraph);
+ const snapshot = objectValue(sourceGraph.snapshot);
+ const coverage = normalizeCoverage(sourceGraph, snapshot);
+ const rawGroups = arrayValue(architecture.groups).slice(0, MAX_GROUPS).map(normalizeGroup);
+ const groupIds = new Set(rawGroups.map(({ id }) => id));
+ const relations = Object.freeze(arrayValue(architecture.groupRelations)
+ .map(normalizeRelation)
+ .filter((relation) => groupIds.has(relation.sourceGroupId) && groupIds.has(relation.targetGroupId))
+ .sort(compareRelations)
+ .slice(0, MAX_RELATIONS));
+ const groups = Object.freeze(layerOrientationGroups(rawGroups, relations));
+ const impact = normalizeImpact(architecture.impact, gitChanges, repository);
+ const startHere = Object.freeze(rankStartHere(startCandidates(architecture, groups, impact)));
+ const memory = normalizeMemory(report.memory);
+ const handoffModel = normalizeHandoff({ report, handoff, handoffError, now });
+ const selected = chooseSelectedGroup(groups, selectedGroupId);
+ const noArchitecture = groups.length === 0
+ && startHere.length === 0
+ && arrayValue(architecture.hotspots).length === 0
+ && impact.changedLocators.length === 0
+ && impact.affectedSymbols.length === 0;
+ const state = coverage.status === 'stale' || handoffModel.state === 'review'
+ ? 'stale'
+ : noArchitecture
+ ? 'empty'
+ : coverage.status === 'failed'
+ ? 'partial'
+ : 'success';
+ const commands = normalizeCommands(report);
+ const recentActivity = normalizeActivity(report.memory);
+ const nativeIndex = arrayValue(sourceGraph.languages).length > 2;
+ const indexRecovery = sourceIndexRecovery(snapshot.reason);
+ const trust = Object.freeze({
+ memory: Object.freeze({
+ status: memory.pendingCount > 0 ? 'pending' : memory.staleCount > 0 ? 'stale' : memory.status === 'available' ? 'current' : memory.status,
+ activeCount: memory.activeCount,
+ pendingCount: memory.pendingCount,
+ staleCount: memory.staleCount,
+ conflictingCount: memory.conflictingCount
+ }),
+ handoff: Object.freeze({
+ status: handoffModel.status,
+ state: handoffModel.state,
+ createdAt: handoffModel.createdAt,
+ ageLabel: handoffModel.ageLabel
+ }),
+ source: Object.freeze({
+ status: coverage.status,
+ snapshotStatus: coverage.snapshotStatus,
+ reuse: coverage.reuse
+ }),
+ deliveryReduction: measuredDeliveryReduction(report)
+ });
+ const model = {
+ state,
+ generatedAt: safeNullableText(report.generatedAt, 64),
+ repository,
+ coverage,
+ groups,
+ relations,
+ selectedGroupId: selected,
+ startHere,
+ impact,
+ trust,
+ index: Object.freeze({
+ status: safeText(sourceGraph.status || 'unavailable', 32),
+ kind: sourceGraph.status === 'implemented' ? 'success' : 'error',
+ label: sourceGraph.status === 'implemented' ? (nativeIndex ? 'Native index ready' : 'JS/TS map indexed') : 'Source graph unavailable',
+ copy: sourceGraph.status === 'implemented' ? 'Bounded local metadata only; raw source bodies stay local.' : indexRecovery.copy,
+ recoveryCommand: sourceGraph.status === 'implemented' ? null : indexRecovery.command
+ }),
+ entryPoints: Object.freeze(arrayValue(architecture.entryPoints).map(normalizeStartItem)),
+ hotspots: Object.freeze(arrayValue(architecture.hotspots).map(normalizeStartItem)),
+ memory,
+ handoff: handoffModel,
+ safeguards: Object.freeze({ ...objectValue(report.safeguards) }),
+ commands,
+ recentActivity
+ };
+ model.primaryAction = selectOverviewPrimaryAction(model);
+ return Object.freeze(model);
+}
+
+function sourceIndexRecovery(reason) {
+ const code = String(reason ?? '').split(':').at(-1);
+ if (code === 'source_index_build_required') {
+ return Object.freeze({ copy: 'Build the local source index, then refresh this page.', command: 'recall graph index --write --engine native --root . --format summary' });
+ }
+ if (code === 'source_index_refresh_required') {
+ return Object.freeze({ copy: 'Refresh the stale source index, then reload this page.', command: 'recall graph index --refresh --engine native --root . --format summary' });
+ }
+ if (['source_index_repair_required', 'source_index_migration_required', 'source_index_wrong_repository'].includes(code)) {
+ return Object.freeze({ copy: 'Inspect the local source index and apply the exact repair command it reports.', command: 'recall graph index --doctor --engine native --root . --format summary' });
+ }
+ if (code === 'source_index_schema_newer') {
+ return Object.freeze({ copy: 'Use a Memory Recall version compatible with this newer source index.', command: null });
+ }
+ if (['native_platform_package_missing', 'native_engine_unavailable'].includes(code)) {
+ return Object.freeze({ copy: 'Install the matching Memory Recall native package, then reload this page.', command: 'npm install -g memory-recall' });
+ }
+ return Object.freeze({ copy: 'The local source index could not be read. Check it, then reload this page.', command: 'recall graph index --doctor --engine native --root . --format summary' });
+}
+
+export function layerOrientationGroups(inputGroups = [], inputRelations = []) {
+ const groups = inputGroups.slice(0, MAX_GROUPS).map((group) => ({ ...group }));
+ const byId = new Map(groups.map((group) => [group.id, group]));
+ const adjacency = new Map(groups.map((group) => [group.id, []]));
+ for (const relation of inputRelations.slice(0, MAX_RELATIONS)) {
+ if (!byId.has(relation.sourceGroupId) || !byId.has(relation.targetGroupId)) continue;
+ adjacency.get(relation.sourceGroupId).push(relation.targetGroupId);
+ }
+ for (const targets of adjacency.values()) targets.sort(compareGroupIds(byId));
+ const components = stronglyConnectedComponents(groups, adjacency);
+ const componentByGroup = new Map();
+ components.forEach((component, index) => component.forEach((id) => componentByGroup.set(id, index)));
+ const predecessors = new Map(components.map((_, index) => [index, new Set()]));
+ for (const [source, targets] of adjacency) {
+ for (const target of targets) {
+ const sourceComponent = componentByGroup.get(source);
+ const targetComponent = componentByGroup.get(target);
+ if (sourceComponent !== targetComponent) predecessors.get(targetComponent).add(sourceComponent);
+ }
+ }
+ const componentLayers = new Map();
+ const layerFor = (component) => {
+ if (componentLayers.has(component)) return componentLayers.get(component);
+ const previous = [...predecessors.get(component)].map(layerFor);
+ const layer = previous.length ? Math.max(...previous) + 1 : 0;
+ componentLayers.set(component, layer);
+ return layer;
+ };
+ components.forEach((_, index) => layerFor(index));
+ return groups
+ .map((group) => Object.freeze({ ...group, layer: componentLayers.get(componentByGroup.get(group.id)) ?? 0 }))
+ .sort((left, right) => left.layer - right.layer || left.prefix.localeCompare(right.prefix));
+}
+
+export function selectOrientationGroup(model, groupId) {
+ const selected = model?.groups?.some(({ id }) => id === groupId) ? groupId : model?.selectedGroupId ?? null;
+ return Object.freeze({ ...model, selectedGroupId: selected });
+}
+
+export function normalizeOrientationGitChanges(report = null, error = null) {
+ const empty = { changedLocators: [], totalCount: 0, omittedCount: 0, truncated: false };
+ if (error) return { status: 'error', ...empty, reason: safeText(error?.code || 'git_detection_failed', 64), message: safeGitMessage(error?.message, 'Git change detection failed. Retry the local scan.') };
+ if (report?.status === 'error') return { status: 'error', ...empty, reason: safeText(report.reason || 'git_detection_failed', 64), message: safeGitMessage(report.message, 'Git change detection failed. Retry the local scan.') };
+ if (report?.status === 'unavailable') {
+ const reason = safeText(report.reason || 'git_unavailable', 64);
+ return { status: 'unavailable', ...empty, reason, message: gitUnavailableMessage(reason) };
+ }
+ if (report?.status !== 'available') return { status: 'unknown', ...empty, reason: 'not_run', message: 'Git change detection has not run.' };
+ const changedLocators = arrayValue(report.changedLocators).map((value) => safeText(value, 512).replace(/^workspace:\/\//u, '')).filter(Boolean).slice(0, 16);
+ const skippedCount = Math.max(0, finiteNumber(report.skippedCount));
+ const totalBase = finiteNumber(report.totalCount ?? report.totalChangedLocatorCount ?? changedLocators.length);
+ const omittedBase = finiteNumber(report.omittedCount ?? report.omittedChangedLocatorCount ?? 0);
+ return {
+ status: 'available',
+ changedLocators,
+ totalCount: Math.max(changedLocators.length, totalBase + (report.totalCount == null ? skippedCount : 0)),
+ omittedCount: Math.max(0, omittedBase) + (report.omittedCount == null ? skippedCount : 0),
+ truncated: report.truncated === true
+ };
+}
+
+function normalizeRepository(value) {
+ const repository = objectValue(value);
+ return Object.freeze({
+ name: safeText(repository.name || 'Local workspace', 160),
+ branch: safeNullableText(repository.branch, 160),
+ commitSha: safeNullableText(repository.commitSha, 64),
+ dirtyCount: finiteNumber(repository.dirtyCount),
+ gitStatusAvailable: repository.gitStatusAvailable === true,
+ reason: safeNullableText(repository.reason, 64)
+ });
+}
+
+function normalizeCoverage(sourceGraph, snapshot) {
+ const raw = objectValue(sourceGraph.coverage);
+ const rawStatus = safeText(raw.status || 'unavailable', 32);
+ const snapshotStatus = safeText(snapshot.status || (sourceGraph.status === 'implemented' ? 'fresh' : 'unavailable'), 32);
+ const status = snapshotStatus === 'stale' || rawStatus === 'stale'
+ ? 'stale'
+ : sourceGraph.status !== 'implemented' || rawStatus === 'unavailable' || snapshotStatus === 'unavailable'
+ ? 'failed'
+ : rawStatus === 'complete'
+ ? 'complete'
+ : 'partial';
+ return Object.freeze({
+ status,
+ rawStatus,
+ snapshotStatus,
+ reuse: safeText(snapshot.reuse || 'none', 32),
+ builtAt: safeNullableText(snapshot.builtAt, 64),
+ buildDurationMs: snapshot.buildDurationMs == null ? null : finiteNumber(snapshot.buildDurationMs),
+ analyzedFileCount: finiteNumber(raw.analyzedFileCount),
+ maxFiles: finiteNumber(raw.maxFiles),
+ label: `${finiteNumber(raw.analyzedFileCount)} / ${finiteNumber(raw.maxFiles)} files`,
+ diagnosticCount: finiteNumber(raw.diagnosticCount),
+ reasonCodes: Object.freeze(arrayValue(raw.reasonCodes).map((code) => safeText(code, 64)).filter(Boolean).slice(0, 16)),
+ reason: safeNullableText(snapshot.reason, 64),
+ lastValidSnapshotShown: status === 'stale'
+ });
+}
+
+function normalizeGroup(group, index) {
+ const value = objectValue(group);
+ const prefix = safeText(value.prefix || value.label || `group-${index + 1}`, 512);
+ return Object.freeze({
+ id: safeText(value.id || `group_${index}`, 96),
+ label: safeText(value.label || prefix.split('/').at(-1) || prefix, 160),
+ prefix,
+ fileCount: finiteNumber(value.fileCount),
+ symbolCount: finiteNumber(value.symbolCount),
+ changedFileCount: finiteNumber(value.changedFileCount),
+ coverageStatus: safeText(value.coverageStatus || 'complete', 32),
+ entryPoints: Object.freeze(arrayValue(value.entryPoints).slice(0, 2).map(normalizeStartItem))
+ });
+}
+
+function normalizeRelation(relation, index) {
+ const value = objectValue(relation);
+ return Object.freeze({
+ id: safeText(value.id || `relation_${index}`, 96),
+ sourceGroupId: safeText(value.sourceGroupId || value.fromGroupId, 96),
+ targetGroupId: safeText(value.targetGroupId || value.toGroupId, 96),
+ sourcePrefix: safeText(value.sourcePrefix, 512),
+ targetPrefix: safeText(value.targetPrefix, 512),
+ kind: safeText(value.kind || dominantKind(value.edgeKindCounts), 32),
+ count: finiteNumber(value.count),
+ edgeKindCounts: Object.freeze({ ...objectValue(value.edgeKindCounts) })
+ });
+}
+
+function normalizeImpact(rawImpact, rawGitChanges, repository) {
+ const impact = objectValue(rawImpact);
+ const changedLocators = Object.freeze(arrayValue(impact.changedLocators).map((value) => safeText(value, 512)).filter(Boolean).slice(0, 16));
+ const representedChangedLocators = Object.freeze(arrayValue(impact.representedChangedLocators).map((value) => safeText(value, 512)).filter(Boolean).slice(0, 16));
+ const affectedSymbols = Object.freeze(arrayValue(impact.affectedSymbols).map(normalizeStartItem).slice(0, 20));
+ const detected = normalizeOrientationGitChanges(rawGitChanges);
+ const totalChangedCount = detected.status === 'available' ? detected.totalCount : changedLocators.length;
+ const unrepresentedChangedCount = Math.max(0, totalChangedCount - representedChangedLocators.length);
+ const status = detected.status === 'available' && totalChangedCount === 0 && repository.dirtyCount === 0
+ ? 'clean'
+ : detected.status === 'unavailable' || detected.status === 'error'
+ ? 'unknown'
+ : totalChangedCount > 0 || changedLocators.length > 0
+ ? 'changed'
+ : 'not scanned';
+ return Object.freeze({
+ status,
+ label: status === 'clean' ? 'No local changes detected' : status === 'changed' ? `${totalChangedCount} local change${totalChangedCount === 1 ? '' : 's'}` : status === 'unknown' ? 'Local change detection unavailable' : 'Local changes not scanned',
+ changedLocators,
+ representedChangedLocators,
+ affectedSymbols,
+ changedCount: changedLocators.length,
+ representedCount: representedChangedLocators.length,
+ unrepresentedChangedCount,
+ affectedCount: affectedSymbols.length,
+ totalChangedCount,
+ omittedChangedCount: detected.status === 'available' ? detected.omittedCount : 0,
+ truncated: detected.truncated === true,
+ detectionStatus: detected.status,
+ detectionReason: detected.reason,
+ detectionMessage: detected.message,
+ repositoryDirtyCount: repository.dirtyCount,
+ depth: finiteNumber(impact.depth)
+ });
+}
+
+function normalizeMemory(rawMemory) {
+ const memory = objectValue(rawMemory);
+ const activeFacts = Object.freeze(arrayValue(memory.activeFacts).slice(0, 20));
+ const pendingProposals = Object.freeze(arrayValue(memory.pendingProposals).slice(0, 20));
+ const staleCount = finiteNumber(memory.staleFactCount);
+ return Object.freeze({
+ status: safeText(memory.status || 'unavailable', 32),
+ kind: memory.status === 'available' ? (staleCount > 0 ? 'stale' : 'success') : 'error',
+ activeFacts,
+ pendingProposals,
+ activeCount: activeFacts.length,
+ pendingCount: pendingProposals.length,
+ staleCount,
+ conflictingCount: finiteNumber(memory.conflictingFactCount),
+ unavailableReason: safeNullableText(memory.unavailableReason, 64)
+ });
+}
+
+function normalizeHandoff({ report, handoff, handoffError, now }) {
+ const raw = objectValue(handoff);
+ const current = objectValue(raw.current);
+ const status = safeText(raw.status || current.status || '', 32);
+ const entryId = current.entryId ?? raw.entryId ?? null;
+ const entry = arrayValue(raw.entries).find(({ id }) => id === entryId) ?? null;
+ const createdAt = safeNullableText(raw.createdAt ?? entry?.createdAt, 64);
+ const state = handoffError
+ ? 'blocked'
+ : status === 'verified'
+ ? 'ready'
+ : ['stale', 'review'].includes(status)
+ ? 'review'
+ : status === 'tampered'
+ ? 'blocked'
+ : report.readiness?.handoff?.status === 'available'
+ ? 'pending'
+ : 'blocked';
+ const end = now ?? raw.generatedAt ?? report.generatedAt;
+ return Object.freeze({
+ state,
+ status: status || (state === 'pending' ? 'available' : state),
+ kind: state === 'ready' ? 'success' : state === 'review' || state === 'pending' ? 'partial' : 'error',
+ command: safeText(report.readiness?.handoff?.command || 'recall handoff', 256),
+ createdAt,
+ ageLabel: relativeAge(createdAt, end),
+ copy: state === 'ready'
+ ? 'Pinned handoff is verified for the next coding agent.'
+ : state === 'review'
+ ? 'Pinned sources changed and need review before handoff.'
+ : state === 'pending'
+ ? 'The handoff command is available; no verified pinned packet is active.'
+ : 'Handoff verification is unavailable. Review the local registry before sharing context.'
+ });
+}
+
+function startCandidates(architecture, groups, impact) {
+ const changed = new Set(impact.changedLocators.map(fileLocator));
+ const candidates = [
+ ...arrayValue(architecture.entryPoints),
+ ...groups.flatMap(({ entryPoints }) => entryPoints),
+ ...arrayValue(architecture.hotspots).map((item) => ({ ...item, reasonCodes: item.reasonCodes ?? ['inbound_dependency_hub'], score: item.score ?? item.total ?? item.inbound ?? 0 }))
+ ];
+ const seen = new Set();
+ return candidates.map((item) => {
+ const normalized = normalizeStartItem(item);
+ const reasonCode = safeText(arrayValue(item?.reasonCodes)[0] || item?.reasonCode || inferStartReason(normalized, changed), 64);
+ return { ...normalized, reasonCode, score: finiteNumber(item?.score ?? item?.total ?? 0) };
+ }).filter((item) => {
+ const key = `${item.locator}\u0000${item.label}`;
+ if (!item.locator || seen.has(key)) return false;
+ seen.add(key);
+ return true;
+ });
+}
+
+function rankStartHere(items) {
+ const ranked = [...items]
+ .filter(({ locator = '' }) => !/(?:^|\/)(?:test|tests|fixtures|generated|vendor)(?:\/|$)/iu.test(locator.replace(/^workspace:\/\//u, '')))
+ .sort((left, right) => (
+ (START_REASON_PRIORITY.get(left.reasonCode) ?? 99) - (START_REASON_PRIORITY.get(right.reasonCode) ?? 99)
+ || right.score - left.score
+ || left.locator.localeCompare(right.locator)
+ || left.label.localeCompare(right.label)
+ ));
+ const selected = [];
+ const selectedReasons = new Set();
+ for (const item of ranked) {
+ if (selectedReasons.has(item.reasonCode)) continue;
+ selected.push(item);
+ selectedReasons.add(item.reasonCode);
+ if (selected.length === MAX_START_ITEMS) break;
+ }
+ for (const item of ranked) {
+ if (selected.length === MAX_START_ITEMS) break;
+ if (!selected.includes(item)) selected.push(item);
+ }
+ return selected.map((item) => Object.freeze({ ...item, reason: START_REASON_LABEL.get(item.reasonCode) ?? 'ranked source entry point' }));
+}
+
+function normalizeStartItem(value) {
+ const item = objectValue(value);
+ return Object.freeze({
+ nodeId: safeNullableText(item.nodeId, 96),
+ label: safeText(item.label || item.name || 'Unnamed source', 240),
+ qualifiedLabel: safeNullableText(item.qualifiedLabel || item.qualifiedName, 240),
+ locator: safeNullableText(item.locator, 512),
+ symbolKind: safeText(item.symbolKind || item.kind || 'module', 32)
+ });
+}
+
+function inferStartReason(item, changed) {
+ const locator = String(item.locator ?? '').replace(/^workspace:\/\//u, '').split('#', 1)[0];
+ if (/(?:^|\/)route\.(?:[cm]?[jt]sx?)$/iu.test(locator)) return 'application_route';
+ if (/(?:^|\/)(?:index|main)\.(?:[cm]?[jt]sx?)$/iu.test(locator)) return 'package_entry_point';
+ if (changed.has(fileLocator(locator))) return 'changed_central_module';
+ if (/^(?:apps\/cli|bin\/)|\/bin\//u.test(locator)) return 'executable_command';
+ return 'inbound_dependency_hub';
+}
+
+function stronglyConnectedComponents(groups, adjacency) {
+ let nextIndex = 0;
+ const stack = [];
+ const onStack = new Set();
+ const indexById = new Map();
+ const lowById = new Map();
+ const components = [];
+ const visit = (id) => {
+ indexById.set(id, nextIndex);
+ lowById.set(id, nextIndex);
+ nextIndex += 1;
+ stack.push(id);
+ onStack.add(id);
+ for (const target of adjacency.get(id) ?? []) {
+ if (!indexById.has(target)) {
+ visit(target);
+ lowById.set(id, Math.min(lowById.get(id), lowById.get(target)));
+ } else if (onStack.has(target)) {
+ lowById.set(id, Math.min(lowById.get(id), indexById.get(target)));
+ }
+ }
+ if (lowById.get(id) !== indexById.get(id)) return;
+ const component = [];
+ let member;
+ do {
+ member = stack.pop();
+ onStack.delete(member);
+ component.push(member);
+ } while (member !== id);
+ component.sort(compareGroupIds(new Map(groups.map((group) => [group.id, group]))));
+ components.push(component);
+ };
+ [...groups].sort((left, right) => left.prefix.localeCompare(right.prefix)).forEach(({ id }) => {
+ if (!indexById.has(id)) visit(id);
+ });
+ return components;
+}
+
+function normalizeCommands(report) {
+ const commands = [
+ 'recall map --root . --sqlite .local/memory.sqlite --format summary',
+ ...arrayValue(report.readiness?.nextCommands),
+ report.readiness?.mcp?.command
+ ].filter((command, index, all) => typeof command === 'string' && command.length > 0 && all.indexOf(command) === index).slice(0, 5);
+ return Object.freeze(commands.map((command) => Object.freeze({ label: commandLabel(command), command })));
+}
+
+function normalizeActivity(rawMemory) {
+ const memory = objectValue(rawMemory);
+ return Object.freeze([
+ ...arrayValue(memory.pendingProposals).slice(0, 3).map((proposal) => ({ kind: 'proposal', label: 'Memory proposed', detail: safeNullableText(proposal.sourceLocator, 512), at: safeNullableText(proposal.enqueuedAt, 64) })),
+ ...arrayValue(memory.activeFacts).slice(0, 3).map((fact) => ({ kind: 'memory', label: 'Memory current', detail: safeNullableText(fact.sourceLocator, 512), at: safeNullableText(fact.validFrom, 64) }))
+ ].sort((left, right) => String(right.at).localeCompare(String(left.at))).slice(0, 5).map(Object.freeze));
+}
+
+function measuredDeliveryReduction(report) {
+ const measurement = objectValue(report.deliveryMeasurement ?? report.measurements?.delivery ?? report.memory?.deliveryMeasurement);
+ const before = finiteNumber(measurement.beforeDeliveryTokens ?? measurement.baselineTokens);
+ const after = finiteNumber(measurement.afterDeliveryTokens ?? measurement.deliveredTokens);
+ if (measurement.providerBillingClaimed !== false || before <= 0 || after < 0 || after > before) return null;
+ return Object.freeze({ before, after, tokensSaved: before - after, percent: Math.round(((before - after) / before) * 100), providerBillingClaimed: false });
+}
+
+function chooseSelectedGroup(groups, requested) {
+ if (groups.some(({ id }) => id === requested)) return requested;
+ return groups.find(({ changedFileCount }) => changedFileCount > 0)?.id ?? groups[0]?.id ?? null;
+}
+
+function compareRelations(left, right) {
+ return right.count - left.count || left.sourceGroupId.localeCompare(right.sourceGroupId) || left.targetGroupId.localeCompare(right.targetGroupId);
+}
+
+function compareGroupIds(byId) {
+ return (left, right) => (byId.get(left)?.prefix ?? left).localeCompare(byId.get(right)?.prefix ?? right);
+}
+
+function dominantKind(counts) {
+ return Object.entries(objectValue(counts)).sort((left, right) => finiteNumber(right[1]) - finiteNumber(left[1]) || left[0].localeCompare(right[0]))[0]?.[0] ?? 'imports';
+}
+
+function commandLabel(command) {
+ if (command.startsWith('recall map')) return 'Refresh map locally';
+ if (command.startsWith('recall handoff')) return 'Create handoff';
+ if (command.includes('mcp inspect')) return 'Inspect read-only MCP';
+ if (command.includes('graph stats')) return 'Check source graph';
+ return 'Copy command';
+}
+
+function relativeAge(from, to) {
+ const start = Date.parse(String(from ?? ''));
+ const end = Date.parse(String(to ?? ''));
+ if (!Number.isFinite(start) || !Number.isFinite(end) || end < start) return 'Not pinned';
+ const minutes = Math.floor((end - start) / 60_000);
+ if (minutes < 60) return `${minutes} minute${minutes === 1 ? '' : 's'} old`;
+ const hours = Math.floor(minutes / 60);
+ if (hours < 24) return `${hours} hour${hours === 1 ? '' : 's'} old`;
+ const days = Math.floor(hours / 24);
+ return `${days} day${days === 1 ? '' : 's'} old`;
+}
+
+function fileLocator(locator) {
+ return String(locator ?? '').replace(/^workspace:\/\//u, '').split('#', 1)[0];
+}
+
+function safeGitMessage(value, fallback) {
+ const message = safeText(value, 180);
+ return !message || /(?:\/Users|\/private|\/var\/folders|https?:|file:|token|secret|api[_-]?key|authorization|cookie)/iu.test(message) ? fallback : message;
+}
+
+function gitUnavailableMessage(reason) {
+ return ({
+ not_git_repository: 'Git change detection is unavailable because this workspace is not a Git repository.',
+ git_unavailable: 'Git change detection is unavailable because the local Git executable could not be used.',
+ git_status_failed: 'Git change detection is unavailable because local status could not be read.',
+ git_status_timeout: 'Git change detection is unavailable because local status timed out.'
+ })[reason] ?? 'Git change detection is unavailable. Retry the local scan.';
+}
+
+function frozenState(state, title, copy) {
+ return Object.freeze({ state, title, copy, groups: Object.freeze([]), relations: Object.freeze([]), startHere: Object.freeze([]) });
+}
+
+function arrayValue(value) {
+ return Array.isArray(value) ? value : [];
+}
+
+function objectValue(value) {
+ return value && typeof value === 'object' && !Array.isArray(value) ? value : {};
+}
+
+function safeText(value, maxLength = 240) {
+ return String(value ?? '').replace(/[\u0000-\u001f\u007f]/gu, ' ').trim().slice(0, maxLength);
+}
+
+function safeNullableText(value, maxLength) {
+ const text = safeText(value, maxLength);
+ return text || null;
+}
+
+function finiteNumber(value) {
+ const number = Number(value ?? 0);
+ return Number.isFinite(number) ? Math.max(0, number) : 0;
+}
diff --git a/apps/web/orientation-view.js b/apps/web/orientation-view.js
new file mode 100644
index 00000000..6b1902a8
--- /dev/null
+++ b/apps/web/orientation-view.js
@@ -0,0 +1,130 @@
+import { escapeHtml, formatDate, renderApiErrorPanel, statePanel } from './ui-primitives.js';
+
+export function renderOrientation(model) {
+ if (model.state === 'loading') return orientationState('loading', model.title, model.copy, 'Scan repository');
+ if (model.state === 'failure' || model.state === 'error') {
+ return `${renderApiErrorPanel(model.title, model.error)} `;
+ }
+ if (model.state === 'empty' && !model.repository) return orientationState('empty', model.title, model.copy, 'Scan repository');
+
+ const groups = model.groups ?? [];
+ const selectedGroup = groups.find(({ id }) => id === model.selectedGroupId) ?? groups[0] ?? null;
+ const boardGroups = architectureBoardGroups(groups, selectedGroup?.id);
+ const maxLayer = Math.max(0, ...boardGroups.map(({ layer = 0 }) => layer));
+ const coverageLabel = coverageText(model.coverage);
+ const architecture = groups.length
+ ? `${boardGroups.map((group) => groupButton(group, model.selectedGroupId)).join('')}${renderRelations(model.relations, boardGroups)}
${architectureDisclosure(groups.length, boardGroups.length)}${architectureOutline(groups, model.selectedGroupId)}`
+ : renderIndexState(model.index);
+
+ return `
+
+
+
+
+ ${renderStartHere(model.startHere)}
+ ${renderImpact(model.impact)}
+ ${renderTrust(model.trust)}
+
+
+ `;
+}
+
+function renderIndexState(index = {}) {
+ const command = index.recoveryCommand ? `Run ${escapeHtml(index.recoveryCommand)}
` : '';
+ const title = index.recoveryCommand ? (index.label || 'Source index unavailable') : 'No supported groups';
+ return `${statePanel('empty', title, index.copy || 'The current index did not return repository groups inside its bounds.')}${command}Reload index `;
+}
+
+export function bindOrientation(root, { onSelectGroup, onRefresh } = {}) {
+ if (!root) return () => {};
+ const controller = new AbortController();
+ const options = { signal: controller.signal };
+ root.querySelectorAll('[data-group-id]').forEach((button) => button.addEventListener('click', () => onSelectGroup?.(button.dataset.groupId), options));
+ root.querySelectorAll('[data-action="refresh-recall-map"]').forEach((button) => button.addEventListener('click', (event) => onRefresh?.(event), options));
+ return () => controller.abort();
+}
+
+function orientationState(kind, title, copy, actionLabel) {
+ return `Overview ${escapeHtml(actionLabel)} ${statePanel(kind, title, copy)} `;
+}
+
+function groupButton(group, selectedGroupId) {
+ const selected = group.id === selectedGroupId;
+ return `${escapeHtml(group.label)} ${escapeHtml(group.prefix)} ${Number(group.fileCount ?? 0)} files / ${Number(group.symbolCount ?? 0)} symbols${group.changedFileCount ? ` / ${Number(group.changedFileCount)} changed` : ''} `;
+}
+
+function renderRelations(relations = [], groups = []) {
+ const byId = new Map(groups.map((group) => [group.id, group]));
+ if (!relations.length) return '';
+ return `${relations.map((relation) => {
+ const source = byId.get(relation.sourceGroupId);
+ const target = byId.get(relation.targetGroupId);
+ if (!source || !target) return '';
+ return `${escapeHtml(source.label)} to ${escapeHtml(target.label)} ${Number(relation.count ?? 0)} `;
+ }).join('')}
`;
+}
+
+function architectureBoardGroups(groups, selectedGroupId) {
+ const maximum = 6;
+ if (groups.length <= maximum) return groups;
+ const selected = groups.find(({ id }) => id === selectedGroupId);
+ if (!selected || groups.slice(0, maximum).some(({ id }) => id === selected.id)) return groups.slice(0, maximum);
+ return [...groups.slice(0, maximum - 1), selected];
+}
+
+function architectureDisclosure(total, shown) {
+ if (shown >= total) return '';
+ return `Showing ${shown} of ${total} groups. Open the outline for the complete bounded map.
`;
+}
+
+function architectureOutline(groups, selectedGroupId) {
+ return `Repository architecture outline ${groups.map((group) => `${escapeHtml(group.prefix)} Layer ${Number(group.layer ?? 0) + 1}, ${Number(group.fileCount ?? 0)} files `).join('')} `;
+}
+
+function renderStartHere(items = []) {
+ const content = items.length
+ ? `${items.map((item) => `${escapeHtml(item.label)} ${escapeHtml(item.locator)}${escapeHtml(item.reason)} `).join('')} `
+ : 'No ranked entry points in the current bounds.
';
+ return `Start here ${items.length} ranked ${content} `;
+}
+
+function renderImpact(impact = {}) {
+ const affected = impact.affectedSymbols ?? [];
+ const detail = impact.status === 'clean'
+ ? 'No local changes detected.
'
+ : `${escapeHtml(impact.label ?? 'Change state unavailable')}
${affected.length ? `${affected.slice(0, 3).map((item) => `${escapeHtml(item.label)} ${escapeHtml(item.locator)} `).join('')} ` : ''}${impact.unrepresentedChangedCount ? `${Number(impact.unrepresentedChangedCount)} changed file${impact.unrepresentedChangedCount === 1 ? '' : 's'} outside the represented graph. ` : ''}`;
+ return `Current impact ${Number(impact.affectedCount ?? 0)} affected ${detail} `;
+}
+
+function renderTrust(trust = {}) {
+ const memory = trust.memory ?? {};
+ const handoff = trust.handoff ?? {};
+ const source = trust.source ?? {};
+ return `
Source map ${escapeHtml(source.status ?? 'not scanned')}
Memory ${escapeHtml(memory.status ?? 'unavailable')}${memory.pendingCount ? `, ${Number(memory.pendingCount)} pending` : ''}
Handoff ${escapeHtml(handoff.status ?? 'not pinned')} ${trust.deliveryReduction ? `
Measured delivery ${Number(trust.deliveryReduction.percent)}% fewer tokens ` : ''} `;
+}
+
+function coverageText(coverage = {}) {
+ const status = coverage.status === 'failed' ? 'Unavailable' : titleCase(coverage.status || 'not scanned');
+ const built = coverage.builtAt ? ` / built ${formatDate(coverage.builtAt)}` : '';
+ return `${status}${built}`;
+}
+
+function repositoryLine(model) {
+ const repository = model.repository ?? {};
+ return [repository.name, repository.branch, model.coverage?.label].filter(Boolean).join(' / ');
+}
+
+function selectedGroupCopy(group) {
+ return group ? `${group.prefix}. ${group.fileCount} files and ${group.symbolCount} symbols.` : 'Bounded local index structure.';
+}
+
+function titleCase(value) {
+ const text = String(value ?? '').replaceAll('-', ' ');
+ return text ? text[0].toUpperCase() + text.slice(1) : '';
+}
diff --git a/apps/web/shell-model.js b/apps/web/shell-model.js
index 2a7713ee..65915b90 100644
--- a/apps/web/shell-model.js
+++ b/apps/web/shell-model.js
@@ -1,8 +1,8 @@
export const PRIMARY_NAV = Object.freeze([
- { id: 'overview', routeId: 'home', path: '/', label: 'Overview' },
- { id: 'map', routeId: 'source-graph', path: '/map', label: 'Map' },
- { id: 'memory', routeId: 'memory', path: '/memory', label: 'Memory' },
- { id: 'handoffs', routeId: 'context-pack', path: '/handoffs', label: 'Handoffs' },
+ { id: 'overview', routeId: 'home', path: '/', label: 'Start' },
+ { id: 'map', routeId: 'source-graph', path: '/map', label: 'Explore code' },
+ { id: 'memory', routeId: 'memory', path: '/memory', label: 'Review memory' },
+ { id: 'handoffs', routeId: 'context-pack', path: '/handoffs', label: 'Prepare handoff' },
{ id: 'settings', routeId: 'settings', path: '/settings', label: 'Settings' }
]);
@@ -35,12 +35,13 @@ export function navigationItemsFor(mode) {
}
export function selectOverviewPrimaryAction(model = {}) {
- if (model.state === 'loading' || model.state === 'error') return null;
+ if (model.state === 'loading' || model.state === 'error' || model.state === 'failure') return null;
if (model.state === 'empty') return { label: 'Scan repository', route: '/', action: 'refresh-recall-map' };
- const pendingCount = Number(model.memory?.pendingCount ?? 0);
+ const pendingCount = Number(model.trust?.memory?.pendingCount ?? model.memory?.pendingCount ?? 0);
if (pendingCount > 0) return { label: `Review ${pendingCount} proposal${pendingCount === 1 ? '' : 's'}`, route: '/memory', routeId: 'memory' };
- if (model.handoff?.state === 'blocked') return { label: 'Repair handoff', route: '/handoffs', routeId: 'context-pack' };
- if (model.state === 'stale' || model.handoff?.state === 'review') return { label: 'Update handoff', route: '/handoffs', routeId: 'context-pack' };
- if (model.handoff?.state === 'ready') return { label: 'View current handoff', route: '/handoffs', routeId: 'context-pack' };
+ const handoffState = model.trust?.handoff?.state ?? model.handoff?.state;
+ if (handoffState === 'blocked') return { label: 'Repair handoff', route: '/handoffs', routeId: 'context-pack' };
+ if (model.state === 'stale' || handoffState === 'review') return { label: 'Update handoff', route: '/handoffs', routeId: 'context-pack' };
+ if (handoffState === 'ready') return { label: 'View current handoff', route: '/handoffs', routeId: 'context-pack' };
return null;
}
diff --git a/apps/web/source-map-view.js b/apps/web/source-map-view.js
new file mode 100644
index 00000000..22dfc681
--- /dev/null
+++ b/apps/web/source-map-view.js
@@ -0,0 +1,367 @@
+import { escapeHtml, formatDate, renderApiErrorPanel, statePanel } from './ui-primitives.js';
+import { createGraphViewport } from './graph-viewport.js';
+
+const DEFAULT_DEPTH = 2;
+const DEFAULT_LIMIT = 20;
+
+export function parseMapUrl(input = '/map') {
+ const url = new URL(String(input || '/map'), 'http://127.0.0.1');
+ const query = boundedText(url.searchParams.get('query'), 512);
+ const group = boundedText(url.searchParams.get('group'), 512);
+ const startName = boundedText(url.searchParams.get('start'), 240);
+ const changedLocator = boundedText(url.searchParams.get('changed'), 512);
+ const depth = boundedInteger(url.searchParams.get('depth'), DEFAULT_DEPTH, 1, 5);
+ const limit = boundedInteger(url.searchParams.get('limit'), DEFAULT_LIMIT, 1, 100);
+ const offset = boundedInteger(url.searchParams.get('offset'), 0, 0, 10000);
+ return {
+ query,
+ group,
+ startName,
+ changedLocator,
+ depth,
+ limit,
+ offset,
+ advanced: Boolean(startName || changedLocator || depth !== DEFAULT_DEPTH || limit !== DEFAULT_LIMIT)
+ };
+}
+
+export function serializeMapUrl(value = {}) {
+ const state = normalizeMapState(value);
+ const params = new URLSearchParams();
+ if (state.query) params.set('query', state.query);
+ if (state.group) params.set('group', state.group);
+ if (state.startName) params.set('start', state.startName);
+ if (state.changedLocator) params.set('changed', state.changedLocator);
+ if (state.depth !== DEFAULT_DEPTH) params.set('depth', String(state.depth));
+ if (state.limit !== DEFAULT_LIMIT) params.set('limit', String(state.limit));
+ if (state.offset > 0) params.set('offset', String(state.offset));
+ const query = params.toString();
+ return query ? `/map?${query}` : '/map';
+}
+
+export function buildMapRequest(value = {}) {
+ const state = normalizeMapState(value);
+ return compactObject({
+ query: state.query || null,
+ locatorPrefix: state.group || null,
+ startName: state.startName || null,
+ changedLocators: state.changedLocator ? [state.changedLocator] : null,
+ depth: state.depth,
+ limit: state.limit,
+ offset: state.offset,
+ sampleLimit: 50
+ });
+}
+
+export function mapStateFromForm(form) {
+ const data = new FormData(form);
+ return normalizeMapState({
+ query: data.get('query'),
+ group: data.get('group'),
+ startName: data.get('startName'),
+ changedLocator: data.get('changedLocator'),
+ depth: data.get('depth'),
+ limit: data.get('limit')
+ });
+}
+
+export function renderSourceMap({ state: value = {}, report = null, error = null, loading = false } = {}) {
+ const state = normalizeMapState(value);
+ const result = error
+ ? renderApiErrorPanel('Map request failed', error)
+ : loading
+ ? statePanel('loading', 'Reading repository map', 'Loading bounded source metadata from the local index.')
+ : report
+ ? renderMapResult(report, state)
+ : statePanel('empty', 'Map not loaded', 'Run the map to inspect bounded repository structure.');
+
+ return ``;
+}
+
+export function bindSourceMap(root, { report = null, onSubmit, onRefresh, onPage, onSelectNode } = {}) {
+ if (!root) return () => {};
+ const controller = new AbortController();
+ const options = { signal: controller.signal };
+ let viewport = null;
+ root.querySelector('#source-graph-form')?.addEventListener('submit', (event) => {
+ event.preventDefault();
+ onSubmit?.(mapStateFromForm(event.currentTarget), event);
+ }, options);
+ root.querySelector('[data-action="refresh-source-map"]')?.addEventListener('click', (event) => onRefresh?.(event), options);
+ root.querySelectorAll('[data-map-offset]').forEach((button) => button.addEventListener('click', () => {
+ onPage?.(boundedInteger(button.dataset.mapOffset, 0, 0, 10000));
+ }, options));
+ const canvas = root.querySelector('#source-map-canvas');
+ if (canvas) {
+ const state = mapStateFromRoot(root);
+ const graph = sourceMapGraphData(report, state);
+ const nodes = graph.nodes;
+ viewport = createGraphViewport(
+ canvas,
+ root.querySelector('.source-map-outline'),
+ root.querySelector('#source-map-selection'),
+ {
+ nodes,
+ edges: graph.edges,
+ onSelect: (node) => {
+ const selection = root.querySelector('#source-map-selection');
+ if (selection) selection.innerHTML = renderSelection(node);
+ onSelectNode?.(node.id);
+ },
+ onError: (code) => {
+ const failure = root.querySelector('[data-graph-error]');
+ if (failure) {
+ failure.hidden = false;
+ failure.textContent = code === 'graph_layout_bounds_exceeded'
+ ? 'Focused graph exceeds the 200-node or 400-relationship display limit.'
+ : 'Graph layout could not start. Use the outline to inspect records.';
+ }
+ }
+ }
+ );
+ } else {
+ root.querySelectorAll('[data-node-id]').forEach((button) => button.addEventListener('click', () => onSelectNode?.(button.dataset.nodeId), options));
+ }
+ return () => {
+ controller.abort();
+ viewport?.destroy();
+ };
+}
+
+function renderMapForm(state) {
+ return ``;
+}
+
+function renderMapResult(report, state) {
+ if (report?.snapshot?.status === 'unavailable') return renderUnavailableMap(report);
+ const coverage = coverageModel(report);
+ const hasFocus = Boolean(state.query || state.group || state.startName || state.changedLocator);
+ const focusNodes = arrayValue(report.focus?.nodes);
+ const focusEdges = arrayValue(report.focus?.edges);
+ const groups = arrayValue(report.orientation?.groups);
+ const processes = arrayValue(report.orientation?.processes);
+ const outlineNodes = hasFocus ? focusNodes : groups;
+ const groupRelations = arrayValue(report.orientation?.relations ?? report.orientation?.groupRelations);
+ const content = hasFocus
+ ? renderFocus(focusNodes, focusEdges, report.focus)
+ : renderArchitecture(groups, groupRelations);
+
+ return `
+
+ ${coverage.status === 'partial' ? renderCoverageWarning(coverage) : ''}
+ ${hasFocus ? renderQueryBounds(report.search, state) : ''}
+
+ ${renderProcesses(processes)}
+ `;
+}
+
+function renderQueryBounds(search = {}, state) {
+ const count = arrayValue(search.results).length;
+ const offsetIncomplete = search.offsetIncomplete === true;
+ const reachedOffset = number(search.reachedOffset ?? state.offset);
+ const start = count ? reachedOffset + 1 : 0;
+ const end = reachedOffset + count;
+ const hasPrevious = state.offset > 0;
+ const hasMore = search.hasMore === true;
+ const truncatedWithoutCursor = search.truncated === true && !hasMore && !offsetIncomplete;
+ const copy = offsetIncomplete
+ ? `The requested offset ${formatNumber(state.offset)} was not reached within the bounded native read. The walk reached ${formatNumber(reachedOffset)}; this is not an empty result page.`
+ : truncatedWithoutCursor
+ ? 'The bounded query omitted additional evidence, and no continuation cursor is available.'
+ : count
+ ? `Query matches ${formatNumber(start)}-${formatNumber(end)} on this page.${hasMore ? ' More matches are available.' : ' End of the bounded query results.'}`
+ : hasPrevious
+ ? 'No query matches on this page. Previous results may still be available.'
+ : 'No query matches were returned.';
+ const previousOffset = Math.max(0, state.offset - state.limit);
+ const nextOffset = Math.min(10000, state.offset + state.limit);
+ const detail = offsetIncomplete
+ ? search.continuationCursor
+ ? 'Use the returned continuation cursor through the API, or request an earlier page.'
+ : 'Request an earlier page; this bounded result has no continuation cursor.'
+ : truncatedWithoutCursor
+ ? 'The result is partial. Broaden the limit only within the documented query bounds.'
+ : 'The focused map expands relationships separately; its omitted node and relationship counts appear below.';
+ return ``;
+}
+
+function renderArchitecture(groups, relations) {
+ if (!groups.length) return statePanel('empty', 'No supported groups', 'No repository groups were represented inside the current index bounds.');
+ return `
`;
+}
+
+function renderFocus(nodes, edges, focus = {}) {
+ if (!nodes.length) return statePanel('empty', 'No focused records', 'The submitted scope produced no bounded nodes. Broaden the query or remove a group filter.');
+ return `
`;
+}
+
+function renderUnavailableMap(report) {
+ const recovery = sourceIndexRecovery(report?.snapshot?.reason);
+ const command = recovery.command ? `${escapeHtml(recovery.command)}
` : '';
+ return statePanel('partial', 'Source index unavailable', recovery.copy, false, `${command}Map did not scan files or use another graph engine.
`);
+}
+
+function sourceIndexRecovery(reason) {
+ const code = String(reason ?? '').split(':').at(-1);
+ if (code === 'source_index_build_required') {
+ return { copy: 'Build the local source index, then run the map again.', command: 'recall graph index --write --engine native --root . --format summary' };
+ }
+ if (code === 'source_index_refresh_required') {
+ return { copy: 'Refresh the stale source index, then run the map again.', command: 'recall graph index --refresh --engine native --root . --format summary' };
+ }
+ if (['native_platform_package_missing', 'native_engine_unavailable'].includes(code)) {
+ return { copy: 'Install a matching Memory Recall native package, then reload this page.', command: 'npm install -g memory-recall' };
+ }
+ return { copy: 'Inspect the local source index, apply the reported repair, then run the map again.', command: 'recall graph index --doctor --engine native --root . --format summary' };
+}
+
+function renderProcesses(processes) {
+ if (!processes.length) return '';
+ return `
Entry-to-sink processes ${number(processes.length)} bounded paths ${processes.map((process) => {
+ const steps = Math.max(1, arrayValue(process.nodeIds).length - 1);
+ return `${escapeHtml(process.entryPoint?.label)} → ${escapeHtml(process.sink?.label)}
${escapeHtml(process.sinkKind)} · ${number(steps)} ${steps === 1 ? 'step' : 'steps'} · ${percent(process.confidence)}% confidence${process.truncated ? ' · bounded result' : ''}
${escapeHtml(process.entryPoint?.locator)}${escapeHtml(process.sink?.locator)} `;
+ }).join('')} `;
+}
+
+function renderMapOutline(items, focused) {
+ if (!items.length) return 'No records in the current outline.
';
+ return `${items.map((item, index) => `${escapeHtml(focused ? item.label : item.prefix ?? item.label)} ${escapeHtml(focused ? item.locator ?? item.kind : `${number(item.fileCount)} files / ${number(item.symbolCount)} symbols`)} `).join('')} `;
+}
+
+export function sourceMapGraphData(report = {}, state = {}) {
+ const hasFocus = Boolean(state.query || state.group || state.startName || state.changedLocator);
+ if (hasFocus) return {
+ nodes: arrayValue(report.focus?.nodes),
+ edges: arrayValue(report.focus?.edges)
+ };
+ return {
+ nodes: arrayValue(report.orientation?.groups).map((group) => ({
+ ...group,
+ kind: 'repository-group',
+ label: group.prefix ?? group.label
+ })),
+ edges: arrayValue(report.orientation?.relations ?? report.orientation?.groupRelations).map((relation, index) => ({
+ id: relation.id ?? `group_relation_${index}`,
+ kind: 'group-dependency',
+ fromNodeId: relation.sourceGroupId,
+ toNodeId: relation.targetGroupId,
+ count: number(relation.count)
+ }))
+ };
+}
+
+function mapStateFromRoot(root) {
+ const form = root.querySelector('#source-graph-form');
+ return form ? mapStateFromForm(form) : normalizeMapState();
+}
+
+function renderSelection(item) {
+ if (!item) return 'No selection.
';
+ return `
Name ${escapeHtml(item.label ?? item.prefix)}
Type ${escapeHtml(item.kind ?? 'repository group')} ${item.locator ? `
Locator ${escapeHtml(item.locator)} ` : ''} `;
+}
+
+function renderSourceTruth(report, coverage) {
+ const safeguards = report.safeguards ?? {};
+ return `Scan truth
Coverage ${escapeHtml(coverage.status)}
Represented ${number(coverage.representedFiles)} files
Model calls ${number(safeguards.modelCalls)}
Network calls ${number(safeguards.networkCalls)}
External writes ${safeguards.externalWritesEnabled ? 'on' : 'off'} `;
+}
+
+function renderCoverageWarning(coverage) {
+ const reasons = coverage.reasonCodes.map(reasonLabel);
+ return `Partial coverage ${escapeHtml(coverage.summary)}
${reasons.length ? `${reasons.map((reason) => `${escapeHtml(reason)} `).join('')} ` : ''} `;
+}
+
+function coverageModel(report) {
+ const source = report.coverage ?? report.graph?.summary?.coverage ?? {};
+ const representedFiles = number(source.representedFileCount ?? report.graph?.summary?.fileCount);
+ const omittedFiles = number(source.omittedFileCount ?? (
+ number(source.skippedFileCount) + number(source.oversizedFileCount) + number(source.unsupportedFileCount)
+ ));
+ const omittedEdges = number(source.omittedEdgeCount);
+ const status = source.status === 'partial' ? 'partial' : 'complete';
+ const parts = [`${formatNumber(representedFiles)} represented files`];
+ if (omittedFiles) parts.push(`${formatNumber(omittedFiles)} omitted files`);
+ if (omittedEdges) parts.push(`${formatNumber(omittedEdges)} omitted relationships`);
+ return { status, representedFiles, omittedFiles, omittedEdges, reasonCodes: arrayValue(source.reasonCodes), summary: parts.join(' / ') };
+}
+
+function snapshotLabel(snapshot = {}) {
+ const status = escapeHtml(snapshot.status ?? 'unavailable');
+ const reuse = snapshot.reuse && snapshot.reuse !== 'none' ? ` / ${escapeHtml(snapshot.reuse)}` : '';
+ const built = snapshot.builtAt ? ` / ${escapeHtml(formatDate(snapshot.builtAt))}` : '';
+ return `${status}${reuse}${built} `;
+}
+
+function reasonLabel(value) {
+ const labels = {
+ file_budget_reached: 'File limit reached',
+ max_files_reached: 'File limit reached',
+ node_budget_reached: 'Node limit reached',
+ edge_budget_reached: 'Relationship limit reached'
+ };
+ return labels[value] ?? String(value ?? '').replaceAll('_', ' ');
+}
+
+function normalizeMapState(value) {
+ const query = boundedText(value.query, 512);
+ const group = boundedText(value.group, 512);
+ const startName = boundedText(value.startName, 240);
+ const changedLocator = boundedText(value.changedLocator, 512);
+ const depth = boundedInteger(value.depth, DEFAULT_DEPTH, 1, 5);
+ const limit = boundedInteger(value.limit, DEFAULT_LIMIT, 1, 100);
+ const offset = boundedInteger(value.offset, 0, 0, 10000);
+ return {
+ query, group, startName, changedLocator, depth, limit, offset,
+ advanced: Boolean(startName || changedLocator || depth !== DEFAULT_DEPTH || limit !== DEFAULT_LIMIT)
+ };
+}
+
+function boundedText(value, maximum) {
+ return String(value ?? '').trim().slice(0, maximum);
+}
+
+function boundedInteger(value, fallback, minimum, maximum) {
+ const candidate = Number(value);
+ return Number.isInteger(candidate) && candidate >= minimum && candidate <= maximum ? candidate : fallback;
+}
+
+function compactObject(value) {
+ return Object.fromEntries(Object.entries(value).filter(([, item]) => item !== null && item !== undefined && item !== ''));
+}
+
+function arrayValue(value) {
+ return Array.isArray(value) ? value : [];
+}
+
+function number(value) {
+ const candidate = Number(value);
+ return Number.isFinite(candidate) && candidate >= 0 ? Math.floor(candidate) : 0;
+}
+
+function percent(value) {
+ const candidate = Number(value);
+ return Math.round((Number.isFinite(candidate) ? Math.max(0, Math.min(1, candidate)) : 0) * 100);
+}
+
+function formatNumber(value) {
+ return new Intl.NumberFormat('en-US').format(number(value));
+}
diff --git a/apps/web/styles.css b/apps/web/styles.css
index c6077022..6aef75e8 100644
--- a/apps/web/styles.css
+++ b/apps/web/styles.css
@@ -50,13 +50,16 @@ main{min-width:0}
.repository-popover{position:absolute;z-index:30;top:calc(100% + var(--space-2xs));left:0;width:min(360px,calc(100vw - 32px));display:grid;gap:var(--space-2xs);padding:var(--space-sm);border:1px solid var(--color-rule-strong);border-radius:var(--radius-panel);background:var(--color-panel);box-shadow:0 12px 32px color-mix(in oklch,var(--color-ink) 18%,transparent)}
.repository-popover p{margin:0;color:var(--color-muted)}
.repository-popover code{padding:var(--space-2xs);background:var(--color-panel-muted);border-radius:var(--radius-control)}
-.global-search{flex:1 1 280px;max-width:520px;display:grid;grid-template-columns:minmax(120px,1fr) auto;align-items:center}
-.global-search input{min-height:44px;min-width:0;border:1px solid var(--color-rule-strong);border-radius:var(--radius-control) 0 0 var(--radius-control);padding:0 var(--space-xs);color:var(--color-ink);background:var(--color-panel)}
+.global-search{flex:1 1 360px;max-width:620px;display:grid;grid-template-columns:148px minmax(140px,1fr) auto;align-items:center}
+.global-search select,.global-search input{min-height:44px;min-width:0;border:1px solid var(--color-rule-strong);padding:0 var(--space-xs);color:var(--color-ink);background:var(--color-panel);font:inherit}
+.global-search select{border-radius:var(--radius-control) 0 0 var(--radius-control)}
+.global-search input{min-height:44px;border-left:0;border-radius:0}
.global-search button{min-height:44px;border:1px solid var(--color-rule-strong);border-left:0;border-radius:0 var(--radius-control) var(--radius-control) 0;padding:0 var(--space-xs);color:var(--color-ink);background:var(--color-panel);cursor:pointer}
.global-search button:hover{border-color:var(--color-accent)}
.condition{color:var(--color-muted);text-transform:capitalize}
.condition[data-state="error"],.condition[data-state="denied"]{color:var(--color-danger)}
.condition[data-state="stale"],.condition[data-state="partial"]{color:var(--color-ink);text-decoration:underline;text-decoration-color:var(--color-warning);text-underline-offset:2px}
+#repository-boundary[data-state="warning"]{color:var(--color-danger);font-weight:650}
.icon-link{min-height:44px;display:inline-flex;align-items:center;color:var(--color-ink)}
#view-root{padding:var(--space-lg) clamp(var(--space-sm),4vw,var(--space-xl)) var(--space-2xl)}
.eyebrow{margin:0 0 var(--space-3xs);color:var(--slate);font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.08em}
@@ -66,11 +69,13 @@ h3{font-size:15px;line-height:1.3}
.action-row{display:flex;gap:var(--space-8);flex-wrap:wrap}
.button{min-height:40px;border:1px solid var(--color-rule-strong);border-radius:var(--radius-control);padding:var(--space-2xs) var(--space-xs);color:var(--color-ink);background:var(--color-panel);font:inherit;font-weight:650;cursor:pointer}
a.button{text-decoration:none;display:inline-flex;align-items:center;justify-content:center}
-.button.primary{min-height:44px;color:var(--color-accent-ink);background:var(--color-accent);border-color:var(--color-accent)}
+.button.primary{min-height:44px;color:var(--color-canvas);background:var(--color-ink);border-color:var(--color-ink)}
.button.secondary{background:var(--color-panel);color:var(--color-ink)}
+.button.quiet{min-height:44px;border-color:transparent;background:transparent;color:var(--color-muted)}
.button:hover:not(:disabled){border-color:var(--color-accent)}
+.button.quiet:hover:not(:disabled){border-color:transparent;background:var(--color-panel-muted);color:var(--color-ink)}
.button:active:not(:disabled){background:var(--color-panel-muted)}
-.button.primary:active:not(:disabled){filter:brightness(.9)}
+.button.primary:active:not(:disabled){background:color-mix(in oklch,var(--color-ink) 88%,var(--color-canvas))}
.button:disabled{opacity:.55;cursor:not-allowed}
.button:focus-visible,a:focus-visible,main:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,button:focus-visible,summary:focus-visible{outline:2px solid var(--color-accent);outline-offset:1px}
.status-chip{display:inline-flex;align-items:center;gap:var(--space-8);border:1px solid var(--border);background:var(--surface-2);border-radius:999px;padding:5px 10px;min-height:32px}
@@ -135,7 +140,7 @@ code,dd,.meta-row span,.reason{overflow-wrap:anywhere;word-break:break-word}
.stacked-form{display:grid;gap:var(--space-16)}
.field-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-12)}
.field{display:grid;gap:var(--space-3xs);min-width:0}
-.field span{font-size:12px;font-weight:720;color:var(--slate);text-transform:uppercase;letter-spacing:.08em}
+.field span{font-size:12px;font-weight:650;color:var(--slate)}
.field small{color:var(--slate);font-size:12px;line-height:1.4}
.field input,.field select,.field textarea{width:100%;min-height:44px;border:1px solid var(--border);border-radius:var(--radius-control);background:var(--surface-2);color:var(--paper);padding:var(--space-2xs) var(--space-xs);font:inherit;outline:2px solid transparent;outline-offset:1px}
.field textarea{min-height:96px;resize:vertical}
@@ -143,7 +148,7 @@ code,dd,.meta-row span,.reason{overflow-wrap:anywhere;word-break:break-word}
.field input:focus-visible,.field select:focus-visible,.field textarea:focus-visible{outline-color:var(--focus)}
.field input:disabled,.field select:disabled,.field textarea:disabled{opacity:.55;cursor:not-allowed;background:var(--color-panel-muted)}
.source-family-field{display:grid;gap:var(--space-8);border:1px solid var(--border);border-radius:var(--radius-control);padding:var(--space-12);margin:0;background:var(--surface-2)}
-.source-family-field legend{padding:0 var(--space-6,6px);font-size:12px;font-weight:720;color:var(--slate);text-transform:uppercase;letter-spacing:.08em}
+.source-family-field legend{padding:0 var(--space-6,6px);font-size:12px;font-weight:650;color:var(--slate)}
.source-family-options{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-8)}
.source-family-options label{display:flex;align-items:center;gap:var(--space-8);min-height:42px;border:1px solid var(--border);border-radius:var(--radius-control);background:var(--surface-3);padding:8px 10px;font-weight:720}
.source-family-options input{inline-size:18px;block-size:18px;accent-color:var(--signal)}
@@ -298,6 +303,56 @@ th{color:var(--slate);font-size:12px;text-transform:uppercase;letter-spacing:.08
.change-detection-warning{display:grid;gap:var(--space-2xs)}
.change-detection-warning p{margin:0;color:var(--color-muted)}
.change-detection-warning .button{justify-self:start}
+.orientation-workbench{max-width:1440px;margin:0 auto}
+.orientation-heading{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-sm);padding-bottom:var(--space-sm);border-bottom:1px solid var(--color-rule)}
+.orientation-heading>div{min-width:0}
+.orientation-heading h1{font-size:24px;letter-spacing:-.02em}
+.orientation-heading p{margin:var(--space-3xs) 0 0;color:var(--color-muted)}
+.coverage-label{color:var(--color-muted);font-size:12px;text-align:right}
+.coverage-label[data-status="partial"],.coverage-label[data-status="stale"],.coverage-label[data-status="failed"]{color:var(--color-ink)}
+.orientation-layout{display:grid;grid-template-columns:minmax(0,7fr) minmax(280px,3fr);gap:var(--space-lg);padding-top:var(--space-md);align-items:start}
+.architecture-region{min-width:0}
+.region-heading{display:flex;align-items:start;justify-content:space-between;gap:var(--space-sm);margin-bottom:var(--space-sm)}
+.region-heading h2,.orientation-inspector h2{margin:0;font-size:15px}
+.region-heading p{margin:var(--space-3xs) 0 0;color:var(--color-muted)}
+.region-heading a{min-height:44px;display:inline-flex;align-items:center;white-space:nowrap}
+.architecture-board{position:relative;display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:var(--space-xs);align-items:start;padding:var(--space-sm);border:1px solid var(--color-rule);border-radius:var(--radius-panel);background:var(--color-panel-muted)}
+.orientation-group{min-height:64px;display:grid;align-content:center;gap:2px;min-width:0;border:1px solid var(--color-rule);border-radius:var(--radius-control);padding:var(--space-2xs) var(--space-xs);background:var(--color-panel);color:var(--color-ink);box-shadow:none;text-align:left;cursor:pointer}
+.orientation-group:hover{border-color:var(--color-rule-strong)}
+.orientation-group.is-selected{border-color:var(--color-accent);box-shadow:inset 3px 0 0 var(--color-accent)}
+.orientation-group strong,.orientation-group span,.orientation-group small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+.orientation-group span,.orientation-group small{color:var(--color-muted)}
+.orientation-group small{font-size:11px}
+.orientation-relations{grid-column:1/-1;display:flex;flex-wrap:wrap;gap:var(--space-2xs) var(--space-sm);padding-top:var(--space-3xs);color:var(--color-muted);font-size:11px}
+.orientation-relations span{display:inline-flex;align-items:center;gap:var(--space-3xs)}
+.orientation-relations span:before{content:"";width:18px;border-top:1px solid var(--color-rule-strong)}
+.orientation-relations b{font-weight:650;color:var(--color-ink)}
+.architecture-disclosure{margin:var(--space-xs) 0 0;color:var(--color-muted);font-size:12px}
+.architecture-outline{margin-top:var(--space-xs);border-top:1px solid var(--color-rule)}
+.architecture-outline summary{min-height:44px;display:flex;align-items:center;cursor:pointer;font-weight:650}
+.architecture-outline ol{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-2xs)}
+.architecture-outline button{width:100%;min-height:44px;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--space-xs);align-items:center;border:0;border-radius:var(--radius-control);padding:var(--space-2xs);background:transparent;color:var(--color-ink);text-align:left;cursor:pointer}
+.architecture-outline button:hover{background:var(--color-panel-muted)}
+.architecture-outline button span{color:var(--color-muted);font-size:11px;white-space:nowrap}
+.orientation-inspector{min-width:0}
+.orientation-inspector section{padding:var(--space-sm) 0;border-top:1px solid var(--color-rule)}
+.orientation-inspector section:first-child{padding-top:0;border-top:0}
+.orientation-inspector section>header{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-xs);margin-bottom:var(--space-xs)}
+.orientation-inspector section>header span{color:var(--color-muted);font-size:12px}
+.orientation-inspector ol{list-style:none;margin:0;padding:0}
+.start-item a{min-height:44px;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:2px var(--space-xs);padding:var(--space-3xs) 0;border-top:1px solid var(--color-rule);color:inherit;text-decoration:none}
+.start-item:first-child a{border-top:0}
+.start-item code{grid-column:1/-1;color:var(--color-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+.start-item span{color:var(--color-muted);font-size:12px;white-space:nowrap}
+.orientation-inspector p{margin:0;color:var(--color-muted)}
+.orientation-inspector small{display:block;margin-top:var(--space-2xs);color:var(--color-muted)}
+.orientation-inspector section ol:not(:first-child){margin-top:var(--space-2xs)}
+.orientation-inspector section ol li:not(.start-item){display:grid;gap:2px;padding:var(--space-3xs) 0}
+.orientation-inspector section ol code{color:var(--color-muted)}
+.trust-list{margin:0;display:grid;grid-template-columns:1fr 1fr;gap:var(--space-2xs) var(--space-sm)}
+.trust-list div{min-width:0}
+.trust-list dt{color:var(--color-muted);font-size:11px}
+.trust-list dd{margin:2px 0 0;font-weight:650;overflow-wrap:anywhere}
.tool-workspace{max-width:1280px;margin:0 auto}
.tool-page-heading{display:flex;align-items:end;justify-content:space-between;gap:var(--space-lg);padding-bottom:var(--space-md);margin-bottom:var(--space-md);border-bottom:1px solid var(--color-rule)}
.tool-page-heading>div{min-width:0}
@@ -305,6 +360,59 @@ th{color:var(--slate);font-size:12px;text-transform:uppercase;letter-spacing:.08
.tool-page-heading p{margin:var(--space-2xs) 0 0;color:var(--color-muted);max-width:var(--layout-prose)}
.tool-page-heading>span{color:var(--color-muted);white-space:nowrap}
.tool-query{padding:0 0 var(--space-md);margin-bottom:var(--space-md);border-bottom:1px solid var(--color-rule)}
+.source-map-form{display:grid;grid-template-columns:minmax(240px,1fr) minmax(280px,1.4fr);gap:var(--space-sm);align-items:end}
+.map-advanced{min-width:0;border:0}
+.map-advanced summary{min-height:44px;display:flex;align-items:center;border-bottom:1px solid var(--color-rule);cursor:pointer;font-weight:650}
+.map-advanced[open] summary{margin-bottom:var(--space-xs)}
+.map-advanced-fields{display:grid;grid-template-columns:minmax(140px,1fr) minmax(140px,1fr) minmax(160px,1.2fr) 76px 76px;gap:var(--space-xs);align-items:end}
+.map-query-actions{grid-column:1/-1;display:flex;align-items:center;gap:var(--space-xs);flex-wrap:wrap}
+.map-query-actions>span{color:var(--color-muted);font-size:12px}
+.source-map-result{display:grid;gap:var(--space-sm)}
+.map-result-heading{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-sm);padding-bottom:var(--space-sm);border-bottom:1px solid var(--color-rule)}
+.map-result-heading h2{margin:0;font-size:24px}
+.map-result-heading p{margin:var(--space-3xs) 0 0;color:var(--color-muted)}
+.map-snapshot{color:var(--color-muted);white-space:nowrap}
+.map-coverage-warning{display:grid;grid-template-columns:max-content minmax(0,1fr) auto;gap:var(--space-xs);align-items:start;padding:var(--space-xs);border:1px solid var(--color-warning);border-radius:var(--radius-control)}
+.map-coverage-warning p,.map-coverage-warning ul{margin:0}
+.map-coverage-warning ul{display:flex;flex-wrap:wrap;gap:var(--space-2xs) var(--space-xs);padding:0;list-style:none;color:var(--color-muted)}
+.source-map-layout{display:grid;grid-template-columns:minmax(0,7fr) minmax(280px,3fr);gap:var(--space-lg);align-items:start}
+.source-map-stage{min-width:0}
+.source-map-inspector{min-width:0;padding-left:var(--space-md);border-left:1px solid var(--color-rule)}
+.source-map-inspector>h2,.source-map-truth h2{margin:0 0 var(--space-xs);font-size:15px}
+.source-map-inspector>hr{margin:var(--space-sm) 0;border:0;border-top:1px solid var(--color-rule)}
+.map-groups{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:var(--space-xs)}
+.map-groups article{min-width:0;display:grid;gap:var(--space-3xs);padding:var(--space-xs);border:1px solid var(--color-rule);border-radius:var(--radius-control);background:var(--color-panel)}
+.map-groups article span,.map-groups article small{color:var(--color-muted)}
+.map-relations{margin:var(--space-sm) 0 0;padding:0;list-style:none;border-top:1px solid var(--color-rule)}
+.map-relations li{min-height:44px;display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr) auto;gap:var(--space-xs);align-items:center;border-bottom:1px solid var(--color-rule)}
+.map-relations li span,.map-relations li small{color:var(--color-muted)}
+.map-focus-summary{display:flex;flex-wrap:wrap;gap:var(--space-xs);padding-bottom:var(--space-xs);color:var(--color-muted)}
+.map-focus-summary strong{color:var(--color-ink)}
+.map-focus-summary small{flex-basis:100%;color:var(--color-muted);font-size:12px;line-height:1.4}
+.map-index-command{margin:var(--space-xs) 0 0}
+.map-index-command code{display:block;overflow:auto;padding:var(--space-2xs);background:var(--color-panel-muted);border-radius:var(--radius-control);white-space:pre-wrap}
+.map-processes{margin-top:var(--space-md)}
+.map-processes .section-heading{margin-bottom:0}
+.map-processes ol{margin:0;padding:0;list-style:none}
+.map-processes li{display:grid;grid-template-columns:minmax(220px,1.2fr) minmax(180px,.8fr) minmax(0,1fr) minmax(0,1fr);gap:var(--space-xs);align-items:center;min-height:56px;padding:var(--space-xs) 0;border-bottom:1px solid var(--color-rule)}
+.map-process-route{min-width:0;display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);gap:var(--space-2xs);align-items:center}
+.map-process-route strong,.map-processes code{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+.map-processes p{margin:0;color:var(--color-muted)}
+.map-processes code{color:var(--color-muted)}
+.map-graph-toolbar{display:flex;align-items:center;justify-content:space-between;gap:var(--space-xs);padding-bottom:var(--space-xs)}
+.map-graph-toolbar>div:last-child{display:flex;gap:var(--space-2xs)}
+.map-graph-error{margin:0 0 var(--space-xs);padding:var(--space-xs);border:1px solid var(--color-danger);border-radius:var(--radius-control);color:var(--color-danger)}
+.source-map-canvas-wrap{height:clamp(380px,56vh,620px);overflow:hidden;border:1px solid var(--color-rule);border-radius:var(--radius-control);background:var(--color-panel);touch-action:none}
+.source-map-canvas-wrap canvas{display:block;width:100%;height:100%;cursor:grab}
+.source-map-canvas-wrap canvas:active{cursor:grabbing}
+.map-focus-list,.source-map-outline{margin:0;padding:0;list-style:none;border-top:1px solid var(--color-rule)}
+.map-focus-list button,.source-map-outline button{width:100%;min-height:44px;display:block;padding:var(--space-2xs);border:0;border-bottom:1px solid var(--color-rule);border-radius:0;background:transparent;color:var(--color-ink);text-align:left;cursor:pointer}
+.source-map-outline-copy{min-width:0;display:grid;gap:2px}
+.source-map-outline-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+.source-map-outline-locator{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--color-muted);font-size:12px}
+.map-focus-list button:hover,.source-map-outline button:hover{background:var(--color-panel-muted)}
+.map-focus-list button span,.source-map-outline button span{color:var(--color-muted);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+.source-map-outline button[aria-current="true"]{box-shadow:inset 2px 0 var(--color-accent)}
.query-options{display:grid;grid-template-columns:100px 100px max-content 1fr;gap:var(--space-xs);align-items:end}
.query-options>.muted{align-self:center}
.tool-result-heading{display:flex;align-items:end;justify-content:space-between;gap:var(--space-md);margin-bottom:var(--space-md)}
@@ -374,16 +482,37 @@ th{color:var(--slate);font-size:12px;text-transform:uppercase;letter-spacing:.08
.fabric-links .is-active strong:before,.fabric-links .is-active strong:after{border-color:color-mix(in srgb,var(--signal) 70%,var(--border))}
.fabric-links .is-blocked strong{color:var(--danger)}
.fabric-context-flow{margin-bottom:0}
-.memory-graph-shell{display:grid;grid-template-columns:minmax(0,1fr) minmax(300px,var(--layout-inspector));gap:var(--space-16);align-items:start;margin-bottom:var(--space-16)}
-.memory-graph-toolbar{display:grid;grid-template-columns:minmax(220px,1fr) auto auto auto;gap:var(--space-10,10px);align-items:end;margin-bottom:var(--space-14,14px)}
+.memory-graph-query{padding-bottom:var(--space-md);margin-bottom:var(--space-md);border-bottom:1px solid var(--color-rule)}
+.memory-graph-toolbar{display:grid;grid-template-columns:minmax(220px,1fr) auto auto auto;gap:var(--space-xs);align-items:end}
.memory-graph-search{min-width:0}
.toggle-field{min-height:44px;display:inline-flex;align-items:center;gap:var(--space-8);border:1px solid var(--border);border-radius:var(--radius-control);background:var(--surface-2);padding:8px 12px;font-weight:720;color:var(--paper);white-space:nowrap}
.toggle-field input{inline-size:18px;block-size:18px;accent-color:var(--signal)}
-.memory-graph-canvas-wrap{width:100%;height:clamp(420px,58vh,700px);border:1px solid var(--border);border-radius:var(--radius-panel);overflow:hidden;background:#111826}
-.memory-graph-canvas-wrap canvas{display:block;width:100%;height:100%}
-.memory-graph-legend{display:flex;flex-wrap:wrap;gap:var(--space-8);margin-top:var(--space-10,10px)}
-.memory-graph-legend span{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--border);border-radius:999px;background:var(--surface-2);padding:5px 9px;color:var(--slate);font-size:12px;font-weight:720}
-.memory-graph-legend i{width:10px;height:10px;border-radius:50%;display:inline-block}
+.memory-graph-empty{max-width:720px;padding:var(--space-md) 0}
+.memory-graph-empty h2{margin:0 0 var(--space-xs);font-size:24px}
+.memory-graph-empty p{color:var(--color-muted)}
+.memory-graph-layout{display:grid;grid-template-columns:minmax(0,7fr) minmax(280px,3fr);gap:var(--space-lg);align-items:start}
+.memory-graph-stage{min-width:0}
+.memory-graph-stage-heading{display:flex;align-items:end;justify-content:space-between;gap:var(--space-xs);padding-bottom:var(--space-xs)}
+.memory-graph-stage-heading h2{margin:0}
+.memory-graph-stage-heading p{margin:var(--space-3xs) 0 0;color:var(--color-muted)}
+.memory-graph-stage-heading>div:last-child{display:flex;gap:var(--space-2xs)}
+.memory-graph-canvas-wrap{width:100%;aspect-ratio:16/9;max-height:620px;border:1px solid var(--color-rule);border-radius:var(--radius-control);overflow:hidden;background:var(--color-panel);touch-action:none}
+.memory-graph-canvas-wrap canvas{display:block;width:100%;height:100%;cursor:grab}
+.memory-graph-canvas-wrap canvas:active{cursor:grabbing}
+.memory-graph-inspector{min-width:0;padding-left:var(--space-md);border-left:1px solid var(--color-rule)}
+.memory-graph-inspector>h2,.memory-graph-boundary h2{margin:0 0 var(--space-xs);font-size:15px}
+.memory-graph-inspector>hr{margin:var(--space-sm) 0;border:0;border-top:1px solid var(--color-rule)}
+.memory-graph-meta{display:grid;grid-template-columns:minmax(0,7fr) minmax(260px,3fr);gap:var(--space-lg);margin-top:var(--space-md);padding-top:var(--space-md);border-top:1px solid var(--color-rule);align-items:start}
+.memory-graph-history h2{margin:0 0 var(--space-xs);font-size:15px}
+.memory-graph-history .memory-fact-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:var(--space-md)}
+.memory-graph-outline,.memory-fact-list{margin:0;padding:0;list-style:none;border-top:1px solid var(--color-rule)}
+.memory-graph-outline button{width:100%;min-height:44px;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--space-xs);align-items:center;padding:var(--space-2xs);border:0;border-bottom:1px solid var(--color-rule);border-radius:0;background:transparent;color:var(--color-ink);text-align:left;cursor:pointer}
+.memory-graph-outline button:hover{background:var(--color-panel-muted)}
+.memory-graph-outline button[aria-current="true"]{box-shadow:inset 2px 0 var(--color-accent)}
+.memory-graph-outline button span{color:var(--color-muted);font-size:12px}
+.memory-group-label{padding:var(--space-xs) var(--space-2xs) var(--space-3xs);color:var(--color-muted);font-size:11px;font-weight:650}
+.memory-fact-list li{display:grid;gap:var(--space-3xs);padding:var(--space-xs) 0;border-bottom:1px solid var(--color-rule)}
+.memory-fact-list span,.memory-fact-list small{color:var(--color-muted)}
.flow-steps{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--space-12)}
.flow-step{position:relative;border:1px solid var(--border);border-radius:var(--radius-card);background:var(--surface-2);padding:var(--space-14,14px);min-height:132px;display:grid;gap:var(--space-8)}
.flow-step>span{width:28px;height:28px;border-radius:999px;background:var(--surface-3);display:grid;place-items:center;color:var(--slate);font-size:12px;font-weight:760}
@@ -414,7 +543,8 @@ th{color:var(--slate);font-size:12px;text-transform:uppercase;letter-spacing:.08
.use-path-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
.facts-wide{grid-template-columns:1fr}
.fabric-hero,.fabric-layout{grid-template-columns:1fr}
- .memory-graph-shell{grid-template-columns:1fr}
+ .memory-graph-layout{grid-template-columns:1fr}
+ .memory-graph-inspector{padding:var(--space-md) 0 0;border-left:0;border-top:1px solid var(--color-rule)}
.memory-graph-toolbar{grid-template-columns:1fr 1fr}
.memory-graph-toolbar .button,.memory-graph-search{grid-column:1/-1}
.primary-flow{grid-template-columns:1fr}
@@ -428,6 +558,13 @@ th{color:var(--slate);font-size:12px;text-transform:uppercase;letter-spacing:.08
.tool-detail-grid>section:nth-child(odd){padding-left:0;border-right:1px solid var(--color-rule)}
.tool-detail-grid>section:nth-child(even){padding-right:0}
.tool-detail-grid>.tool-disclosure{padding-left:0;grid-column:1/-1}
+ .source-map-form{grid-template-columns:1fr}
+ .map-query-actions{grid-column:1}
+ .map-advanced-fields{grid-template-columns:repeat(2,minmax(0,1fr))}
+ .map-advanced-fields .field:nth-child(3){grid-column:1/-1}
+ .source-map-layout{grid-template-columns:1fr}
+ .source-map-inspector{padding:var(--space-md) 0 0;border-left:0;border-top:1px solid var(--color-rule)}
+ .map-processes li{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
.flow-step:not(:last-child):after{display:none}
}
@@ -447,6 +584,9 @@ th{color:var(--slate);font-size:12px;text-transform:uppercase;letter-spacing:.08
@media(max-width:900px){
.overview-grid{grid-template-columns:1fr}
.overview-section{grid-column:1;padding:var(--space-md) 0!important;border-right:0!important}
+ .orientation-layout{grid-template-columns:1fr}
+ .orientation-inspector{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-sm);border-top:1px solid var(--color-rule);padding-top:var(--space-sm)}
+ .orientation-inspector section,.orientation-inspector section:first-child{padding:0;border:0}
}
@media(max-width:700px){
@@ -454,13 +594,20 @@ th{color:var(--slate);font-size:12px;text-transform:uppercase;letter-spacing:.08
.setup-screen{grid-template-columns:1fr;gap:var(--space-md)}
.sidebar{display:none}
main{min-height:0;overflow:auto}
- .repository-bar{min-height:56px;padding:var(--space-2xs) var(--space-xs)}
+ .repository-bar{min-height:56px;display:grid;grid-template-columns:minmax(0,1fr) auto;padding:var(--space-2xs) var(--space-xs)}
.repository-identity{display:none}
+ .repository-menu{grid-column:1;grid-row:1}
.repository-menu summary{max-width:96px}
- .global-search{flex-basis:130px;grid-template-columns:minmax(80px,1fr)}
- .global-search button{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
- .global-search input{border-radius:var(--radius-control)}
- #repository-condition{display:none}
+ .repository-actions{grid-column:2;grid-row:1}
+ .global-search{grid-column:1/-1;grid-row:2;width:100%;max-width:none;grid-template-columns:112px minmax(80px,1fr) auto}
+ .global-search select{width:auto;padding:0 var(--space-2xs);color:var(--color-ink)}
+ .global-search button{min-width:44px;padding:0 var(--space-2xs)}
+ .orientation-heading{align-items:flex-start}
+ .orientation-heading p{display:none}
+ .architecture-board{grid-template-columns:1fr;grid-auto-flow:row;padding:var(--space-xs)}
+ .orientation-group{grid-column:1!important}
+ .architecture-outline ol{grid-template-columns:1fr}
+ .orientation-inspector{grid-template-columns:1fr}
#view-root{padding:var(--space-md) var(--space-xs) var(--space-xl)}
h1{font-size:32px}
.metric-strip{grid-template-columns:1fr 1fr}
@@ -485,7 +632,9 @@ th{color:var(--slate);font-size:12px;text-transform:uppercase;letter-spacing:.08
.fabric-scoreboard{grid-template-columns:repeat(2,minmax(0,1fr))}
.memory-graph-toolbar{grid-template-columns:1fr}
.memory-graph-toolbar .button,.memory-graph-search{grid-column:auto}
- .memory-graph-canvas-wrap{height:460px}
+ .memory-graph-stage-heading{display:grid}
+ .memory-graph-canvas-wrap{aspect-ratio:4/3}
+ .memory-graph-meta,.memory-graph-history .memory-fact-list{grid-template-columns:1fr}
.tool-page-heading,.tool-result-heading{display:grid;align-items:start}
.tool-page-heading>span{white-space:normal}
.tool-summary{justify-content:flex-start;gap:var(--space-sm)}
@@ -493,6 +642,20 @@ th{color:var(--slate);font-size:12px;text-transform:uppercase;letter-spacing:.08
.query-options .button,.query-options>.muted{grid-column:1/-1}
.tool-detail-grid{grid-template-columns:1fr}
.tool-detail-grid>section,.tool-detail-grid>section:nth-child(odd),.tool-detail-grid>section:nth-child(even),.tool-detail-grid>.tool-disclosure{padding:var(--space-sm) 0;border-right:0;grid-column:1}
+ .map-advanced-fields{grid-template-columns:1fr}
+ .map-advanced-fields .field:nth-child(3){grid-column:1}
+ .map-query-actions .button{flex:1 1 auto}
+ .map-graph-toolbar{display:grid}
+ .map-graph-toolbar>div:last-child .button{flex:1}
+ .source-map-canvas-wrap{height:420px}
+ .map-result-heading{display:grid}
+ .map-snapshot{white-space:normal}
+ .map-coverage-warning{grid-template-columns:1fr}
+ .source-map-layout{grid-template-columns:1fr}
+ .source-map-inspector{padding:var(--space-sm) 0 0;border-left:0;border-top:1px solid var(--color-rule)}
+ .map-processes li{grid-template-columns:1fr;gap:var(--space-3xs)}
+ .map-relations li{grid-template-columns:minmax(0,1fr) auto minmax(0,1fr)}
+ .map-relations li small{grid-column:1/-1}
.memory-review-grid{grid-template-columns:1fr}
.memory-review-queue,.memory-intake-panel{padding:var(--space-md) 0;border-right:0}
.memory-intake-panel{border-top:1px solid var(--color-rule)}
diff --git a/apps/web/tokens.css b/apps/web/tokens.css
index c36a248e..46161ced 100644
--- a/apps/web/tokens.css
+++ b/apps/web/tokens.css
@@ -7,7 +7,7 @@
--color-muted:oklch(48% 0.018 255);
--color-rule:oklch(86% 0.01 255);
--color-rule-strong:oklch(72% 0.018 255);
- --color-accent:oklch(52% 0.19 258);
+ --color-accent:oklch(50% 0.12 258);
--color-accent-ink:oklch(98% 0.005 258);
--color-success:oklch(55% 0.13 150);
--color-warning:oklch(67% 0.14 78);
@@ -67,7 +67,7 @@
--color-muted:oklch(68% 0.014 255);
--color-rule:oklch(31% 0.014 255);
--color-rule-strong:oklch(43% 0.018 255);
- --color-accent:oklch(67% 0.16 258);
+ --color-accent:oklch(70% 0.1 258);
--color-accent-ink:oklch(17% 0.008 255);
}
}
diff --git a/apps/web/ui-primitives.js b/apps/web/ui-primitives.js
new file mode 100644
index 00000000..09ea9fe6
--- /dev/null
+++ b/apps/web/ui-primitives.js
@@ -0,0 +1,91 @@
+const API_ISSUE_HINTS = new Map([
+ ['$.body.changedLocators', ['Changed files', 'Use workspace-relative paths under this repository, one per line. Keep the list bounded and review it before building.']],
+ ['$.body.userSelectedFiles', ['Explicit files', 'Use workspace-relative paths under this repository. Do not paste file bodies, absolute paths, credentials, or provider URLs.']],
+ ['$.body.memoryConfig.memoryPaths', ['Memory preflight sources', 'Use reviewed workspace-relative files only. Do not use absolute paths, URLs, credentials, or generated/local state directories.']],
+ ['$.body.client', ['Client', 'Choose a supported local harness client from the menu.']],
+ ['$.body.objective', ['Objective', 'Use a plain task summary. Do not include secrets, provider URLs, session tokens, absolute paths, or hidden reasoning.']],
+ ['$.body.step', ['Step', 'Use a short current-step label. Do not include secrets, provider URLs, session tokens, absolute paths, or hidden reasoning.']],
+ ['$.body.tokenBudget', ['Token budget', 'Use a positive number within the field limit.']],
+ ['$.body.sourceLocator', ['Source locator', 'Use a workspace-relative source file such as notes/memory.md.']],
+ ['$.body.text', ['Memory text', 'Use simple Fact or Decision lines with safe subject, predicate, and object text.']],
+ ['$.body.targetHarness', ['Target', 'Choose Codex, Claude Code, Cursor, or Generic agent.']],
+ ['$.body.from', ['Source families', 'Use supported source families only, such as codex, cursor, or claude-code.']],
+ ['$.body.workspaceId', ['Workspace', 'Use the current local workspace.']]
+]);
+
+export function escapeHtml(value) {
+ return String(value ?? '').replace(/[&<>'"]/gu, (character) => ({
+ '&': '&', '<': '<', '>': '>', "'": ''', '"': '"'
+ })[character]);
+}
+
+export function formatDate(value) {
+ if (!value) return '-';
+ const parsed = new Date(value);
+ if (!Number.isFinite(parsed.getTime())) return '-';
+ return new Intl.DateTimeFormat(undefined, { dateStyle: 'medium', timeStyle: 'short' }).format(parsed);
+}
+
+export function shortFingerprint(value) {
+ return `${String(value ?? '').slice(0, 19)}...`;
+}
+
+export function titleize(value) {
+ return String(value ?? '').split(/[-_]/u).filter(Boolean).map((part) => part[0]?.toUpperCase() + part.slice(1)).join(' ') || 'Step';
+}
+
+export function safeErrorToken(value, fallback, maxLength = 120) {
+ const text = String(value ?? '').trim();
+ if (!text || containsPrivateValue(text)) return fallback;
+ const normalized = text.replace(/[^\w$.[\]:-]/gu, '_').slice(0, maxLength);
+ return containsPrivateValue(normalized) ? fallback : normalized;
+}
+
+export function buildApiErrorUiModel(errorLike) {
+ const error = typeof errorLike === 'object' && errorLike ? errorLike : { message: String(errorLike ?? 'Request failed.') };
+ const issues = Array.isArray(error.issues) ? error.issues.slice(0, 5).map((issue) => {
+ const path = safeErrorToken(issue?.path, '$.body');
+ const code = safeErrorToken(issue?.code, 'validation_failed', 64);
+ return { path, code, ...apiIssueHint(path) };
+ }) : [];
+ return {
+ message: String(error.message ?? 'Request failed.'),
+ status: Number.isFinite(Number(error.status)) ? Number(error.status) : null,
+ code: safeErrorToken(error.code, '', 64),
+ correlationId: safeErrorToken(error.correlationId, '', 96),
+ issues
+ };
+}
+
+export function renderApiErrorPanel(heading, error) {
+ const model = buildApiErrorUiModel(error);
+ return statePanel('error', heading, model.message, false, renderApiErrorRecovery(model));
+}
+
+export function renderApiErrorRecovery(model) {
+ const issues = model.issues.length
+ ? `Fix this field ${model.issues.map((issue) => `${escapeHtml(issue.label)} ${escapeHtml(issue.detail)} ${escapeHtml(issue.path)} · ${escapeHtml(issue.code)} `).join('')} `
+ : '';
+ const correlation = model.correlationId
+ ? `Correlation ${escapeHtml(model.correlationId)}
`
+ : '';
+ return `${issues}${correlation}`;
+}
+
+export function statePanel(kind, heading, copy, button = false, extra = '') {
+ const actions = button
+ ? 'Run local demo Reset demo
'
+ : '';
+ return `${escapeHtml(heading)} ${escapeHtml(copy)}
${extra}${actions} `;
+}
+
+function apiIssueHint(path) {
+ const direct = API_ISSUE_HINTS.get(path);
+ if (direct) return { label: direct[0], detail: direct[1] };
+ if (path.startsWith('$.body.')) return { label: titleize(path.slice('$.body.'.length)), detail: 'Review this field and use only supported local values.' };
+ return { label: 'Request field', detail: 'Review the highlighted request field and retry with supported local values.' };
+}
+
+function containsPrivateValue(value) {
+ return /(?:\/Users|\/private|\/var\/folders|https?:|file:|token|secret|api[_-]?key|authorization|cookie)/iu.test(value);
+}
diff --git a/docs/adr/0023-production-rust-code-intelligence-engine.md b/docs/adr/0023-production-rust-code-intelligence-engine.md
new file mode 100644
index 00000000..fcd3e4cc
--- /dev/null
+++ b/docs/adr/0023-production-rust-code-intelligence-engine.md
@@ -0,0 +1,44 @@
+# ADR 0023: Production Rust code-intelligence engine
+
+## Status
+
+Accepted.
+
+## Decision
+
+Rust owns the production code-intelligence engine: repository discovery,
+language detection, parsing, structural extraction, graph construction, and
+incremental index updates. The engine emits a versioned, provider-neutral
+JSON Lines protocol. It does not expose Tree-sitter node shapes, grammar crate
+names, provider identifiers, absolute paths, or source bodies as public
+identity.
+
+Node.js remains the product shell. It owns the CLI, loopback Control API,
+governed memory workflow, read-only MCP surface, and web workbench. Node.js
+starts the native engine, validates every protocol record, applies product
+bounds and authorization, and converts results into Memory Recall contracts.
+The process boundary keeps parser failure isolated from the long-running
+product services.
+
+Indexes and caches produced by the engine are derived local state. Canonical
+memory, approvals, handoffs, and provenance continue to use the existing
+governed stores and protocols. A derived index may be deleted and rebuilt
+without changing canonical product state.
+
+Published npm packages include signed platform binaries for supported targets.
+Normal installation and use require no local Rust toolchain. Unsupported
+platforms fail with a clear diagnostic instead of compiling during install or
+silently falling back to a weaker parser.
+
+## Consequences
+
+- The existing Rust Tree-sitter implementation becomes the only production
+ parser path after compatibility and benchmark gates pass.
+- The current JavaScript and TypeScript provider remains available during the
+ measured migration, then becomes an explicit fallback or is retired.
+- The native protocol must be deterministic, bounded, versioned, and covered by
+ compatibility fixtures before the production switch.
+- Parser and index data stay local by default. Network access is not part of
+ scanning, indexing, or querying.
+- Native release artifacts require checksums, signatures, smoke tests, and npm
+ package verification for every supported platform.
diff --git a/docs/adr/0024-rust-sqlite-source-index.md b/docs/adr/0024-rust-sqlite-source-index.md
new file mode 100644
index 00000000..850568cf
--- /dev/null
+++ b/docs/adr/0024-rust-sqlite-source-index.md
@@ -0,0 +1,54 @@
+# ADR 0024: Separate Rust SQLite source index
+
+## Status
+
+Accepted.
+
+## Decision
+
+The production code-intelligence index is a separate embedded SQLite database
+owned by the Rust engine. Its default location is
+`.local/source-index/index.v1.sqlite`. It stores derived structural records,
+content hashes, evidence spans, unresolved relationships, coverage, generation
+metadata, and health state. It never stores raw source bodies, absolute
+checkout paths, credentials, environment values, or command output.
+
+The source index is not part of `oaf-store`. Governed memory, proposals,
+approvals, supersession, handoffs, and canonical product state remain in their
+existing memory stores. Source intelligence is derived and rebuildable, but a
+corrupt index is preserved until an explicit repair plan is confirmed.
+
+Rust owns migrations, transactions, refresh, dependency invalidation, watcher
+scheduling, health checks, and read-only structural queries. Node owns the CLI,
+MCP, Control API, and browser boundaries. Node sends closed JSON Lines requests,
+validates closed responses, enforces process and output limits, and never sends
+raw SQL.
+
+Each successful writer transaction commits a complete generation and switches
+the active generation atomically. Readers continue to use the previous active
+generation until commit succeeds. A no-change refresh performs no writer
+transaction. One previous valid generation is retained by default for bounded
+rollback evidence.
+
+Read-only open never creates, migrates, repairs, or refreshes an index. Doctor
+reports stable health codes and an explicit repair plan. Rebuild repair is a
+separate confirmed writer operation and preserves the invalid database as a
+bounded local backup.
+
+The current JS/TS JSON index remains a compatibility path during the measured
+migration. Phase 3 does not change the public engine default, MCP behavior, or
+npm binary packaging. Those changes require later distribution and benchmark
+gates.
+
+## Consequences
+
+- Canonical memory cannot be mutated by source indexing or repair.
+- All fourteen Tier 1 languages can use one normalized persistent store.
+- Generation transactions isolate readers from interrupted refresh work.
+- Index lifecycle and query operations need separate closed protocol schemas.
+- Migration, corruption, interruption, concurrency, and process-restart tests
+ become release gates.
+- JSON remains bounded export and compatibility output, not the scalable
+ production storage format.
+- Reverting Phase 3 leaves the current JS graph, JSON index, MCP tools, and
+ governed memory available.
diff --git a/docs/api/openapi.yaml b/docs/api/openapi.yaml
index 6e39cd6b..f808a5ac 100644
--- a/docs/api/openapi.yaml
+++ b/docs/api/openapi.yaml
@@ -501,7 +501,7 @@ paths:
schema: { $ref: '#/components/schemas/ContextGraphPreviewRequest' }
responses:
'200':
- description: Bounded read-only native JS/TS source graph preview.
+ description: Bounded read-only source graph preview from a current native index, or a sanitized unavailable result with the exact native recovery reason.
headers:
x-correlation-id: { schema: { $ref: '#/components/schemas/CorrelationId' } }
content:
@@ -600,7 +600,7 @@ components:
type: string
minLength: 1
maxLength: 512
- pattern: '^(?!/)(?!.*(?:^|/)\\.\\.?($|/))(?!.*\\\\)(?!.*\\s)(?!.*://)(?!.*(?:^|/)(?:Users|private|node_modules|\\.git|\\.local)(?:/|$))(?!.*(?:^|/)var/folders(?:/|$))[A-Za-z0-9._@+~,-]+(?:/[A-Za-z0-9._@+~,-]+)*$'
+ pattern: "^(?!/)(?![^/]*%)(?![A-Za-z][A-Za-z0-9+.-]*:)(?!\\.\\.(?:/|$))(?!.*\\/\\.\\.(?:/|$))(?!.*%(?:2[eEfF]|3[aA]|5[cC]|25))[A-Za-z0-9._~!$&'()*+,;=@%/\\[\\]-]{1,512}(?:#L[0-9]+-L[0-9]+)?$"
RecallMapQuery:
type: string
minLength: 1
@@ -610,7 +610,7 @@ components:
type: object
additionalProperties: false
required: [workspaceId, changedLocators]
- maxProperties: 3
+ maxProperties: 4
properties:
workspaceId: { $ref: '#/components/schemas/RecallMapWorkspaceId' }
changedLocators:
@@ -619,6 +619,7 @@ components:
uniqueItems: true
items: { $ref: '#/components/schemas/RecallMapChangedLocator' }
query: { $ref: '#/components/schemas/RecallMapQuery' }
+ refresh: { type: boolean }
RecallMapWorkspaceId:
type: string
maxLength: 128
@@ -870,7 +871,7 @@ components:
type: string
minLength: 1
maxLength: 512
- pattern: "^(workspace://)?(?!/)(?!.*\\.\\.)(?!.*\\\\)(?!.*\\s)(?!.*(?:^|/)Users(?:/|$))(?!.*(?:^|/)private(?:/|$))(?!.*(?:^|/)var/folders(?:/|$))[A-Za-z0-9._~!$&'()*+,;=:@%/-]{1,512}$"
+ pattern: "^(?:workspace://)?(?!/)(?![^/]*%)(?![A-Za-z][A-Za-z0-9+.-]*:)(?!\\.\\.(?:/|$))(?!.*\\/\\.\\.(?:/|$))(?!.*%(?:2[eEfF]|3[aA]|5[cC]|25))[A-Za-z0-9._~!$&'()*+,;=@%/\\[\\]-]{1,512}(?:#L[0-9]+-L[0-9]+)?$"
tokenBudget: { type: integer, minimum: 1, maximum: 100000 }
ContextPackResponse:
type: object
@@ -1236,6 +1237,7 @@ components:
sampleLimit: { type: integer, minimum: 1, maximum: 50 }
maxFiles: { type: integer, minimum: 1, maximum: 1000 }
maxFileBytes: { type: integer, minimum: 1024, maximum: 1048576 }
+ refresh: { type: boolean }
ContextGraphPreviewResponse:
type: object
additionalProperties: false
@@ -1245,7 +1247,13 @@ components:
previewVersion: { const: oaf-source-graph-preview-1.0.0 }
workspaceId: { $ref: '#/components/schemas/WorkspaceId' }
generatedAt: { type: string, format: date-time }
- graph: { type: object }
+ graph:
+ type: object
+ properties:
+ summary:
+ type: object
+ properties:
+ coverage: { $ref: '#/components/schemas/SourceGraphCoverage' }
search: { type: object }
trace: { type: [object, 'null'] }
impact: { type: [object, 'null'] }
@@ -1265,6 +1273,62 @@ components:
graphDatabaseUsed: { const: false }
rawBodyIncluded: { const: false }
sourceSlicesRead: { const: false }
+ SourceGraphCoverage:
+ type: object
+ properties:
+ status: { enum: [complete, partial] }
+ ignoredFileCount: { type: integer, minimum: 0, maximum: 1000000000 }
+ ignoredDirectoryCount: { type: integer, minimum: 0, maximum: 1000000000 }
+ ignoredSamples:
+ type: array
+ maxItems: 100
+ items: { type: string, minLength: 1, maxLength: 512 }
+ ignoreRuleFingerprint: { type: string, pattern: '^sha256:[a-f0-9]{64}$' }
+ ignoreFileLocators:
+ type: array
+ maxItems: 100
+ items: { type: string, minLength: 1, maxLength: 512 }
+ unsupportedExtensionCounts:
+ type: object
+ maxProperties: 32
+ additionalProperties: { type: integer, minimum: 0, maximum: 1000000000 }
+ candidateNodeCount: { type: integer, minimum: 0, maximum: 1000000000 }
+ representedNodeCount: { type: integer, minimum: 0, maximum: 20000 }
+ omittedNodeCount: { type: integer, minimum: 0, maximum: 1000000000 }
+ candidateNodeKindCounts: { $ref: '#/components/schemas/SourceGraphNodeCountMap' }
+ representedNodeKindCounts: { $ref: '#/components/schemas/SourceGraphNodeCountMap' }
+ omittedNodeKindCounts: { $ref: '#/components/schemas/SourceGraphNodeCountMap' }
+ candidateEdgeCount: { type: integer, minimum: 0, maximum: 1000000000 }
+ representedEdgeCount: { type: integer, minimum: 0, maximum: 50000 }
+ omittedEdgeCount: { type: integer, minimum: 0, maximum: 1000000000 }
+ candidateEdgeKindCounts: { $ref: '#/components/schemas/SourceGraphEdgeCountMap' }
+ representedEdgeKindCounts: { $ref: '#/components/schemas/SourceGraphEdgeCountMap' }
+ omittedEdgeKindCounts: { $ref: '#/components/schemas/SourceGraphEdgeCountMap' }
+ reasonCodes:
+ type: array
+ maxItems: 16
+ uniqueItems: true
+ items: { type: string, minLength: 1, maxLength: 64 }
+ SourceGraphNodeCountMap:
+ type: object
+ maxProperties: 4
+ additionalProperties: false
+ properties:
+ file: { type: integer, minimum: 0, maximum: 1000000000 }
+ chunk: { type: integer, minimum: 0, maximum: 1000000000 }
+ symbol: { type: integer, minimum: 0, maximum: 1000000000 }
+ module: { type: integer, minimum: 0, maximum: 1000000000 }
+ SourceGraphEdgeCountMap:
+ type: object
+ maxProperties: 6
+ additionalProperties: false
+ properties:
+ contains: { type: integer, minimum: 0, maximum: 1000000000 }
+ defined_in: { type: integer, minimum: 0, maximum: 1000000000 }
+ imports: { type: integer, minimum: 0, maximum: 1000000000 }
+ exports: { type: integer, minimum: 0, maximum: 1000000000 }
+ calls: { type: integer, minimum: 0, maximum: 1000000000 }
+ references: { type: integer, minimum: 0, maximum: 1000000000 }
HarnessSetupPlanRequest:
type: object
additionalProperties: false
diff --git a/docs/architecture/native-providers.md b/docs/architecture/native-providers.md
index afbfbe88..5896b46d 100644
--- a/docs/architecture/native-providers.md
+++ b/docs/architecture/native-providers.md
@@ -15,8 +15,7 @@ Native providers make the local product useful without optional integrations. Th
| `native.policy.deterministic` | on | Contextual policy decisions for resources, tools, data classes, approvals, and budgets |
| `native.context-candidate.exact` | on | Workspace-scoped exact candidate lookup by canonical record ID |
| `native.context-candidate.lexical` | on | Deterministic lexical candidate lookup over safe record fields |
-| `native.context-candidate.ast-code` | on | Dependency-free JS/TS chunk and symbol candidate source |
-| `native.context-candidate.graph` | on | Locator-only candidate source over the derived JS/TS source graph |
+| `native.code-intelligence.rust` | on | Verified packaged Rust code intelligence over the explicit local SQLite index |
| `native.context-manifest.local` | on | Workspace-scoped immutable local context manifest persistence |
| `native.model.ollama` | off | Explicit loopback local-model generation |
| `native.tool.brokered-local` | on | Reviewed checksum-pinned local tool execution behind brokers |
@@ -130,7 +129,7 @@ external writes disabled.
## Context candidate-source providers
-The native exact, lexical, and AST-code providers implement
+The native exact and lexical providers implement
`CandidateSourcePort` version `1.0.0`. Exact and lexical remain the
conformance baselines for OAF-010 candidate generation. None of these sources
is a storage engine or final selector.
@@ -153,24 +152,17 @@ Both sources require contextual policy allow decisions before invocation and
candidate-level policy allow decisions before output. Secret data is denied for
model-context candidate generation by default.
-The AST-code source is a dependency-free static JS/TS chunker and symbol index
-for workspace files. It records parser version, workspace locator, byte and
-line ranges, scope chain, symbol/import/export metadata, sibling locators,
-signature hashes, exact reconstruction hashes, parse-error state, file
-outlines, repository outlines, and content-hash journals without returning raw
-source bodies or absolute local paths. It supports read-only definition,
-reference, import, export, caller, callee, file-outline, and repository-outline
-queries over the derived index. It is not a full semantic parser, language
-server, graph index, executor, or Tree-sitter runtime.
-
OAF-011 preserves exact and lexical providers as conformance baselines. Hybrid
fusion, global reranking, diversity, category caps, and token budgeting live in
`packages/context-compiler/src/index.mjs`, not in candidate-source providers.
Vector, temporal, preference, and episode source kinds remain declared but
-unavailable until later tasks add explicit providers. The native graph source
-is available now as a locator-only wrapper over the derived JS/TS source graph;
-it is still not a graph database, semantic retrieval provider, or authority
-surface.
+unavailable until later tasks add explicit providers.
+
+The packaged Rust code-intelligence provider owns source structure, search,
+trace, impact, and graph projections. It reads only a healthy, current local
+SQLite index, returns locator-only bounded metadata, and requires an explicit
+native build, refresh, or repair action when the index is unavailable. It is
+not a graph database, semantic retrieval provider, or authority surface.
## Context manifest provider
diff --git a/docs/architecture/protocol-bridges.md b/docs/architecture/protocol-bridges.md
index 2c9b6b53..c8c54cf8 100644
--- a/docs/architecture/protocol-bridges.md
+++ b/docs/architecture/protocol-bridges.md
@@ -82,9 +82,16 @@ Dry-run is the default and writes nothing. The preview uses the same
harness-setup planner and prints the ready-to-paste stdio server:
```text
-npm --silent run recall -- mcp server --read-only --root . --stdio
+npm --silent run recall -- mcp server --read-only --engine native --root . --stdio
```
+Installer-generated servers use strict native selection. The install
+does not build or refresh a graph index: its report prints `indexBuildCommand`
+as a separate explicit write. Without a healthy, current native index, the
+read-only structural tools return the exact build, refresh, repair, schema, or
+package action. They never silently switch engines. Direct `mcp server` commands
+without `--engine` use the same native selection.
+
Applying the preview requires the matching plan fingerprint from that dry-run:
```bash
diff --git a/docs/benchmarks.md b/docs/benchmarks.md
index 468858de..c52aa90f 100644
--- a/docs/benchmarks.md
+++ b/docs/benchmarks.md
@@ -3,9 +3,10 @@
This page is the source of truth for Memory Recall's public measurements. The
artifact shape is stated for each benchmark below: most CLI benches emit JSON
with a `reportFingerprint`, while the Context Recall script emits JSON without
-that field and the product-proof commands deliberately render summaries. None
-creates a versioned result artifact in this repository. Save the output yourself
-if you need to retain a run.
+that field and the product-proof commands deliberately render summaries. The
+Phase 0 baseline, Phase 1 JS/TS compatibility receipt, Phase 2 Tier 1 audit, and
+Phase 3 source-index receipt are the committed versioned code-intelligence
+results. Save other output yourself if you need to retain a run.
All token figures are local delivery estimates using `ceil(chars/4)`. They are
not provider-billed tokens, production-cost estimates, or production-latency
@@ -22,6 +23,202 @@ with `npm run recall --`.
| Temporal current truth | 10/10 correct and clean current answers against the included evolving-fact fixture | Synthetic temporal fixture; not a token-saving result |
| Structured-ingest sufficiency | 12/12 checkout-derived provider/default answers present after structured ingest | In-repo sufficiency check; not real-world QA |
+## Retired JavaScript comparison receipts
+
+The Phase 0 baseline and Phase 1 JavaScript-versus-Rust comparison scripts and
+receipts were retired with the duplicate JavaScript intelligence path. They are
+not current benchmark evidence and do not support a parity or leadership claim.
+Current evidence starts with the Tier 1 audit below.
+
+## Code-intelligence Phase 2 Tier 1 audit
+
+The committed aggregate is
+`evals/code-intelligence/results/phase2-tier1-summary.json`. Reproduce it after
+building the local release Rust binary:
+
+```bash
+node scripts/code-intelligence-phase2-tier1.mjs --check
+```
+
+The aggregate binds five batch receipts covering 14 fixtures and all 43 pinned
+repositories at their exact commits and bounded scopes. Each graph is built
+twice with a 5,000-file, 512 KiB-per-file, 5,000-node, and 10,000-edge limit.
+The stored audit records 50,664 nodes, 113,640 edges, 79,816,280 serialized
+graph bytes, 22,794.19 ms summed first-run wall time, 23,570.05 ms summed
+second-run wall time, and 254,752 KiB peak evaluator RSS on the recorded macOS
+arm64 run. These machine-specific resource values are evidence receipts, not
+performance promises.
+
+All 59 cases are deterministic and pass their reviewed truth: 0 duplicate
+canonical symbols, 0 repository parse failures, 0 network calls, 0 model calls,
+0 canonical-memory writes, and 0 workspace writes. Five repository scopes hit a
+node or edge budget and store only safe reason/count diagnostics. The audit
+does not hide those omissions.
+
+Across 154 Tier 1 capability cells, 75 meet the Phase 2 evidence floor, none has
+a recorded floor failure, 78 applicable rows remain unmeasured, and one row is
+explicitly not applicable. A row
+requires reviewed evidence from its fixture and at least three distinct pinned
+repositories before it can say `meets-floor`. Every Tier 1 language remains
+overall `unmeasured`. Java, Go, Rust, Kotlin, C#, PHP, Ruby, Swift, C, and C++
+imports now have reviewed evidence from their fixtures plus three pinned
+repositories per language. PHP evidence covers dotted namespace coordinates and
+exact local-module resolution, Ruby preserves full `require` paths, Swift
+preserves scoped coordinates, and C/C++ preserve angle-bracket header paths.
+Go and Rust exports also meet the sampled floor across one fixture and three
+pinned repositories each. Go export evidence omits exported fields and interface
+methods. Rust exact evidence covers unrestricted top-level `pub` items and
+simple-symbol `pub use`; grouped and glob re-exports remain outside the passing
+sample.
+Dart URI-level module re-exports also meet the sampled floor across one fixture
+and three pinned repositories. Local relative exports and self-package
+`package:` URIs resolve exactly when the scan root is a Dart package root or
+its `lib` directory. `show` and `hide` symbol filtering remain unmeasured and
+outside the passing sample.
+Dart calls also meet the sampled fixture-plus-three-repository floor. In the
+Flutter sample, `BookstoreAuth.of(context)` resolves to the workspace method and
+the same-name `GoRouter.of(context)` decoy does not. This does not establish
+general framework or monorepo call resolution.
+Dart heritage meets the sampled fixture-plus-three-repository floor. Flutter
+keeps `_BookstoreState` attached only to the direct outer `State` superclass,
+rejects the generic argument `Bookstore` as heritage, and retains the sampled
+mixin edge. Shelf's `RouterParams on Request` edge remains explicitly
+unresolved, while HTTP's `BaseClient implements Client` edge resolves exactly.
+Generic substitution, compiler-level inference, and broader framework heritage
+remain unmeasured.
+Kotlin calls meet the sampled floor for callsite-owner attribution. In Now in
+Android, the `UserNewsResource` constructor owns the line-45 `map` call while the
+line-57 `map` call is not attributed to it. The sampled target remains unresolved;
+this does not establish general typed, framework, or monorepo call resolution.
+Kotlin types meet the sampled fixture-plus-three-repository floor. Coroutines
+binds `InlineList(element)` without mislabeling the generic `ArrayList(4)`
+line, and Ktor binds `RoutingResolveTraceEntry(...)` without confusing it with
+`RoutingResolveTrace`. Generic constructor calls and property initializer
+constructions remain missed; `List(size) { ... }` can appear as an unresolved
+construction. Full Kotlin type inference, generic substitution, nullability
+flow, overload resolution, and compiler-equivalent analysis remain unmeasured.
+C++ types meet the sampled fixture-plus-three-repository floor. The fmt case
+keeps `utf8_system_category` as a class and rejects `FMT_STRING(...)` as a
+construction edge. General preprocessor expansion, template analysis, and C++
+type resolution remain unmeasured.
+C++ heritage meets the sampled fixture-plus-three-repository floor for direct
+base specifiers. The reviewed cases bind `ItemService` to `ItemLoader`,
+`ApproxMatcher` to `MatcherBase`, `utf8_system_category` to unresolved external
+`error_category`, and `lexer` to `lexer_base`. Generic type arguments and a
+class referenced from a body are explicit negative decoys. Template
+substitution, alias expansion, dependent names, and compiler-equivalent
+inheritance analysis remain unmeasured.
+Grouped PHP imports such as `use Foo\{Bar, Baz};` remain unsupported and
+unmeasured; they were not counted in the passing sample. Python has exact
+framework-route evidence from narrow
+FastAPI, Flask, and Django application scopes. The broader FastAPI and Flask
+implementation scopes and the Requests client remain in the corpus for their
+other reviewed capabilities. Documentation examples do not qualify as routes.
+Only C heritage is recorded as not applicable because C has no language-level
+inheritance, interface, trait, protocol, or mixin relationship. The native
+engine stays an unbundled preview; the npm, MCP, and web defaults remain JS.
+Competitors remain unmeasured, and the receipt makes no parity, leadership,
+multi-repository, or scale claim.
+
+## Code-intelligence Phase 3 source index
+
+The committed receipt is
+`evals/code-intelligence/results/phase3-source-index.json`. Verify its pinned
+inputs, fingerprint, safety boundary, and pass decision with:
+
+```bash
+node scripts/code-intelligence-phase3-index.mjs --check
+```
+
+Run the script without `--check` to fetch the same exact commits into temporary
+directories and remeasure them. The receipt records the exact Memory Recall
+checkout commit and whether that checkout was dirty at measurement time. The
+current environment is macOS 25.5 arm64, Apple M2 Max, Node 22.22.3. It covers a
+600-file TypeScript dependency fixture, the pinned
+HashiCorp go-multierror repository, the pinned Express repository, and the
+pinned TypeScript compiler-transformers scope.
+
+Across 781 files, 6,646 nodes, and 15,540 edges, the four cold builds had a
+machine-specific p50 of 187.77 ms and maximum of 883.291 ms. Warm status p50
+was 21.763 ms; no-change refresh p50 was 21.367 ms. The 600-file fixture parsed
+zero files on an exact no-op refresh, 11 files after the sampled isolated file
+change, and 5 files after the sampled dependency-impact change. All no-op and
+reader checks preserved the exact SQLite bytes and modification time.
+
+The receipt stores five-sample exact, neighborhood, impact, and trace timings,
+response bytes, database sizes, changed/reused counts, evaluator RSS, omissions,
+and safe diagnostics per case. These are machine-specific preview measurements,
+not latency promises. The engine made no network or model calls; the benchmark
+harness made three network fetches to obtain the pinned repositories. It does
+not measure a packaged native binary, competitors, multi-repository behavior, or
+million-node scale, so it makes no parity or leadership claim.
+
+## Code-intelligence Phase 4 intelligence
+
+The committed receipt is
+`evals/code-intelligence/results/phase4-intelligence.json`. Verify its
+fingerprint, pass decision, evidence integrity, and claim boundary with:
+
+```bash
+node scripts/code-intelligence-phase4-intelligence.mjs --check
+```
+
+The local fixture builds four disconnected TypeScript areas plus one Next.js
+route-to-handler call chain. Five repeated reads prove deterministic exact,
+lexical, and one-hop structural search alongside bounded communities and an
+evidence-backed process. The same fixture proves that an outbound depth-two
+calls-only query retains both call steps and their source-backed endpoints while
+excluding other edge kinds. Every query stays below the bounded two-second deadline
+and preserves the exact SQLite bytes and modification time. The committed
+receipt records the machine-specific p95 values.
+
+This is a deterministic local correctness and deadline gate, not a competitor
+benchmark or a general latency promise. It makes no parity, leadership,
+multi-repository, packaged-binary, or million-node claim.
+
+## Code-intelligence Phase 5 cross-service gate
+
+Verify `evals/code-intelligence/results/phase5-cross-service.json` with:
+
+```bash
+node scripts/code-intelligence-phase5-cross-service.mjs --check
+```
+
+Five TypeScript fixture reads prove a gateway-to-orders import, call, trace,
+and process. Negative cases and bounds pass, reads preserve SQLite, and the
+recorded macOS arm64 p95 was 9.603 ms. This is single-repository evidence; no
+registry, multi-repository, parity, leadership, or scale claim is made.
+
+## Native package consumer gate
+
+Run the checkout-only installed-product gate after a release build:
+
+```bash
+cargo build --release -p oaf --manifest-path rust/Cargo.toml --locked
+node scripts/native-code-intelligence-consumer-smoke.mjs
+```
+
+On the reviewed macOS arm64 run, the platform tarball contained exactly one
+verified native binary and installed beside the root tarball without registry
+access or install scripts. With Cargo and rustc unavailable at runtime, the
+installed provider returned parser-produced graph evidence for all fourteen
+Tier 1 languages and completed SQLite build, status, and query operations. The
+gate also checks checksum/version selection, source and governed-memory
+preservation, and unchanged installed package bytes. It is a current-platform
+consumer gate, not cross-platform, signing, publication, parity, or leadership
+evidence.
+
+The same gate removes both packages, verifies that the executable and package
+roots are gone while the workspace SQLite bundle and governed memory are
+unchanged, then installs the exact same tarballs into a fresh prefix and reopens
+the existing generation for representative TypeScript, Python, and Go queries.
+That proves same-version reinstall survivability, not cross-version downgrade.
+
+The five-target Rust CI matrix reuses this installed-consumer gate with the
+exact unsigned tarball produced by each native runner. Only the macOS arm64 lane
+has been reproduced locally; the workflow configuration does not count as a
+passing result for the other four targets.
+
## Dataset
| Claim | Dataset |
@@ -114,13 +311,20 @@ recall graph stats --root . --format summary
recall mcp inspect --read-only --root . --format summary
```
-`map` and `graph stats` cover the implemented bounded JS/TS static graph.
+`map` and `graph stats` cover the implemented bounded native SQLite index.
`context handoff`, `memory refine`, and `mcp inspect` expose their own
safeguards and status fields. Treat graph and handoff token reports as live
local measurements, not fixed provider-billing or cross-repository claims.
## Methods without a headline number
+`npm run source-graph:large-smoke` creates a temporary 1,100-file JS fixture,
+exercises the 1,000-file default scan bound, builds and reloads the persistent
+index, changes one represented file, and verifies that refresh parses one file
+while reusing 999 shards. The JSON includes cold, warm, and one-file refresh
+times plus graph and index sizes. Those values are machine-specific and are not
+a production latency or million-node claim.
+
`recall bench locomo --read-only --root . --dataset evals/locomo/smoke.v1.json --budget 512 --limit 4 --format json`
is a model-free retrieval-coverage method. The committed smoke fixture contains
one conversation and three questions. Its report explicitly says it does not
diff --git a/docs/implementation/MEMORY_RECALL_COMPLETION_MATRIX.md b/docs/implementation/MEMORY_RECALL_COMPLETION_MATRIX.md
new file mode 100644
index 00000000..989f4636
--- /dev/null
+++ b/docs/implementation/MEMORY_RECALL_COMPLETION_MATRIX.md
@@ -0,0 +1,203 @@
+# Memory Recall completion matrix
+
+Snapshot date: 2026-07-19
+
+Branch: `codex/memory-recall-orientation-workbench`
+
+Initial matrix commit: `dc8fb91`
+
+Current evidence commit: `82b10e0`
+
+Public registry rechecked 2026-07-18: `memory-recall@1.1.0`; all five `@memory-recall/native-*` packages returned npm `E404`.
+
+This is the controlling proof ledger for the polyglot code-intelligence and stable-release goal. A green narrow test does not close a broader row. The original completion criteria remain unchanged.
+
+## Status vocabulary
+
+| Status | Meaning |
+| --- | --- |
+| Proven | Current authoritative evidence covers the full stated row. |
+| Incomplete | Some implementation or proof exists, but the full row is not established. |
+| Contradicted | Current implementation or external state conflicts with the requirement. |
+| Missing | No authoritative implementation or proof was found. |
+
+## Release identity and semantic version
+
+| ID | Requirement | Status | Authoritative evidence | Required closure |
+| --- | --- | --- | --- | --- |
+| V-1 | Ship one normal stable release, not a beta, preview, RC, or partial package. | Incomplete | `package.json` now selects stable major `2.0.0`; no publication is authorized or proven. The frozen tarball, five remote targets, registry proof, and published-package smoke still remain. | Pass every local and remote final gate, then publish exactly one stable `2.0.0` release in native-first order. |
+| V-2 | Do not treat the approximately 89,000-line expansion as an assumed patch. | Proven | The published baseline is `1.1.0`; the compatibility audit records breaking distribution, MCP-config, Recall Map wire, default-engine, and shipped Rust-source contracts. The source line is explicitly `2.0.0`. | Keep every release artifact on the selected major line; do not downgrade the release classification. |
+| V-3 | Preserve the exact original completion criteria. | Proven | This matrix maps the approved polyglot design, the active goal, and the ten stable-release priorities without redefining success. | Keep this ledger current after each slice. |
+
+## Product target
+
+| ID | Requirement | Status | Authoritative evidence | Required closure |
+| --- | --- | --- | --- | --- |
+| T-1 | Replace GitNexus for developer and coding-agent workflows. | Missing | `evals/code-intelligence/results/phase2-tier1-summary.json` explicitly denies parity; the Phase 8 test uses a fake GitNexus executable and one Go fixture. | Run identical pinned-corpus task and performance comparisons against the real permitted GitNexus artifact and file baselines. |
+| T-2 | Meet or beat GitNexus across the fourteen Tier 1 languages. | Incomplete | Phase 2 has 14 fixtures and 43 repositories. Of 154 capability rows, 75 meet the sampled floor, 78 applicable rows are unmeasured, and one row is explicitly not applicable. | Resolve every applicable row with fixture and capability-specific evidence from at least three pinned repositories per language. |
+| T-3 | Promote extra languages only after equal gates. | Proven | `PROJECT_STATUS.json` and `docs/usage/code-intelligence-support.md` keep Lua, Bash, SQL, Objective-C, Scala, R, Julia, and Zig experimental. | Do not promote them until the Tier 1 gate is closed and equivalent evidence exists. |
+| T-4 | Keep installation to `npm install -g memory-recall` without Cargo or rustc. | Incomplete | `scripts/native-code-intelligence-consumer-smoke.mjs` proves the packed root plus native tarball on darwin-arm64; the other four platforms and registry install are unproven. | Pass clean packed and registry-shaped installs on all five targets with Cargo/rustc absent. |
+
+## Architecture and invariants
+
+| ID | Requirement | Status | Authoritative evidence | Required closure |
+| --- | --- | --- | --- | --- |
+| A-1 | Rust owns production code intelligence; Node owns transport, validation, memory, CLI, MCP, API, and UI. | Incomplete | ADR 0023 defines the boundary. CLI, MCP, Control API, and web select the packaged Rust SQLite index and fail closed with exact recovery guidance. Current-host packed browser proof confirms the native Control API and Map path. The duplicate JavaScript intelligence implementation and tests are deleted. | Prove all five release targets. |
+| A-2 | Use one versioned provider-neutral graph and index schema. | Proven | `packages/protocol/schemas/code-intelligence-graph.schema.json`, index request/response schemas, provider wrapper, protocol validation, and compatibility tests. | Preserve schema compatibility through the final version audit. |
+| A-3 | Use a persistent incremental embedded index; JSON is bounded export/debug output only. | Incomplete | Phase 3 proves SQLite generations and bounded incremental refresh over 781 files. Production CLI, MCP, API, and web reads use the SQLite index without mutating it; the current-host packed browser proof preserves the prebuilt SQLite bundle during normal and stale-index reads. No duplicate intelligence store remains. | Prove the final five-target distribution gate. |
+| A-4 | Persist content hashes and handle changed, added, deleted, and renamed files. | Incomplete | Rust index refresh and focused tests prove changed/added/deleted invalidation; exact rename behavior is not separately evidenced in the current receipts. | Add one rename regression proving identity/history behavior and refresh equivalence. |
+| A-5 | Dependency invalidation is bounded and correct. | Proven | Phase 3 dependency-closure refresh receipt and Rust index tests pass with zero unresolved/omitted rows in the measured cases. | Revalidate at the large-repository gate. |
+| A-6 | Bounded watch mode works reliably. | Incomplete | Watcher coordination exists and focused tests pass; no cross-platform, crash, or large-repository watcher gate is recorded. | Prove debounce, concurrent changes, deletion/rename, restart, and all supported platforms. |
+| A-7 | Index migrations and corruption recovery are safe. | Incomplete | SQLite migrations, doctor, and repair exist with focused tests. Packaged cross-version migration, downgrade, and corrupt-index recovery are not proven on all targets. | Add packaged prior-version migration, corruption, repair, downgrade refusal/rollback, and clean reinstall gates. |
+| A-8 | Freshness is explicit and reads fail closed. | Proven | Native status hashes current source scope. Default MCP and the strict `auto`/`native-preview` aliases recheck freshness before structural calls, read only a healthy current committed generation, and return bounded actionable errors for every other state without building, repairing, or selecting JS. | Preserve the behavior after compatibility deletion and through packed cross-platform gates. |
+| A-9 | Multi-repository indexes load lazily and remain bounded. | Incomplete | The Rust SQLite registry supports up to eight indexes and one exact Go path. A release-binary regression now proves isolated TypeScript and Python repositories with same-name symbols, bounded qualified results, stale-index partial results, missing-index partial results, and no registry writes during reads. Lazy eviction and larger multi-repository measurements are still unproven. | Prove bounded lazy opening/eviction and representative larger multi-repository measurements. |
+| A-10 | Preserve local-first operation, workspace isolation, provenance, read-only MCP, no silent cloud fallback, and reviewed semantic memory. | Proven | Protocol schemas, 12-tool MCP tests, governed-memory tests, Phase 0-5 safeguards, and project defaults report zero model/network/canonical-memory writes for structural reads. | Re-run security and packed-product gates after the production-default cutover. |
+
+## Stable distribution chain
+
+| ID | Requirement | Status | Authoritative evidence | Required closure |
+| --- | --- | --- | --- | --- |
+| D-1 | Publish all five native packages before the root package. | Incomplete | The local Rust workflow now aggregates exactly five attested packages; the npm workflow publishes them in fixed order, verifies npm integrity, and reaches root publication only afterward. No remote run or publication is authorized or proven. | Run the exact five-target workflow at the frozen commit and prove the protected publication lane without bypass. |
+| D-2 | No root package may reference unpublished native packages. | Incomplete | Root `optionalDependencies` still references five `@memory-recall/native-*@2.0.0` packages that currently return npm `E404`. The workflow and the exported/direct root publisher now require the exact signed five-package native artifact directory, validate one version and commit, and re-verify registry integrity, provenance, and npm signature audit immediately before any root lookup or publication. The local guard passes; no remote protected run or registry proof exists. | Prove the same fail-closed guard in the remote protected workflow and publish no root until all five native packages pass it. |
+| D-3 | Root installation works without a Rust toolchain. | Incomplete | An isolated Darwin-arm64 lifecycle installs the single prepacked root tarball and its matching native tarball without Cargo/rustc, validates the installed package paths, exercises CLI and MCP, uninstalls, and reinstalls the same artifacts. Four platform lanes and registry installation remain unproven. | Run the identical consumer smoke on all five native runners using the exact release artifacts. |
+| D-4 | Validate target OS, CPU, libc, binary version, and exact package contents. | Incomplete | `.github/workflows/rust.yml` defines five runner identities and validates tarball contents; only darwin-arm64 has a retained local receipt. | Obtain successful retained receipts from all five GitHub matrix jobs at the frozen commit. |
+| D-5 | Verify binary and tarball checksums. | Incomplete | Native manifests and receipts carry SHA-256; the aggregate validator binds the exact tarball hash and npm integrity for all five packages before publication. Four remote receipts are missing. | Obtain and verify the complete frozen-commit artifact set from all five runners. |
+| D-6 | Produce complete native provenance and SBOM. | Incomplete | The local workflow produces file-complete SPDX 2.3 documents for each native target and the exact root tarball, with SHA-1/SHA-256 file checksums, package verification codes, tarball checksums, and version-qualified namespaces. The workflow binds both artifact classes to signed SBOM predicates. No remote attestation set exists. | Obtain and verify all root and native provenance and SBOM attestations from one successful frozen-commit run. |
+| D-7 | Sign supported native artifacts. | Incomplete | The local workflow uses `actions/attest@v4`; both the Rust aggregate and npm consumer verify exact repository, signer workflow, signer/source commit, and hosted runner. Remote attestations and any required platform code-signing proof remain absent. | Run the protected five-platform producer, retain the cryptographic attestations, and document whether macOS/Windows platform signing is additionally required. |
+| D-8 | Prove uninstall and clean reinstall. | Incomplete | The isolated Darwin-arm64 exact-artifact lifecycle proves MCP entry removal, neighboring-config preservation, package removal, workspace-state preservation, and same-version clean reinstall that reopens the existing index without rebuilding. | Repeat on all five targets and add cross-version upgrade, downgrade-refusal, and rollback cases. |
+| D-9 | Publish checksums, provenance, and SBOM with the stable release. | Incomplete | The protected workflow packs the root exactly once, records SHA-256 and SHA-512 integrity, uploads that artifact, attests its provenance and complete SPDX predicate, and later publishes those exact bytes. Registry verification requires exact root integrity plus both npm publish and SLSA predicates after the five equivalent native verifications. No remote evidence or authorized stable release exists. | Run the protected workflow at the frozen commit, retain the root and native evidence set, and attach it only during the authorized stable release. |
+
+## Fourteen-language support gate
+
+Phase 2 currently reports 75 `meets-floor` rows, 78 applicable `unmeasured` rows, and one explicit `not-applicable` row. No row is recorded as `does-not-meet-floor`, which means missing proof must not be relabeled as support.
+
+| ID | Requirement | Status | Authoritative evidence | Required closure |
+| --- | --- | --- | --- | --- |
+| L-1 | At least three pinned repositories exist for every Tier 1 language. | Proven | `evals/code-intelligence/corpus.v1.json` contains 43 pinned repositories; the corpus gate passes for all fourteen languages. | Preserve exact commits and source hashes in final comparison runs. |
+| L-2 | Declarations and structural symbols meet recall floors. | Incomplete | All languages have sampled declaration evidence, but capability coverage remains uneven and partial scopes exist. | Expand reviewed declarations per capability and keep recall at or above 95% for every language. |
+| L-3 | Packages, modules, imports, exports, and bindings resolve exactly. | Incomplete | All fourteen Tier 1 import rows meet the sampled floor. Go exports preserve specification-defined public identifiers; Rust exports preserve public visibility and re-export targets; Dart URI-level module re-exports preserve full coordinates and resolve local relative or self-package targets when scanning a package root or its `lib` directory. Each has fixture plus three-repository evidence. Nine export rows, Dart `show`/`hide`, broader Dart monorepo-root package discovery, and broader binding behavior remain unmeasured. | Add fixture plus three-repository truth for every remaining applicable package/export/binding row. |
+| L-4 | Cross-file resolution is exact and source-backed. | Incomplete | Selected language fixtures and Phase 3 dependency cases pass; no all-language capability gate exists. | Prove cross-file positive, negative, same-name decoy, and unresolved diagnostics per language. |
+| L-5 | Heritage, interfaces, traits, and protocols resolve. | Incomplete | Python, Dart, C++, and selected languages have sampled heritage. Dart has fixture plus three-repository evidence for a direct generic superclass, mixin, interface, and extension-on-type edge. C++ has the same breadth for direct bases while rejecting generic arguments and body references. Template substitution and most remaining heritage rows are unmeasured. | Add reviewed heritage truth for every remaining applicable language and explicit not-applicable decisions where the language lacks the construct. |
+| L-6 | Type and receiver inference resolves calls correctly. | Incomplete | TS and Python have reviewed inference evidence. Kotlin now has sampled constructor evidence with distinct target/line decoys, but generic constructors and property initializers remain missed and a standard-library factory can appear as unresolved construction. C++ includes a real class plus a macro-shaped constructor decoy; general preprocessor expansion, templates, and C++ type resolution remain unmeasured. Several language type/call rows remain unmeasured. | Prove same-name receiver disambiguation and confidence for every applicable Tier 1 language. |
+| L-7 | Calls meet at least 90% reviewed precision with confidence evidence. | Incomplete | Phase 2 sampled call precision passes where measured. Dart includes a typed Flutter call and a same-name wrong-callsite decoy. Kotlin includes fixture plus three-repository callsite-owner evidence and rejects a wrong-caller decoy, while the sampled target remains unresolved. Swift and several other call/type combinations remain unmeasured or governed-memory-limited. | Add reviewed positive/negative calls and confidence strategies per remaining language without weakening identity safety. |
+| L-8 | Entry points are detected for applicable applications and frameworks. | Incomplete | Selected fixtures expose `entry_point`; there is no capability row or three-repository gate per language. | Define applicability and prove real entry points or explicit not-applicable results. |
+| L-9 | Framework routes are detected without documentation/example false positives. | Incomplete | Python FastAPI, Flask, and Django meet a narrow reviewed floor; other applicable language/framework rows are unmeasured. | Add framework-specific truth for applicable languages and explicit unsupported diagnostics elsewhere. |
+| L-10 | Configuration resources and build/package manifests are modeled. | Incomplete | Python config is measured; most config rows are unmeasured. | Define per-language applicability and add reviewed manifest/config truth. |
+| L-11 | Impact is correct for each language. | Incomplete | Phase 4 now runs bounded impact probes on exact pinned JavaScript, TypeScript, and Go repositories, and Phase 5 proves one Go path. These are evidence-bearing probes, not reviewed impact truth across fourteen languages; Phase 2 impact rows remain unmeasured. | Prove forward/reverse impact with evidence and decoys on three repositories per applicable language. |
+| L-12 | Search, context, trace, dependencies, and processes work for each language. | Incomplete | Native provider and MCP contracts exist. Phase 4 runs the workflow families on exact pinned Express, Nest cats-sample, and Gin scopes in addition to the four-file fixture. Eleven languages and task-level truth remain open, and three repositories total do not satisfy the per-language corpus gate. | Run the full workflow set on the per-language pinned corpus with bounded outputs and task-level truth. |
+| L-13 | Results are deterministic and contain no duplicate canonical symbols. | Incomplete | Phase 2 sampled graphs are deterministic with zero recorded duplicates; five repository scopes report omissions and 78 applicable capability rows remain unmeasured. | Re-run determinism/duplicate checks for every completed capability and final packaged binaries. |
+| L-14 | Partial, unsupported, and not-applicable behavior is explicit. | Incomplete | Tier 1 applicability is now independent of evidence presence. All applicable unsupported or missing rows remain non-green; C heritage is the sole explicit not-applicable row with a language-semantic rationale. Seventy-eight applicable rows remain unmeasured. | Prove or explicitly fail every remaining applicable row without converting missing evidence into not-applicable support. |
+
+### Current unmeasured rows
+
+| Language | Unmeasured | Capabilities |
+| --- | ---: | --- |
+| TypeScript | 5 | heritage, config, frameworks, impact, processes |
+| JavaScript | 5 | heritage, config, frameworks, impact, processes |
+| Python | 3 | exports, impact, processes |
+| Java | 7 | exports, heritage, types, config, frameworks, impact, processes |
+| Kotlin | 6 | exports, heritage, config, frameworks, impact, processes |
+| C# | 7 | exports, heritage, types, config, frameworks, impact, processes |
+| Go | 6 | heritage, types, config, frameworks, impact, processes |
+| Rust | 5 | heritage, config, frameworks, impact, processes |
+| PHP | 6 | exports, types, config, frameworks, impact, processes |
+| Ruby | 7 | exports, heritage, types, config, frameworks, impact, processes |
+| Swift | 6 | exports, calls, config, frameworks, impact, processes |
+| C | 6 | exports, types, config, frameworks, impact, processes |
+| C++ | 5 | exports, config, frameworks, impact, processes |
+| Dart | 4 | config, frameworks, impact, processes |
+
+## Phase 4 intelligence
+
+| ID | Requirement | Status | Authoritative evidence | Required closure |
+| --- | --- | --- | --- | --- |
+| I-1 | Deterministic communities on real repositories. | Incomplete | The current Phase 4 receipt runs `label-propagation-v1` five times on exact pinned Express, Nest cats-sample, and Gin scopes (260 files, 4,564 nodes, 13,640 edges combined), records deterministic results, and proves two non-overlapping cursor pages for every repository. It does not contain reviewed community truth or large-repository stability evidence. | Add reviewed community truth and stability metrics on representative pinned repositories and large repos. |
+| I-2 | Bounded entry-to-sink processes on real repositories. | Incomplete | All three exact repositories return deterministic `entry-path-v1` processes with at least two nodes, canonical relationship evidence, confidence of at least 0.75, continuous pagination, and p95 latency below the two-second deadline. The receipt has no reviewed process ground truth and does not cover cycles, incomplete paths, varied sinks, or representative language breadth. | Prove correct complete/incomplete paths, multiple entries/sinks, cycles, depth bounds, and language coverage on real repositories. |
+| I-3 | Hybrid local search. | Incomplete | Native exact, lexical, and one-hop structural search passes the local fixture. Search is deterministic on Express, Nest, and Gin; each result has a workspace locator, all p95 values are below 74 ms, and receipts record delivered bytes/token estimates plus continuation where present. There is no reviewed relevance set, MRR/recall result, lexical-only comparison, or exact tokenizer measurement. | Add reviewed query sets, MRR/recall, lexical-only baseline, exercised search continuation, and exact delivered-token measurements on representative real repositories. |
+| I-4 | Routes, impact, dependencies, trace, and safe graph queries. | Incomplete | All three exact repositories run every query family deterministically under the two-second deadline. Dependencies, safe query, and trace must traverse at least one real relationship; every returned relationship carries canonical endpoints, locator evidence, and confidence. Generic seeds and the absence of reviewed positive/negative truth prevent a correctness claim. | Add identical real-repository queries with reviewed positive/negative truth, decoys, and deadlines across representative languages. |
+| I-5 | Evidence, confidence, pagination, token accounting, and deadlines. | Incomplete | The fixture proves relationship evidence, confidence propagation, and read queries preserving its SQLite bundle. All three real-repository runs prove located results, evidence-complete relationships, process evidence, community/process cursor continuity, per-query byte/token estimates, and two-second deadlines. Exact token accounting, token budgets, truncation truth, cancellation, and pagination for every query family remain unproven. | Add exact delivered-token accounting, budgets, truncation/cancellation cases, and continuation tests per query family. |
+| I-6 | Preserve exactly twelve MCP tools unless a distinct capability requires another. | Proven | MCP inventory and packed consumer smoke verify twelve read-only tools. Phase 4/5 reuse those tools. | Keep the inventory stable through final packaging. |
+
+## Phase 5 multi-repository and cross-service intelligence
+
+| ID | Requirement | Status | Authoritative evidence | Required closure |
+| --- | --- | --- | --- | --- |
+| M-1 | General multi-repository search and traversal. | Incomplete | The registry now proves bounded qualified search across three TypeScript, Python, and Go repositories with deliberately ambiguous symbols, plus exact Go traversal between two independent Git repositories with an identical decoy rejected. Missing and stale indexes return isolated bounded partial results. | Broaden traversal and relationship evidence beyond the exact Go module path to representative cross-language and cross-service cases. |
+| M-2 | Evidence-backed cross-repository and cross-service relationships. | Incomplete | One Go import/call/trace/impact path and one monorepo two-prefix fixture pass with decoy rejection. | Add general package coordinates, services, routes, data flow, reverse impact, and cross-language cases. |
+| M-3 | Preserve repository/workspace isolation. | Proven | Registry/provider tests reject another workspace, keep unavailable and stale indexes isolated, preserve every queried SQLite bundle, and redact local paths. The packed consumer proof verifies independent Git repositories, decoy exclusion, and no package/config/source mutation. | Preserve these bounds through final cross-platform packaging. |
+
+## Scale and performance
+
+| ID | Requirement | Status | Authoritative evidence | Required closure |
+| --- | --- | --- | --- | --- |
+| S-1 | Index exactly one million committed nodes within the measured gate. | Proven | `evals/code-intelligence/results/million-node-rust-index.json` records exactly 1,000,000 committed nodes and 999,000 edges in 80,393 ms with zero omissions under the unchanged 300,000 ms build deadline. | Re-run only at the final frozen performance gate or after relevant Rust index changes. |
+| S-2 | Warm open, no-change refresh, one-file refresh, and exact query work on the million-node index. | Proven | The same retained report records a 1,357 ms warm open, 3,851 ms no-change refresh with zero writes, 51,107 ms one-file refresh with 999 reused files, and twenty exact queries with 1,547 ms p95, stable results, and an unchanged SQLite fingerprint. | Re-run only at the final frozen performance gate or after relevant Rust index changes. |
+| S-3 | Optimize only measured bottlenecks. | Proven | The measured reader bottleneck was removed without raising either deadline; the retained million-node report passes and records the exact binary hash, commit, RSS, database size, latency, and integrity evidence. | Preserve the gate and profile again before any further scale optimization. |
+
+## Production default and duplicate deletion
+
+| ID | Requirement | Status | Authoritative evidence | Required closure |
+| --- | --- | --- | --- | --- |
+| P-1 | Packaged Rust is the production default in CLI. | Proven | The current-host packed consumer gate installs the root and verified native package with Cargo and rustc unavailable, fails closed before indexing, builds the first SQLite index only through the explicit writer command, and then runs default native stats and search without mutating the index. `auto` and `native-preview` are strict native aliases; no JavaScript intelligence engine remains. | Re-run the same packed gate on the other four release targets and the final registry package under T-4. |
+| P-2 | Packaged Rust is the production default in MCP. | Proven | The same clean packed install exposes exactly twelve read-only tools and executes all twelve against the current native index. The gate proves `context.pack` returns native-index evidence, confirms the retired JavaScript graph paths are absent from the installed root package, and verifies SQLite, WAL, SHM, memory, source, config, and package state remain unchanged. | Preserve this installed-package absence proof through all five release targets. |
+| P-3 | Packaged Rust is the production default in web/Control API. | Incomplete | A clean packed Darwin-arm64 install proves the browser Map and Control API read the verified native index without Cargo, rustc, a C compiler, or any index mutation. After a real source change it returns `source_index_refresh_required` and renders the exact native refresh command; after deliberate index removal it returns `source_index_build_required` and renders the explicit writer command. Neither state falls back or creates SQLite side files. Missing-package and other-platform recovery remain unproven. | Prove the remaining recovery states and all five release targets. |
+| P-4 | Delete duplicate JS intelligence and duplicate tests after default cutover. | Proven | The retired JavaScript source-graph modules, providers, compatibility mode, duplicate tests, and old comparison scripts are deleted. Current-host packed smoke proves the installed package excludes those paths while CLI and all twelve MCP tools read the native index. | Re-run the absence proof on the four remaining release targets and final registry tarballs. |
+
+## Large-repository UI
+
+| ID | Requirement | Status | Authoritative evidence | Required closure |
+| --- | --- | --- | --- | --- |
+| U-1 | First screen explains shape, coverage, subsystems, entry points, hotspots, changes, memory, and next action. | Proven | `c02e986` runs Chromium against a clean 1,225-tracked-file clone. Its first desktop screen has a bounded architecture board, current coverage, ranked entry points, current-change impact, memory and handoff truth, and a direct Map action, all within the viewport. | Re-run only after a first-screen behavior change. |
+| U-2 | Map uses progressive disclosure for groups, communities, processes, neighborhoods, and evidence. | Proven | `c02e986` directly loads `/map?group=apps%2Fweb` against that clone and proves a focused native neighborhood, deterministic architectural groups, bounded entry-to-sink processes, evidence inspector, keyboard outline selection, and a six-group visual board with the full bounded outline disclosed separately. | Re-run only after Map behavior changes. |
+| U-3 | Navigation is understandable and Map works directly. | Proven | The first-run browser flow reaches Map from Overview, submits and reloads a focused Map query, and `c02e986` proves a direct large-repository `/map` request without a second click. `82b10e0` covers the current public routes plus the Map and Handoffs aliases. | Re-run only after navigation behavior changes. |
+| U-4 | No overlap or unreadable source-map outline. | Proven | `c02e986` retains desktop and 390px large-repository captures: canvas labels are bounded, outline labels and locators ellipsize safely, no desktop or mobile horizontal overflow occurs, and the last mobile outline record remains reachable. | Re-run only after graph layout or outline changes. |
+| U-5 | Desktop, mobile, accessibility, overflow, and every control pass in a real browser. | Proven | `82b10e0` audits every enabled visible control across every public route plus Map and Handoffs for an accessible name, keyboard reachability, one main landmark, and one page heading; it also proves desktop/mobile overflow bounds, reduced-motion rendering, Map interactions, and no unexpected console/page errors. `c02e986` adds the same responsive and keyboard checks on a 1,225-file clone. | Re-run only after a user-facing browser control changes. |
+| U-6 | Complete the anti-slop review before UI completion. | Proven | `docs/implementation/MEMORY_RECALL_UI_ANTI_SLOP_REVIEW.md` reviews the current first-screen, Map, memory, handoff, responsive, accessibility, motion, and information-density evidence at `c02e986`. It records the prior dense-graph and large-Map response fixes and rejects non-functional decoration. | Revisit only if a user-facing UI surface changes before the frozen release gate. |
+
+## Head-to-head proof
+
+| ID | Requirement | Status | Authoritative evidence | Required closure |
+| --- | --- | --- | --- | --- |
+| H-1 | Run identical pinned commits through Memory Recall, GitNexus, and file baselines. | Missing | The Phase 8 runner covers one Go fixture and the automated test substitutes a fake GitNexus executable. | Use the real permitted GitNexus artifact and the full pinned Tier 1 corpus with immutable versions/hashes. |
+| H-2 | Measure structural, search, and task accuracy. | Missing | Memory Recall truth exists; there is no complete identical-product comparison report. | Define identical reviewed questions and compute recall, precision, MRR, task success, and unsupported cases. |
+| H-3 | Measure indexing, latency, RSS, disk, MCP calls, and delivered tokens. | Missing | Separate local Memory Recall receipts exist; competitor/file measurements are absent. | Capture all metrics under identical limits and hardware, including warm/cold behavior and confidence intervals. |
+| H-4 | Meet floors: symbol recall at least 95%, resolved-call precision at least 90%, zero duplicate symbols, determinism, explicit unsupported states, and real-repository proof. | Incomplete | Sampled Memory Recall rows meet floors where measured; 78 applicable rows and competitor runs are missing. | Close all applicability rows and execute the full comparison. |
+| H-5 | Claim parity or leadership only from proven results. | Proven | Current receipts explicitly set parity and leadership false. | Keep claims false until H-1 through H-4 pass. |
+
+## Phase status
+
+| Phase | Requirement | Status | Evidence and remaining boundary |
+| --- | --- | --- | --- |
+| 0 | Matrix, ADR, schema, baseline. | Proven | ADR 0023, provider-neutral schemas, corpus, gates, and six-command baseline pass. |
+| 1 | Unify Node and Rust. | Incomplete | Production reads now use the packaged Rust SQLite engine and the duplicate JS intelligence path is removed; remaining closure is five-platform distribution proof. |
+| 2 | Pass fourteen Tier 1 languages. | Incomplete | 75/154 rows meet floor; 78 applicable rows remain unmeasured and one row is not applicable. All fourteen language-level statuses remain unmeasured. |
+| 3 | Scalable index, watcher, and recovery. | Incomplete | Core SQLite lifecycle and the local one-million-node gate pass; cross-platform packaged migration/recovery remains unproven. |
+| 4 | Search, communities, processes, routes, impact, query, and MCP. | Incomplete | The deterministic fixture and exact pinned Express, Nest cats-sample, and Gin slices pass, including evidence-backed relationship traversal, community/process pagination, all required query families, delivery estimates, and deadlines. The receipt explicitly keeps `phase4IntelligenceProven: false`; reviewed correctness, representative language breadth, large repositories, exact token budgets, cancellation, and full pagination remain missing. |
+| 5 | Multi-repository and cross-service. | Incomplete | One Go cross-repo path and one monorepo fixture are insufficient. |
+| 6 | Signed npm distribution. | Incomplete | The local producer/consumer chain is native-first, transports one exact root tarball, and verifies signed GitHub provenance, file-complete SPDX predicates, npm integrity, and root plus native npm attestation bundles. Remote five-platform proof and publication remain absent. |
+| 7 | Polyglot large-repository UI. | Incomplete | The required release UI behavior is proven locally against a 1,225-file repository and every public route. Broader polyglot and packaged cross-platform UI characterization remains outside this release's deferred language scope. |
+| 8 | Head-to-head benchmark and audits. | Missing | Only a fake-competitor one-fixture harness test exists; no full comparison receipt exists. |
+| 9 | Promote extra languages and formats. | Missing | Correctly deferred; no promotion gate has been run. |
+
+## Final stable-release audit
+
+| ID | Requirement | Status | Authoritative evidence | Required closure |
+| --- | --- | --- | --- | --- |
+| R-1 | Full Node CI on frozen implementation. | Proven | `npm run ci` passes after `82b10e0`: repository checks, 208 protocol compatibility assertions, the Node suite, and evaluations. | Re-run only if the frozen commit changes. |
+| R-2 | Full Rust workspace on frozen implementation. | Proven | `cargo test --locked --workspace` passes on the frozen implementation before the browser-audit-only `82b10e0` commit; no Rust source or Rust test changed afterward. | Re-run only if Rust files change. |
+| R-3 | All five platform package jobs. | Missing | Workflow matrix exists; only darwin-arm64 is locally proven. | Run the GitHub `Rust` workflow `native-artifacts` matrix at the exact frozen commit and retain all receipts. |
+| R-4 | Security and CodeQL. | Incomplete | CodeQL workflow exists; no final frozen-commit result is recorded here. | Run CodeQL and security audit at the frozen commit and bind run URLs/SHAs to release evidence. |
+| R-5 | Packed clean installs. | Incomplete | The frozen Darwin-arm64 root-plus-native smoke proves a compiler-free exact-tarball install, the native default, all twelve MCP tools, uninstall, and same-version reinstall. The other four targets and the published registry package remain unproven. | Pass the five remote registry-consumer jobs from clean HOME without Cargo/rustc. |
+| R-6 | Complete browser suite. | Proven | `npm run consumer:browser-smoke` passes at `82b10e0`, including setup, all public routes plus aliases, direct and reloaded Map, responsive overflow, control names/focus, reduced motion, console/page errors, and the large-repository proof remains green at `c02e986`. | Re-run only if a browser-facing file changes. |
+| R-7 | Release readiness and handoff verification. | Proven | `npm run release:readiness`, `npm run release:readiness:check`, and `npm run verify:handoff` pass on the frozen local release inputs. The final remote artifact provenance is separately required by D-6 through D-9. | Re-run only if release inputs change. |
+| R-8 | Do not push, merge, publish, or deploy without separate authorization. | Proven | All current work is local on `codex/memory-recall-orientation-workbench`; no remote mutation was performed in this goal continuation. | Report exact branch, commit, GitHub action, and publication order when local work is ready. |
+
+## Fastest dependency order
+
+1. Keep the local root-plus-five-native artifact chain guarded; defer its remote five-platform run until the implementation is frozen.
+2. Close the 78 applicable language rows without weakening gates.
+3. Finish reviewed Phase 4 correctness on real repositories, then general Phase 5.
+4. Prove the clean packaged browser path, including native recovery states.
+5. Complete the large-repository browser and anti-slop gates.
+6. Run the real identical-corpus comparison.
+7. Freeze implementation, re-run this semantic-version audit against the exact tarball, choose the stable version, obtain five platform receipts, run final audits, and only then request publication authorization.
diff --git a/docs/implementation/MEMORY_RECALL_SEMVER_COMPATIBILITY_AUDIT.md b/docs/implementation/MEMORY_RECALL_SEMVER_COMPATIBILITY_AUDIT.md
new file mode 100644
index 00000000..850bdf30
--- /dev/null
+++ b/docs/implementation/MEMORY_RECALL_SEMVER_COMPATIBILITY_AUDIT.md
@@ -0,0 +1,116 @@
+# Memory Recall semantic-version compatibility audit
+
+Audit date: 2026-07-19
+
+Published baseline: `memory-recall@1.1.0` at commit `06a947fb52b5c23544a6e1b18ed8e28bd0735fb2`
+
+Audited worktree: `codex/memory-recall-orientation-workbench` through `fd153b2`, before the release-version commit
+
+## Decision
+
+The current worktree requires the **2.0.0 major stable line**. A patch or minor
+release is rejected because every breaking boundary below remains intentional
+and no compatibility layer restores it. Version selection is therefore
+complete; publication remains blocked until the frozen tarball and final release
+gates pass.
+
+The major-line conclusion comes from observed public contract breaks, not the
+size of the change.
+
+The audited work includes native-first distribution, persistent Rust indexing,
+the twelve-tool MCP surface, and the public Map workbench. None restore or
+dual-serve the breaking boundaries recorded below, so `2.0.0` is the only
+defensible stable line.
+
+## Evidence snapshot
+
+The public package was inspected directly:
+
+```bash
+npm view memory-recall@1.1.0 name version dist.integrity dist.shasum dist.tarball --json
+npm pack memory-recall@1.1.0 --pack-destination --json
+```
+
+The registry and packed artifact agreed on:
+
+| Field | Published value |
+| --- | --- |
+| Package | `memory-recall@1.1.0` |
+| Tarball | `https://registry.npmjs.org/memory-recall/-/memory-recall-1.1.0.tgz` |
+| Integrity | `sha512-jBrawYpI+wluYrTwSRSPiwa4m+Cm+JQS4pkpSIbsH1ALC5POd2X5RqfBPhSMd6+zi60iGImq72AMP1Ftx0/vzA==` |
+| SHA-1 | `e343012deaa10520ce2064eea0554c4a0f8b55a6` |
+| Packed size | 1,209,674 bytes |
+| Unpacked size | 5,215,304 bytes |
+| Entries | 828 |
+
+The published tarball contains `rust/Cargo.toml`, the `rust/oaf-*` sources,
+`apps/cli/oaf.mjs`, and `docs/usage/rust-acceleration.md`. A current
+`npm pack . --dry-run --json --ignore-scripts` check reported no `rust/` or
+`native-packages/` entries in the root package. It did include the native binary
+resolver. This proves the distribution-contract comparison without relying on
+the source tree alone.
+
+## Compatibility findings
+
+| Public boundary | `1.1.0` contract | Current behavior | Result | Authoritative evidence |
+| --- | --- | --- | --- | --- |
+| Root npm distribution and Rust build path | The published package says Rust acceleration is opt-in, includes Rust source, and gives an exact local Cargo build path. | The root package excludes Rust source and resolves a binary through five platform-specific optional packages. | **Breaking**. Existing consumers lose the shipped, documented source-build contract and move to a different artifact topology. | Baseline `06a947fb52b5:docs/usage/rust-acceleration.md:3-11,29-46`; current `docs/usage/rust-acceleration.md:34-51`; `package.json:121,148-160`; registry and tarball inspection above. |
+| Installed MCP configuration | `1.1.0` writes `mcp server --read-only --root ... --sqlite ... --stats ... --stdio`. | The owned signature now requires `--engine auto`. The old exact entry is classified as drifted; install refuses to upgrade it and uninstall refuses to remove it. | **Breaking**. A configuration written by the published release cannot follow the current managed upgrade or uninstall path. | Baseline `06a947fb52b5:apps/cli/oaf.mjs:7537-7561`; current `apps/cli/oaf.mjs:8786-8787,8836-8842,8901-8925,8987-8997,9016-9020`; `tests/cli.test.mjs:1769-1807,1877-1894,1915-1937`. |
+| Recall Map wire format | The strict `1.0.0` schema and `memory-recall-map-1.1.0` report ID reject unknown architecture properties. | The same schema and report identifiers remain, but reports always emit `snapshot`, `groups`, `groupRelations`, and `processes`; the current schema was expanded in place. | **Breaking**. A strict consumer using the published schema rejects current output even though the version identifiers did not change. | Baseline `06a947fb52b5:packages/protocol/schemas/recall-map.schema.json:3,7-11,137-147`; current `packages/protocol/schemas/recall-map.schema.json:3,10-11,221-230`; `packages/recall-map/src/index.mjs:292-305,326-337`. |
+| Default graph and MCP engine | The published public path defaults to the bounded JS/TS graph; Rust is explicit and locally built. | Graph and MCP reads use only the packaged native SQLite index; `auto` and `native-preview` are native aliases, and the duplicate JavaScript path is deleted. | **Breaking semantic default**. Identical commands now require a healthy native index and cannot select the former JavaScript implementation. | Baseline `06a947fb52b5:docs/usage/rust-acceleration.md:3-12`; current `docs/usage/rust-acceleration.md:3-12`; `apps/cli/oaf.mjs`; `tests/cli-graph-index.test.mjs`; `tests/mcp-code-intelligence.test.mjs`. |
+| Shipped Rust source API and workspace | The published tarball exposes buildable Rust sources with `IngestOptions` and `IngestReport` shapes and workspace version `0.1.0`. | Public structs gain required fields such as `prefer_cpp_headers`, `recovered_files`, and `code_facts`; the workspace adds `oaf-index` and reports version `2.0.0`. | **Breaking source contract**. Existing Rust construction or deserialization against the shipped source may fail, and the workspace version change does not preserve the prior crate-level contract. | Baseline `06a947fb52b5:rust/oaf-ingest/src/lib.rs:20-38,60-78`; `06a947fb52b5:rust/Cargo.toml:1-8`; current `rust/oaf-ingest/src/lib.rs:20-40,239-260`; `rust/Cargo.toml:1-8`. |
+
+## Additive work
+
+The worktree also adds compatible capabilities:
+
+- the read-only MCP inventory expands from five tools to twelve;
+- graph index and repository commands are added;
+- managed MCP uninstall is added;
+- isolated persistent SQLite source indexes are added;
+- five native platform packages are defined for macOS, Linux, and Windows.
+
+These additions do not neutralize the breaks above. SemVer classification uses
+the least-compatible public change in the release.
+
+Current evidence for the additive MCP surface is
+`tests/mcp-code-intelligence.test.mjs:7-23,48-99`. The published five-tool
+inventory is fixed by
+`06a947fb52b5:tests/cli.test.mjs:1694-1710,2033`.
+
+## Repairs required before a minor line is defensible
+
+A minor line is possible only if all of these conditions are met:
+
+1. **Migrate legacy MCP entries.** Recognize the exact `1.1.0` server argument
+ signature as Memory Recall-owned. Install must offer a safe, confirmed
+ migration to the current signature, and uninstall must remove either owned
+ generation without touching neighboring configuration.
+2. **Version or dual-serve wire output.** Keep a strict `1.1.0` Recall Map mode
+ that validates against the published schema, or introduce a new versioned
+ schema/report contract and negotiate it explicitly. Do not emit new fields
+ under the old identifiers to strict clients.
+3. **Preserve or formally replace the Rust-source contract.** Continue shipping
+ the documented buildable source surface with compatible public structs, or
+ provide an explicit compatibility artifact and migration that preserves the
+ published local-build use case.
+4. **Preserve or negotiate the engine default.** Keep JS as the behavior for
+ unversioned legacy invocations, or require an explicit/versioned negotiation
+ before `auto` can change the engine and output semantics.
+5. **Bind each repair to the published artifact.** Add focused tests using the
+ exact `memory-recall@1.1.0` configuration, strict schema, command defaults,
+ and Rust source surface. The tests must prove upgrade, operation, uninstall,
+ and rollback against the packed current product.
+
+If any condition remains unresolved at release freeze, the stable release must
+remain on a major line. Adding release notes or documenting the break does not
+make a patch or minor release backward compatible.
+
+## Release stop condition
+
+`2.0.0` is selected for the release line. Re-run this audit against the frozen
+release commit and exact root tarball before publication. The release can proceed
+only when every row is either:
+
+- backward compatible and proven against `memory-recall@1.1.0`; or
+- intentionally breaking and assigned to a major stable line.
diff --git a/docs/implementation/MEMORY_RECALL_UI_ANTI_SLOP_REVIEW.md b/docs/implementation/MEMORY_RECALL_UI_ANTI_SLOP_REVIEW.md
new file mode 100644
index 00000000..71b04042
--- /dev/null
+++ b/docs/implementation/MEMORY_RECALL_UI_ANTI_SLOP_REVIEW.md
@@ -0,0 +1,46 @@
+# Memory Recall UI anti-slop review
+
+Review date: 2026-07-19
+Reviewed commit: `c02e986`
+
+This review covers the shipped local workbench rather than a marketing surface. Its standard is practical orientation: a developer should see repository truth, a next action, and bounded evidence before any graph density or promotional framing.
+
+## Evidence inspected
+
+| Surface | Evidence | Result |
+| --- | --- | --- |
+| Overview, desktop | Clean 1,225-tracked-file clone in `scripts/large-repository-browser-smoke.mjs` | Six of twelve groups fit in the first viewport; the full bounded outline is explicitly disclosed. |
+| Overview, mobile | `consumer-browser-smoke.mjs` responsive widths and bottom navigation checks | No horizontal overflow; controls retain 44px targets. |
+| Focused Map, desktop and mobile | Clean-clone screenshots and keyboard/overflow assertions | Direct `/map?group=apps%2Fweb` loads, graph labels stay bounded, outline locators use ellipsis, and the last mobile outline item clears fixed navigation. |
+| Memory and handoff | Browser screenshots and route/control audit | Forms and governed state remain factual, readable, and reachable without faux product framing. |
+| Every published route | `consumer-browser-smoke.mjs` route/control audit | Each route has one main landmark, one page heading, named keyboard-reachable visible controls, no console/page errors, and no horizontal overflow. |
+
+## Composition and language
+
+- The first screen uses a compact title, factual coverage, architecture, ranked starts, current impact, and trusted context. It does not use a marketing hero, slogan, testimonial, pricing block, decorative dashboard metric strip, or an always-on graph canvas.
+- The Map starts with a direct query and a bounded result. Its graph is a drill-down, not the first-screen visual. Complete bounded records remain available in the outline rather than as overlapping canvas labels.
+- Copy is descriptive and local: `Read-only / bounded metadata`, coverage, freshness, omitted counts, and explicit recovery actions. It makes no AI-performance, parity, cloud, or automation claim.
+- The primary navigation is five clear developer tasks on desktop and four fixed tasks on mobile. Active state is conveyed by text weight and restrained color, not a decorative dot or animated underline.
+
+## Visual system and motion
+
+- The workbench uses flat, warm-neutral surfaces, native/system typography, restrained blue for selection, and directional inset selection marks. It has no blue-purple gradients, atmospheric blobs, glows, faux browser windows, giant logos, or default fill-and-outline CTA pairs in the reviewed flows.
+- Borders separate live controls and data records. They do not create a decorative card grid on the Overview. Status chips are retained only where they express actual memory or handoff state.
+- Content is visible before script-driven interaction. The UI does not depend on entrance animation; reduced-motion checks bound any transition or animation duration.
+- Graph canvases use progressive labels, an accessible outline, and a selection inspector. The review specifically rejects the prior dense all-label graph treatment.
+
+## Responsive, accessibility, and overflow review
+
+- Desktop and mobile screenshots show no clipped headings, control collisions, unreadable outline labels, or bottom-navigation obstruction in the reviewed Overview and Map states.
+- Long locators and labels use overflow-safe ellipsis in the architecture cards and source-map outline. The graph does not rely on text placed beyond the canvas edge.
+- Every reviewed interactive control has an accessible name and keyboard reachability. The source-map outline updates the canonical selection with Enter.
+
+## Fixes confirmed by this review
+
+1. Architecture cards no longer stack every same-layer group into one tall column. The first screen shows six cards, with an explicit disclosure for the remaining groups.
+2. A large-repository Map cannot return a schema-validation 500 from unmapped hotspot references or one-edge process records. Unsupported projection fragments are omitted rather than misrepresented.
+3. The Map no longer requires an extra click after a direct deep link, and its desktop/mobile outline remains readable at bounded density.
+
+## Decision
+
+No decorative redesign is warranted. The current workbench is intentionally compact, factual, and local-first; adding hero art, branding effects, a broader dashboard, extra cards, or cosmetic motion would reduce clarity without helping a developer complete a task.
diff --git a/docs/implementation/OAF-031-context-intake-preview-note.md b/docs/implementation/OAF-031-context-intake-preview-note.md
index f62b159e..071b139d 100644
--- a/docs/implementation/OAF-031-context-intake-preview-note.md
+++ b/docs/implementation/OAF-031-context-intake-preview-note.md
@@ -64,20 +64,13 @@ slice.
- `npm run recall -- benchmark truth-floor --suite benchmark-truth-floor --dataset evals/benchmark-truth-floor/cases.v1.json --format json`
exposes the schema-validated gold-evidence truth floor for native exact,
full-context, lexical, and current-harness baselines.
-- `providers/native/context-candidate-ast-code/` exposes a dependency-free
- JS/TS static source index with definitions, references, imports, exports,
- callers, callees, file outlines, repository outlines, exact slice hashes, and
- content-hash journals.
-- The same native provider now exposes a read-only derived source graph built
- from that JS/TS source index, with schema-validated file/chunk/symbol/module
- nodes, contains/defined/import/export/reference/call edges, lexical graph
- search, call tracing, changed-file impact reports, and locator-only graph
- candidate records for Context Compiler selection. The parser uses a
- linear string/comment stripper, 256 KiB default static JS/TS file coverage,
- a 1 MiB hard validation ceiling, and bounded reference/call fanout so large
- template-heavy project files cannot spin the CLI, API, or browser preview.
- Over-limit files remain hash/read-plan-only and keep changed-file coverage in
- review instead of claiming symbol impact.
+- The packaged Rust engine owns source parsing, the persistent SQLite index,
+ definitions, relationships, search, trace, impact, communities, and bounded
+ entry-to-sink processes for the fourteen shipped parsers.
+- Context packs consume only the native index's locator-safe projection. Missing,
+ stale, corrupt, or unavailable indexes stay explicit and never trigger a
+ duplicate JavaScript scanner. Over-limit or unsupported evidence remains
+ partial and keeps changed-file coverage in review.
- Durable context manifests now record explicit assembly representation tiers,
token budget reports, manifest `etag`s, and `deltaFrom` summaries for
repeated local runs. The token report separates selected-token ratio
diff --git a/docs/open-source/release-engineering.md b/docs/open-source/release-engineering.md
index 2c04e48e..a3cebfb0 100644
--- a/docs/open-source/release-engineering.md
+++ b/docs/open-source/release-engineering.md
@@ -22,18 +22,42 @@ external writes.
`.github/workflows/npm-publish.yml` is the maintainer publication lane for the
public npm package. It is manual-only (`workflow_dispatch`), requires the exact
-`publish memory-recall@VERSION` confirmation text, runs CI, native smoke,
-consumer smoke, release-readiness verification, and an npm publish dry run before
-the real publish step, and uses the protected `npm-release` environment.
+`publish memory-recall@VERSION` confirmation text and the run ID of a successful
+`Rust` workflow for the same commit. The Rust run must produce all five native
+packages, deterministic file-complete SPDX 2.3 SBOMs, signed GitHub provenance
+for every tarball and receipt, and one exact
+aggregate artifact. The protected `npm-release` job authenticates that run and
+the signer workflow, verifies the complete release set, checksums, and signed
+SBOM predicates, then
+publishes the five native packages in fixed order. It verifies every native
+version, npm integrity, and exact publish/SLSA attestation bundle before it can
+dry-run or publish the root package.
+
+The validation job runs CI, native smoke, consumer smoke, and release-readiness
+verification, then packs the root package exactly once. It records the tarball's
+SHA-256 and SHA-512 integrity, generates a file-complete SPDX 2.3 document, signs
+both provenance and SBOM attestations, and uploads the exact artifact. The
+protected job downloads and validates those bytes, verifies both GitHub
+attestations, installs the exact root tarball with its matching native tarball in
+an isolated lifecycle, and publishes that same tarball only after all five
+native registry records pass. It then requires exact root registry integrity and
+both npm publish and SLSA attestations. No later bare `npm publish` repack is
+permitted. Both jobs use Node 22.14.0 and npm 11.18.0 so validation, JSON
+attestation verification, and publication do not drift with `npm@latest`.
Prefer npm Trusted Publishing. Configure npm with GitHub Actions as the trusted
publisher for repository `rebel0789/Memory-Recall` and workflow filename
`npm-publish.yml`, then run the workflow with `auth_mode=trusted-publishing`.
-This uses OIDC and does not require a long-lived npm token. If the maintainer
-chooses token auth for the first release, set the repository secret `NPM_TOKEN`
-and run the same workflow with `auth_mode=npm-token`.
-
-The workflow does not create tags, sign artifacts, submit marketplace manifests,
-or publish from pull requests. Marketplace or plugin-registry submission remains
-blocked until target registry requirements are known and a maintainer approves
-the submission.
+This uses OIDC and does not require a long-lived npm token. Each of the six npm
+packages must authorize `npm-publish.yml` and the `npm-release` environment as
+its trusted publisher. If the maintainer chooses token auth for the first
+release, set the repository secret `NPM_TOKEN` and run the same workflow with
+`auth_mode=npm-token`; the workflow requests npm provenance in token mode.
+
+The workflows do not create tags, submit marketplace manifests, publish from
+pull requests, or publish without the protected environment. GitHub provenance
+attestation, root and native SBOM binding, exact-artifact lifecycle proof, and npm
+provenance verification are implemented locally, but the remote five-runner
+result and stable publication remain unproven.
+Marketplace or plugin-registry submission remains blocked until target registry
+requirements are known and a maintainer approves the submission.
diff --git a/docs/product/memory-recall-developer-first.md b/docs/product/memory-recall-developer-first.md
index 75be5b63..f99eb060 100644
--- a/docs/product/memory-recall-developer-first.md
+++ b/docs/product/memory-recall-developer-first.md
@@ -16,17 +16,23 @@ recall handoff
```
`recall setup` initializes local Recall state without scanning the repository.
-`recall map` is the explicit read-only first scan: it combines the implemented
-JS/TS static graph with governed local-memory status. `recall handoff` produces
-a read-only handoff for the next coding-agent session.
+`recall map` is the explicit read-only first scan: it combines bounded source
+metadata with governed local-memory status. Structural graph, MCP, API, and web
+reads use the packaged Rust index. `recall handoff` produces a read-only handoff
+for the next coding-agent session.
## Support contract
-- Implemented: local JS/TS static graph, reviewed SQLite memory, read-only MCP.
+- Implemented: native-default, freshness-gated graph reads, reviewed SQLite
+ memory, and twelve read-only MCP tools. Missing or stale native state fails
+ closed with the exact recovery action; JS/TS requires explicit compatibility
+ mode.
- Implemented: bounded semantic plan and task packets, strict result import, pending proposals, and source-rechecked named approval.
-- Experimental: Rust acceleration paths require a local build before explicit invocation.
+- Experimental: the verified packaged Rust path has compiler-free local evidence across 14 Tier 1 fixtures, while full language and cross-platform release gates remain open. The bounded cross-repository path currently covers exact Go module resolution, one entry-to-service trace, and reverse impact across two explicitly registered repositories through the existing MCP tools.
- Experimental: explicit one-shot Gemini and OpenAI-compatible semantic API execution.
-- Unsupported: automatic transcript capture, write-capable MCP, hosted sync, and non-JS/TS source graph analysis.
+- Unsupported: automatic transcript capture, write-capable MCP, hosted sync,
+ general cross-repository analysis beyond the measured exact Go path, and
+ unmeasured Tier 1 capability rows.
- Unsupported: automatic harness invocation, arbitrary semantic providers,
semantic retrieval, raw source-code upload, background semantic sync, and
automatic semantic memory activation.
diff --git a/docs/release/1.0-COMPATIBILITY-MATRIX.md b/docs/release/1.0-COMPATIBILITY-MATRIX.md
index 86a67fc7..50fcfce7 100644
--- a/docs/release/1.0-COMPATIBILITY-MATRIX.md
+++ b/docs/release/1.0-COMPATIBILITY-MATRIX.md
@@ -17,9 +17,8 @@
| Provider | Contract | Locality | Enabled |
| --- | --- | --- | --- |
| provider:native:artifact:filesystem | ArtifactStorePort | in-process | true |
-| provider:native:context-candidate:ast-code | CandidateSourcePort | in-process | true |
+| provider:native:code-intelligence:rust | CodeIntelligencePort | loopback-process | true |
| provider:native:context-candidate:exact | CandidateSourcePort | in-process | true |
-| provider:native:context-candidate:graph | CandidateSourcePort | in-process | true |
| provider:native:context-candidate:lexical | CandidateSourcePort | in-process | true |
| provider:native:context-manifest:local | ContextManifestRepositoryPort@1.0.0 | in-process | true |
| provider:native:identity:local | IdentityStorePort | in-process | true |
@@ -54,7 +53,12 @@ External adapters enabled by default: 0.
| Package | Version | License | Runtime deps |
| --- | --- | --- | --- |
-| memory-recall | 1.1.0 | Apache-2.0 | 0 |
+| @memory-recall/native-darwin-arm64 | 2.0.0 | Apache-2.0 | 0 |
+| @memory-recall/native-darwin-x64 | 2.0.0 | Apache-2.0 | 0 |
+| @memory-recall/native-linux-arm64-gnu | 2.0.0 | Apache-2.0 | 0 |
+| @memory-recall/native-linux-x64-gnu | 2.0.0 | Apache-2.0 | 0 |
+| @memory-recall/native-win32-x64 | 2.0.0 | Apache-2.0 | 0 |
+| memory-recall | 2.0.0 | Apache-2.0 | 0 |
| @open-agent-fabric/adapter-contracts | 0.2.0-dev | Apache-2.0 | 0 |
| @open-agent-fabric/agentpack | 0.2.0-dev | Apache-2.0 | 0 |
| @open-agent-fabric/content-intelligence | 0.2.0-dev | Apache-2.0 | 0 |
@@ -79,7 +83,6 @@ External adapters enabled by default: 0.
| @open-agent-fabric/ui | 0.2.0-dev | Apache-2.0 | 0 |
| @open-agent-fabric/workflow-runtime | 0.2.0-dev | Apache-2.0 | 0 |
| @open-agent-fabric/native-artifact-filesystem | 0.2.0-dev | Apache-2.0 | 0 |
-| @open-agent-fabric/native-context-candidate-ast-code | 0.2.0-dev | Apache-2.0 | 0 |
| @open-agent-fabric/native-context-candidate-exact | 0.2.0-dev | Apache-2.0 | 0 |
| @open-agent-fabric/native-context-candidate-lexical | 0.2.0-dev | Apache-2.0 | 0 |
| @open-agent-fabric/provider-native-context-manifest-local | 0.2.0-dev | Apache-2.0 | 0 |
diff --git a/docs/release/1.0-MARKETPLACE-MANIFEST.json b/docs/release/1.0-MARKETPLACE-MANIFEST.json
index 74cbb7be..8f059113 100644
--- a/docs/release/1.0-MARKETPLACE-MANIFEST.json
+++ b/docs/release/1.0-MARKETPLACE-MANIFEST.json
@@ -6,9 +6,9 @@
"package": {
"registry": "npm",
"name": "memory-recall",
- "version": "1.1.0",
+ "version": "2.0.0",
"install": "npm install -g memory-recall",
- "url": "https://www.npmjs.com/package/memory-recall/v/1.1.0",
+ "url": "https://www.npmjs.com/package/memory-recall/v/2.0.0",
"bins": [
"recall",
"oaf"
diff --git a/docs/release/1.0-PROVENANCE.json b/docs/release/1.0-PROVENANCE.json
index 9a7c6bda..cb834c0d 100644
--- a/docs/release/1.0-PROVENANCE.json
+++ b/docs/release/1.0-PROVENANCE.json
@@ -3,7 +3,7 @@
"predicateType": "https://github.com/rebel0789/Memory-Recall/provenance/release-readiness/v1",
"subject": {
"name": "memory-recall",
- "version": "1.1.0",
+ "version": "2.0.0",
"releaseCandidate": "1.0-readiness"
},
"buildType": "local-deterministic-source-readiness",
@@ -21,13 +21,13 @@
"mergePerformedByThisTask": false
},
"sourceHashes": {
- "package.json": "sha256:0b4ad199b2c9bcb0d4832f3da1747633cee59deb65ec94d3a33f83292bef5dff",
- "package-lock.json": "sha256:66bac759b6c28f95c29eca52c0b42e9bb24237a4a926fb67a42093f9ee425ed7",
- "PROJECT_STATUS.json": "sha256:66a4cea825b1893e0f234f0f8ae71906dae322756cdde7cccfb967a4d44e2a83",
+ "package.json": "sha256:e5ff8b5bee26f0403a31c2c15b119f4e9b9952db895ccfec9c1da2afd089f4c3",
+ "package-lock.json": "sha256:5a80cd7fc840b4df82d873ca398a68fef89d05c4f2194c2156b41c44aa6d579e",
+ "PROJECT_STATUS.json": "sha256:bf712102fafbb1634cc99e94897d95ce689481357f41ee8a32b4fad1fb14f4b1",
"planning/backlog.json": "sha256:a404e5704ba3bf3be635a655d2d73d84eff7eba3ce43ab511b83967cceab6a5f",
"adapters/catalog.json": "sha256:11c22a150f847a560be3e64c8280c7757368d813b5f70304938ab7915694c283",
- "docs/usage/support-matrix.md": "sha256:dd4108828b742e8d06112e6abdfa4119f90a8b034b417b9e7e41f6924dcf26a6",
- "docs/benchmarks.md": "sha256:d486819287f1f97c1f51efded6dd7bf6c8491dc8e7a135c9cfaba9ed8f14b212",
+ "docs/usage/support-matrix.md": "sha256:73844778b418c382828bc0877c554ac1592024e078fc2b65ef6a02670d7ac80e",
+ "docs/benchmarks.md": "sha256:975701efde58e54b64213b6904758f562118f29111eae4d77d90ae46dd5ad068",
"THIRD_PARTY.md": "sha256:adbbffba498346ac25ff8f064db76ae93543d3c1990d37f1137d9122f0742dd7",
"SECURITY.md": "sha256:af8c910a7f2092f3adc8a9be30f79618d040101c6eda0fda705fdd8f9327b472",
"GOVERNANCE.md": "sha256:479e1fe15e56b58bd33b41cab67244de87b6f62b491bea0761337a5b87cd7e52"
@@ -35,11 +35,11 @@
"publicEvidence": [
{
"path": "docs/usage/support-matrix.md",
- "sha256": "sha256:dd4108828b742e8d06112e6abdfa4119f90a8b034b417b9e7e41f6924dcf26a6"
+ "sha256": "sha256:73844778b418c382828bc0877c554ac1592024e078fc2b65ef6a02670d7ac80e"
},
{
"path": "docs/benchmarks.md",
- "sha256": "sha256:d486819287f1f97c1f51efded6dd7bf6c8491dc8e7a135c9cfaba9ed8f14b212"
+ "sha256": "sha256:975701efde58e54b64213b6904758f562118f29111eae4d77d90ae46dd5ad068"
}
],
"generatedFiles": [
diff --git a/docs/release/1.0-READINESS-REPORT.md b/docs/release/1.0-READINESS-REPORT.md
index e9609b0b..3ca102af 100644
--- a/docs/release/1.0-READINESS-REPORT.md
+++ b/docs/release/1.0-READINESS-REPORT.md
@@ -18,14 +18,14 @@ Publication state: npm-published. This evidence is prepared for a maintainer mer
| Area | Evidence |
| --- | --- |
-| Release | 1.1.0 |
-| Phase | 1.1-release-candidate-readiness |
+| Release | 2.0.0 |
+| Phase | 2.0.0-major-readiness |
| Network default | deny |
| External writes | false |
| Model mode | deterministic |
-| Quality snapshot date | 2026-07-15 |
-| Recorded tests | 660 |
-| Recorded protocol fixtures | 182 |
+| Quality snapshot date | 2026-07-18 |
+| Recorded tests | 715 |
+| Recorded protocol fixtures | 208 |
| Recorded evaluation assertions | 144 |
| Quality snapshot note | Counts are a dated snapshot; command results and HANDOFF_VERIFICATION.json are authoritative. |
@@ -33,8 +33,8 @@ Publication state: npm-published. This evidence is prepared for a maintainer mer
| Page | Scope | Revision fingerprint |
| --- | --- | --- |
-| [Support matrix](../usage/support-matrix.md) | `docs/usage/support-matrix.md`: Implemented, experimental, and unsupported client paths with reversal boundaries. | `sha256:dd4108828b742e8d06112e6abdfa4119f90a8b034b417b9e7e41f6924dcf26a6` |
-| [Benchmark proof](../benchmarks.md) | `docs/benchmarks.md`: Public local claims, datasets, baselines, commands, artifacts, and limitations. | `sha256:d486819287f1f97c1f51efded6dd7bf6c8491dc8e7a135c9cfaba9ed8f14b212` |
+| [Support matrix](../usage/support-matrix.md) | `docs/usage/support-matrix.md`: Implemented, experimental, and unsupported client paths with reversal boundaries. | `sha256:73844778b418c382828bc0877c554ac1592024e078fc2b65ef6a02670d7ac80e` |
+| [Benchmark proof](../benchmarks.md) | `docs/benchmarks.md`: Public local claims, datasets, baselines, commands, artifacts, and limitations. | `sha256:975701efde58e54b64213b6904758f562118f29111eae4d77d90ae46dd5ad068` |
The support matrix is the public contract for install and reversal paths. The
benchmark page is the public source of truth for local measurement claims and
diff --git a/docs/release/1.0-REPRODUCIBILITY.md b/docs/release/1.0-REPRODUCIBILITY.md
index ffa2a422..4b455cd8 100644
--- a/docs/release/1.0-REPRODUCIBILITY.md
+++ b/docs/release/1.0-REPRODUCIBILITY.md
@@ -24,16 +24,16 @@ Counts are a dated snapshot; command results and HANDOFF_VERIFICATION.json are a
| Gate | Expected Count |
| --- | --- |
-| Tests | 660 |
-| Protocol fixtures | 182 |
+| Tests | 715 |
+| Protocol fixtures | 208 |
| Evaluation assertions | 144 |
## Public Claim Evidence
| Page | Scope | SHA-256 |
| --- | --- | --- |
-| `docs/usage/support-matrix.md` | Implemented, experimental, and unsupported client paths with reversal boundaries. | `sha256:dd4108828b742e8d06112e6abdfa4119f90a8b034b417b9e7e41f6924dcf26a6` |
-| `docs/benchmarks.md` | Public local claims, datasets, baselines, commands, artifacts, and limitations. | `sha256:d486819287f1f97c1f51efded6dd7bf6c8491dc8e7a135c9cfaba9ed8f14b212` |
+| `docs/usage/support-matrix.md` | Implemented, experimental, and unsupported client paths with reversal boundaries. | `sha256:73844778b418c382828bc0877c554ac1592024e078fc2b65ef6a02670d7ac80e` |
+| `docs/benchmarks.md` | Public local claims, datasets, baselines, commands, artifacts, and limitations. | `sha256:975701efde58e54b64213b6904758f562118f29111eae4d77d90ae46dd5ad068` |
Regenerate these release artifacts after changing either public page so support
boundaries and benchmark limitations remain tied to the same reviewed source.
diff --git a/docs/release/1.0-SBOM.json b/docs/release/1.0-SBOM.json
index 80200d08..c8e734a8 100644
--- a/docs/release/1.0-SBOM.json
+++ b/docs/release/1.0-SBOM.json
@@ -3,13 +3,58 @@
"format": "memory-recall-release-readiness-sbom",
"releaseCandidate": "1.0-readiness",
"project": "memory-recall",
- "packageVersion": "1.1.0",
+ "packageVersion": "2.0.0",
"dependencyPolicy": "bootstrap dependency-free; optional integrations remain disabled adapters",
"packages": [
+ {
+ "path": "native-packages/darwin-arm64/package.json",
+ "name": "@memory-recall/native-darwin-arm64",
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "private": false,
+ "dependencyCount": 0,
+ "devDependencyCount": 0
+ },
+ {
+ "path": "native-packages/darwin-x64/package.json",
+ "name": "@memory-recall/native-darwin-x64",
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "private": false,
+ "dependencyCount": 0,
+ "devDependencyCount": 0
+ },
+ {
+ "path": "native-packages/linux-arm64-gnu/package.json",
+ "name": "@memory-recall/native-linux-arm64-gnu",
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "private": false,
+ "dependencyCount": 0,
+ "devDependencyCount": 0
+ },
+ {
+ "path": "native-packages/linux-x64-gnu/package.json",
+ "name": "@memory-recall/native-linux-x64-gnu",
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "private": false,
+ "dependencyCount": 0,
+ "devDependencyCount": 0
+ },
+ {
+ "path": "native-packages/win32-x64/package.json",
+ "name": "@memory-recall/native-win32-x64",
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "private": false,
+ "dependencyCount": 0,
+ "devDependencyCount": 0
+ },
{
"path": "package.json",
"name": "memory-recall",
- "version": "1.1.0",
+ "version": "2.0.0",
"license": "Apache-2.0",
"private": false,
"dependencyCount": 0,
@@ -231,15 +276,6 @@
"dependencyCount": 0,
"devDependencyCount": 0
},
- {
- "path": "providers/native/context-candidate-ast-code/package.json",
- "name": "@open-agent-fabric/native-context-candidate-ast-code",
- "version": "0.2.0-dev",
- "license": "Apache-2.0",
- "private": true,
- "dependencyCount": 0,
- "devDependencyCount": 0
- },
{
"path": "providers/native/context-candidate-exact/package.json",
"name": "@open-agent-fabric/native-context-candidate-exact",
@@ -358,11 +394,11 @@
"contract": "ArtifactStorePort"
},
{
- "id": "provider:native:context-candidate:ast-code",
- "category": "context-candidate",
- "locality": "in-process",
+ "id": "provider:native:code-intelligence:rust",
+ "category": "code-intelligence",
+ "locality": "loopback-process",
"enabledByDefault": true,
- "contract": "CandidateSourcePort"
+ "contract": "CodeIntelligencePort"
},
{
"id": "provider:native:context-candidate:exact",
@@ -371,13 +407,6 @@
"enabledByDefault": true,
"contract": "CandidateSourcePort"
},
- {
- "id": "provider:native:context-candidate:graph",
- "category": "context-candidate",
- "locality": "in-process",
- "enabledByDefault": true,
- "contract": "CandidateSourcePort"
- },
{
"id": "provider:native:context-candidate:lexical",
"category": "context-candidate",
diff --git a/docs/superpowers/plans/2026-07-15-memory-recall-large-repository-graph-foundation.md b/docs/superpowers/plans/2026-07-15-memory-recall-large-repository-graph-foundation.md
new file mode 100644
index 00000000..de93e6b1
--- /dev/null
+++ b/docs/superpowers/plans/2026-07-15-memory-recall-large-repository-graph-foundation.md
@@ -0,0 +1,1061 @@
+# Memory Recall Large-Repository Graph Foundation Implementation Plan
+
+> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
+
+**Goal:** Make Recall Map and Map return truthful, bounded, reusable source-graph results for large JavaScript and TypeScript repositories.
+
+**Architecture:** Keep scanning and graph construction in the native AST provider, but split ignore matching into a focused module and put graph reuse behind an injected snapshot service. Bound nodes and edges before protocol validation, expose coverage and cache truth additively in the v1 schemas, and inject one snapshot service into the local Control API so Overview and Map share the same graph.
+
+**Tech Stack:** Node.js 22 ESM, dependency-free JavaScript, JSON Schema, Node test runner, loopback Control API.
+
+## Global Constraints
+
+- Preserve local-only, read-only behavior; no network calls, model calls, external writes, or raw source bodies.
+- Add no runtime dependency, graph database, persistent index, frontend framework, or graph library.
+- Support JavaScript and TypeScript only: `.js`, `.jsx`, `.mjs`, `.cjs`, `.ts`, and `.tsx`.
+- Keep `maxFiles` at 1,000 supported files; excluded and unsupported files do not consume that budget.
+- Keep the public graph within 20,000 nodes and 50,000 edges; exceeding candidates produce partial coverage instead of an unavailable graph.
+- Preserve structural edges before low-signal references in this order: `contains`, `defined_in`, `imports`, `exports`, `calls`, `references`.
+- Accept ordinary repository-relative directories named `users`, `Users`, or `private`; continue rejecting absolute paths, traversal, URI schemes, and encoded traversal.
+- Honor root and descendant `.gitignore` files plus root `.recallignore`; explicit includes may override non-security exclusions only.
+- Repeated Overview and Map requests against an unchanged root must reuse one in-process snapshot and one in-flight build.
+- Protocol changes are additive within v1 and require RFC, OpenAPI, examples, and compatibility-fixture updates.
+- Preserve the last valid snapshot when a refresh fails; surface it as stale rather than reporting a false empty success.
+
+---
+
+## File Map
+
+### Create
+
+- `providers/native/context-candidate-ast-code/src/ignore-rules.mjs`: parse and match dependency-free gitignore-style rules.
+- `packages/source-graph/src/orientation.mjs`: build deterministic repository groups, inter-group relations, and bounded focus neighborhoods.
+- `packages/source-graph/src/snapshot-service.mjs`: own cached graph snapshots, dirty generations, watchers, in-flight deduplication, and stale fallback.
+- `tests/source-graph-discovery.test.mjs`: focused discovery, ignore, and supported-file budget tests.
+- `tests/source-graph-snapshot-service.test.mjs`: focused cache, invalidation, concurrency, and stale fallback tests.
+- `scripts/source-graph-large-repo-smoke.mjs`: generated and optional real-repository cold/cached smoke measurement.
+
+### Modify
+
+- `providers/native/context-candidate-ast-code/src/index.mjs`: apply discovery policy before accounting and enforce graph budgets.
+- `packages/protocol/src/source-graph-locator.mjs`: separate relative locator safety from display-label safety.
+- `packages/protocol/schemas/source-graph.schema.json`: add bounded omission and coverage fields.
+- `packages/protocol/schemas/source-graph-preview.schema.json`: add snapshot state and bounded omission fields.
+- `packages/protocol/schemas/recall-map.schema.json`: expose cache state and truthful coverage on Overview.
+- `packages/source-graph/src/index.mjs`: query an injected snapshot and return fresh, cached, in-flight, stale, or unavailable state.
+- `packages/recall-map/src/index.mjs`: consume the injected source-graph snapshot service.
+- `services/control-api/src/server.mjs`: construct and close one snapshot service per server.
+- `services/control-api/src/route-contracts.mjs`: keep route response validation aligned with additive schemas.
+- `tests/source-graph-preview.test.mjs`: cover safe labels, bounded graphs, and stale diagnostics.
+- `tests/recall-map.test.mjs`: cover cache and coverage projection.
+- `tests/control-api-boundary.test.mjs`: prove Overview and Map share one graph build through the injectable server harness.
+- `examples/protocol/source-graph.json`: include partial graph coverage fields.
+- `examples/protocol/source-graph-preview.json`: include snapshot state.
+- `examples/protocol/recall-map.json`: include source snapshot state.
+- `examples/protocol/compatibility/invalid/source-graph-local-path.json`: retain an actually absolute invalid case.
+- `examples/protocol/compatibility/invalid/source-graph-preview-local-path.json`: retain an actually absolute invalid case.
+- `docs/api/openapi.yaml`: document additive snapshot and coverage fields.
+- `docs/usage/recall-map.md`: document ignore rules, partial coverage, cache semantics, and refresh.
+- `rfcs/0001-protocol-contracts.md`: record the additive v1 source-graph fields.
+- `package.json`: add the large-repository smoke command.
+
+---
+
+### Task 1: Fix locator and display-label safety without weakening path containment
+
+**Files:**
+- Modify: `packages/protocol/src/source-graph-locator.mjs`
+- Modify: `packages/protocol/src/index.mjs`
+- Modify: `packages/protocol/schemas/source-graph.schema.json`
+- Modify: `packages/protocol/schemas/source-graph-preview.schema.json`
+- Modify: `examples/protocol/compatibility/invalid/source-graph-local-path.json`
+- Modify: `examples/protocol/compatibility/invalid/source-graph-preview-local-path.json`
+- Test: `tests/source-graph-preview.test.mjs`
+
+**Interfaces:**
+- Consumes: `normalizeSourceGraphWorkspaceLocator(value, { stripFragment })`.
+- Produces: unchanged locator-normalization signature plus `isSafeSourceGraphDisplayLabel(value): boolean`.
+
+- [x] **Step 1: Write the failing relative-directory regression tests**
+
+Add these cases to `tests/source-graph-preview.test.mjs`:
+
+```js
+// Extend the existing node:fs/promises import with `rm` and import
+// normalizeSourceGraphWorkspaceLocator from packages/protocol/src/source-graph-locator.mjs.
+test('source graph accepts ordinary relative users and private directories', async (t) => {
+ const root = await mkdtemp(path.join(os.tmpdir(), 'recall-relative-users-'));
+ t.after(() => rm(root, { recursive: true, force: true }));
+ await mkdir(path.join(root, 'apps', 'api', 'users', '[userRef]'), { recursive: true });
+ await mkdir(path.join(root, 'src', 'private'), { recursive: true });
+ await writeFile(path.join(root, 'apps', 'api', 'users', '[userRef]', 'route.ts'), 'export function GET(){ return "ok"; }\n');
+ await writeFile(path.join(root, 'src', 'private', 'state.ts'), 'export const state = "local";\n');
+
+ const preview = await buildSourceGraphPreview({ root, workspaceId: 'ws_local' });
+
+ assert.equal(preview.graph.summary.fileCount, 2);
+ assert.equal(preview.graph.diagnostics.some(({ code }) => code.startsWith('source_graph_unavailable')), false);
+ assert(preview.graph.sampleNodes.some(({ locator }) => locator?.includes('/users/')));
+ assert(preview.graph.sampleNodes.some(({ locator }) => locator?.includes('/private/')));
+});
+
+test('source graph still rejects absolute and encoded traversal locators', () => {
+ for (const locator of [
+ '/Users/rebel/project/src/app.js',
+ 'C:\\Users\\rebel\\project\\src\\app.js',
+ 'workspace:///Users/rebel/project/src/app.js',
+ 'workspace://src/%252e%252e/secret.js',
+ 'https://example.com/source.js'
+ ]) {
+ assert.throws(
+ () => normalizeSourceGraphWorkspaceLocator(locator),
+ /source_graph_workspace_locator_invalid/
+ );
+ }
+});
+```
+
+- [x] **Step 2: Run the focused test and verify the current false rejection**
+
+Run:
+
+```bash
+node --test --test-name-pattern="ordinary relative users|absolute and encoded" tests/source-graph-preview.test.mjs
+```
+
+Expected: the relative `users` or `private` test fails with an unavailable graph or invalid locator while absolute and traversal cases remain rejected.
+
+- [x] **Step 3: Separate locator and label rules**
+
+In `packages/protocol/src/source-graph-locator.mjs`, remove the blanket `Users`, `private`, and `var/folders` segment exclusions from `SOURCE_GRAPH_WORKSPACE_LOCATOR_PATTERN`. Keep the leading slash, drive, URI-scheme, traversal, percent-encoding, length, and fragment constraints. Replace the absolute-directory exclusions in `SOURCE_GRAPH_SAFE_LABEL_PATTERN` with structural checks only, then export a named predicate:
+
+```js
+export function isSafeSourceGraphDisplayLabel(value) {
+ return typeof value === 'string' && SOURCE_GRAPH_SAFE_LABEL_RE.test(value);
+}
+```
+
+The locator prefix must remain:
+
+```js
+String.raw`^workspace://(?!/)(?![^/]*%)(?![A-Za-z][A-Za-z0-9+.-]*:)(?!\.\.(?:/|$))(?!.*\/\.\.(?:/|$))`
+```
+
+Update the identical schema patterns in both source-graph schemas. Change the two invalid compatibility examples so they use `workspace:///Users/rebel/project/src/app.js`; do not keep a repository-relative `workspace://Users/...` example marked invalid.
+
+- [x] **Step 4: Run focused protocol and source-graph verification**
+
+Run:
+
+```bash
+node --test --test-name-pattern="ordinary relative users|absolute and encoded|locator" tests/source-graph-preview.test.mjs
+npm run protocol:validate
+```
+
+Expected: focused tests pass and all protocol fixtures validate.
+
+- [x] **Step 5: Commit the safety correction**
+
+```bash
+git add packages/protocol/src/source-graph-locator.mjs packages/protocol/src/index.mjs packages/protocol/schemas/source-graph.schema.json packages/protocol/schemas/source-graph-preview.schema.json examples/protocol/compatibility/invalid/source-graph-local-path.json examples/protocol/compatibility/invalid/source-graph-preview-local-path.json tests/source-graph-preview.test.mjs
+git commit -m "fix: accept safe repository-relative graph paths"
+```
+
+### Task 2: Apply ignore rules before supported-file accounting
+
+**Files:**
+- Create: `providers/native/context-candidate-ast-code/src/ignore-rules.mjs`
+- Create: `tests/source-graph-discovery.test.mjs`
+- Modify: `providers/native/context-candidate-ast-code/src/index.mjs`
+
+**Interfaces:**
+- Produces: `parseIgnoreFile(text, { base = '' }): IgnoreRule[]`.
+- Produces: `isIgnoredPath(relativePath, { isDirectory, rules, explicitIncludes }): boolean`.
+- Produces: `loadRootRecallIgnore(root): Promise`.
+- `scanAstCodeWorkspace()` adds optional `explicitIncludes = []` and returns bounded ignore coverage.
+
+- [x] **Step 1: Write failing ignore and accounting tests**
+
+Create `tests/source-graph-discovery.test.mjs` with fixtures that prove exclusions happen before `maxFiles`:
+
+```js
+import test from 'node:test';
+import assert from 'node:assert/strict';
+import { mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises';
+import os from 'node:os';
+import path from 'node:path';
+import { scanAstCodeWorkspace } from '../providers/native/context-candidate-ast-code/src/index.mjs';
+
+test('discovery honors nested gitignore and recallignore before maxFiles', async (t) => {
+ const root = await mkdtemp(path.join(os.tmpdir(), 'recall-discovery-'));
+ t.after(() => rm(root, { recursive: true, force: true }));
+ await mkdir(path.join(root, 'src', 'generated'), { recursive: true });
+ await mkdir(path.join(root, '.worktrees', 'old', 'src'), { recursive: true });
+ await mkdir(path.join(root, '.venv', 'lib'), { recursive: true });
+ await writeFile(path.join(root, '.gitignore'), 'src/generated/\n');
+ await writeFile(path.join(root, '.recallignore'), 'src/ignored.ts\n');
+ await writeFile(path.join(root, 'src', '.gitignore'), 'nested.ts\n');
+ await writeFile(path.join(root, 'src', 'entry.ts'), 'export function entry(){ return 1; }\n');
+ await writeFile(path.join(root, 'src', 'nested.ts'), 'export const nested = 1;\n');
+ await writeFile(path.join(root, 'src', 'ignored.ts'), 'export const ignored = 1;\n');
+ await writeFile(path.join(root, 'src', 'generated', 'output.ts'), 'export const generated = 1;\n');
+ await writeFile(path.join(root, '.worktrees', 'old', 'src', 'copy.ts'), 'export const copy = 1;\n');
+ await writeFile(path.join(root, '.venv', 'lib', 'tool.js'), 'export const tool = 1;\n');
+
+ const scan = await scanAstCodeWorkspace({ root, maxFiles: 1 });
+
+ assert.equal(scan.fileCount, 1);
+ assert.deepEqual(scan.coverage.representedJsTsLocators, ['workspace://src/entry.ts']);
+ assert.equal(scan.coverage.maxFilesReached, false);
+ assert.equal(scan.coverage.ignoredFileCount, 2);
+ assert.equal(scan.coverage.ignoredDirectoryCount, 1);
+ assert(scan.coverage.excludedDirectoryCount >= 2);
+});
+
+test('explicit include overrides non-security ignore but not root containment', async (t) => {
+ const root = await mkdtemp(path.join(os.tmpdir(), 'recall-include-'));
+ t.after(() => rm(root, { recursive: true, force: true }));
+ await mkdir(path.join(root, 'src'), { recursive: true });
+ await writeFile(path.join(root, '.recallignore'), 'src/kept.ts\n');
+ await writeFile(path.join(root, 'src', 'kept.ts'), 'export const kept = true;\n');
+ const scan = await scanAstCodeWorkspace({ root, explicitIncludes: ['src/kept.ts'] });
+ assert.deepEqual(scan.coverage.representedJsTsLocators, ['workspace://src/kept.ts']);
+ await assert.rejects(
+ scanAstCodeWorkspace({ root, explicitIncludes: ['../outside.ts'] }),
+ /source_graph_explicit_include_invalid/
+ );
+});
+```
+
+- [x] **Step 2: Run the tests and verify missing ignore behavior**
+
+Run:
+
+```bash
+node --test tests/source-graph-discovery.test.mjs
+```
+
+Expected: FAIL because `.worktrees`, `.venv`, nested `.gitignore`, `.recallignore`, and `explicitIncludes` are not implemented.
+
+- [x] **Step 3: Implement dependency-free ignore parsing**
+
+Create `ignore-rules.mjs`. Parse blank lines, comments, escaped `#`/`!`, negation, root anchoring, directory-only suffixes, `*`, `?`, and `**`. Store the ignore-file base directory so descendant `.gitignore` rules are relative to their own directory:
+
+```js
+export function parseIgnoreFile(text, { base = '' } = {}) {
+ return String(text ?? '').split(/\r?\n/u).flatMap((raw, index) => {
+ const line = raw.trim();
+ if (!line || line.startsWith('#')) return [];
+ const negated = line.startsWith('!');
+ const pattern = (negated ? line.slice(1) : line).replace(/\\([#!])/gu, '$1');
+ if (!pattern) return [];
+ return [{ base, pattern, negated, directoryOnly: pattern.endsWith('/'), index }];
+ });
+}
+
+export function isIgnoredPath(relativePath, { isDirectory = false, rules = [], explicitIncludes = [] } = {}) {
+ const normalized = normalizeRelativePath(relativePath);
+ if (explicitIncludes.some((item) => item === normalized || item.startsWith(`${normalized}/`))) return false;
+ let ignored = false;
+ for (const rule of rules) {
+ if (rule.directoryOnly && !isDirectory) continue;
+ if (matchesIgnoreRule(normalized, rule)) ignored = !rule.negated;
+ }
+ return ignored;
+}
+
+export async function loadRootRecallIgnore(root) {
+ try {
+ return parseIgnoreFile(await readFile(path.join(root, '.recallignore'), 'utf8'), { base: '' });
+ } catch (error) {
+ if (error?.code === 'ENOENT') return [];
+ throw error;
+ }
+}
+
+function normalizeRelativePath(value) {
+ const raw = String(value ?? '');
+ const normalized = raw.replace(/^\.\//u, '');
+ if (!normalized || raw.includes('\\') || normalized.startsWith('/') || /(?:^|\/)\.\.(?:\/|$)/u.test(normalized) || /^[A-Za-z][A-Za-z0-9+.-]*:/u.test(normalized)) {
+ throw new Error('source_graph_explicit_include_invalid');
+ }
+ return normalized;
+}
+
+function matchesIgnoreRule(relativePath, rule) {
+ const raw = rule.pattern.replace(/\/$/u, '');
+ const anchored = raw.startsWith('/');
+ const pattern = anchored ? raw.slice(1) : raw;
+ const base = String(rule.base ?? '').replace(/\/$/u, '');
+ const scoped = base ? `${base}/${pattern}` : pattern;
+ const glob = anchored || pattern.includes('/')
+ ? scoped
+ : base ? `${base}/**/${pattern}` : `**/${pattern}`;
+ return path.matchesGlob(relativePath, glob)
+ || (!pattern.includes('/') && path.basename(relativePath) === pattern)
+ || (rule.directoryOnly && (relativePath === scoped || relativePath.startsWith(`${scoped}/`)));
+}
+```
+
+Import `readFile` from `node:fs/promises` and `path` from `node:path`. Use `path.matchesGlob()` only after normalization. Validate every explicit include with `normalizeRelativePath()` before scanning; security exclusions and root containment checks still run after a non-security ignore override.
+
+- [x] **Step 4: Integrate discovery policy into the scanner**
+
+In `scanAstCodeWorkspace()`:
+
+1. Expand default exclusions to `.worktrees`, `.venv`, `venv`, `site-packages`, `.cache`, `.pytest_cache`, `.turbo`, `.parcel-cache`, `.agents`, `.claude`, `test-results`, and generated build directories.
+2. Load root `.recallignore` once.
+3. When entering a directory, load its `.gitignore` and append rules for descendants.
+4. Evaluate default exclusions and ignore rules before `lstat()` recursion and before unsupported-file counting.
+5. Increment `visitedFiles` only for supported files that are actually read.
+6. Delete `discoverExcludedDirectoriesAfterCap()`; the scan must not traverse excluded trees after reaching the supported-file cap.
+7. Add bounded `ignoredFileCount`, `ignoredDirectoryCount`, `ignoredSamples` (maximum 100), and `unsupportedExtensionCounts` (maximum 32 entries) to scan coverage. Keep these internal to the scan result until Task 3 extends the public graph schemas.
+8. Keep an internal `index.discoveryIdentity` with the normalized relevant ignore-file locators (maximum 100) and a SHA-256 fingerprint of their normalized rules plus explicit includes. Do not project these new fields into the public graph until Task 3 extends the schema.
+
+Keep coverage samples bounded with the existing `addBoundedLocator()` helper.
+
+- [x] **Step 5: Verify discovery and existing AST behavior**
+
+Run:
+
+```bash
+node --test tests/source-graph-discovery.test.mjs tests/ast-code-candidate-source.test.mjs tests/source-graph-preview.test.mjs
+```
+
+Expected: all focused tests pass and supported AST/source-graph behavior remains unchanged.
+
+- [x] **Step 6: Commit discovery policy**
+
+```bash
+git add providers/native/context-candidate-ast-code/src/ignore-rules.mjs providers/native/context-candidate-ast-code/src/index.mjs tests/source-graph-discovery.test.mjs
+git commit -m "feat: bound source discovery before file accounting"
+```
+
+### Task 3: Bound graph construction and report omitted candidates
+
+**Files:**
+- Modify: `providers/native/context-candidate-ast-code/src/index.mjs`
+- Modify: `packages/protocol/schemas/source-graph.schema.json`
+- Modify: `packages/protocol/schemas/source-graph-preview.schema.json`
+- Modify: `examples/protocol/source-graph.json`
+- Modify: `examples/protocol/source-graph-preview.json`
+- Modify: `rfcs/0001-protocol-contracts.md`
+- Modify: `docs/api/openapi.yaml`
+- Test: `tests/source-graph-preview.test.mjs`
+
+**Interfaces:**
+- `buildSourceGraphFromIndex(index, options)` adds `maxNodes = 20_000` and `maxEdges = 50_000`.
+- `graph.summary.coverage` adds represented, candidate, and omitted node/edge counts by kind.
+
+- [x] **Step 1: Write a graph-budget regression test**
+
+Add this generated dense-source test to `tests/source-graph-preview.test.mjs`. Extend the existing provider import with `buildJsTsSourceIndex` and `buildSourceGraphFromIndex`:
+
+```js
+test('graph budget preserves structural and call edges before references', async (t) => {
+ const root = await mkdtemp(path.join(os.tmpdir(), 'recall-dense-graph-'));
+ t.after(() => rm(root, { recursive: true, force: true }));
+ await mkdir(path.join(root, 'src'), { recursive: true });
+ const targets = Array.from({ length: 30 }, (_, index) => `export function target${index}(){ return ${index}; }`);
+ const calls = Array.from({ length: 30 }, (_, caller) => (
+ `export function caller${caller}(){ return ${Array.from({ length: 30 }, (_, target) => `target${target}()`).join(' + ')}; }`
+ ));
+ await writeFile(path.join(root, 'src', 'dense.js'), `${targets.join('\n')}\n${calls.join('\n')}\n`);
+
+ const index = await buildJsTsSourceIndex({ root, workspaceId: 'ws_local' });
+ const graph = buildSourceGraphFromIndex(index, {
+ builtAt: '2026-07-15T10:00:00.000Z',
+ maxNodes: 200,
+ maxEdges: 300
+ });
+
+ assert(graph.nodes.length <= 200);
+ assert(graph.edges.length <= 300);
+ assert.equal(graph.summary.coverage.status, 'partial');
+ assert(graph.summary.coverage.omittedEdgeCount > 0);
+ assert(graph.summary.coverage.omittedEdgeKindCounts.references > 0);
+ assert(graph.summary.edgeKindCounts.contains > 0);
+ assert(graph.summary.edgeKindCounts.defined_in > 0);
+ assert(graph.summary.edgeKindCounts.calls > 0);
+ assert.equal(validateJsonSchema(sourceGraphSchema, graph).valid, true);
+});
+```
+
+- [x] **Step 2: Run the budget test and verify schema overflow**
+
+Run:
+
+```bash
+node --test --test-name-pattern="graph budget" tests/source-graph-preview.test.mjs
+```
+
+Expected: FAIL because `buildSourceGraphFromIndex` has no budgets and the schema has no omission fields.
+
+- [x] **Step 3: Implement deterministic node and edge budgets**
+
+Add constants and normalize options:
+
+```js
+export const DEFAULT_SOURCE_GRAPH_MAX_NODES = 20_000;
+export const DEFAULT_SOURCE_GRAPH_MAX_EDGES = 50_000;
+const EDGE_BUDGET_ORDER = Object.freeze(['contains', 'defined_in', 'imports', 'exports', 'calls', 'references']);
+```
+
+Build nodes in deterministic file, chunk, symbol, and module order. When the node budget is exhausted, count omitted nodes by kind and do not create edges to omitted nodes. Stage edge candidates by kind, sort each kind by `id`, then take them in `EDGE_BUDGET_ORDER` until `maxEdges`. Produce:
+
+```js
+coverage: {
+ ...index.coverage,
+ ignoreRuleFingerprint: index.discoveryIdentity.ignoreRuleFingerprint,
+ ignoreFileLocators: index.discoveryIdentity.ignoreFileLocators,
+ status: omittedNodeCount || omittedEdgeCount || index.coverage.status === 'partial' ? 'partial' : 'complete',
+ candidateNodeCount,
+ representedNodeCount: nodes.length,
+ omittedNodeCount,
+ omittedNodeKindCounts,
+ candidateEdgeCount,
+ representedEdgeCount: edges.length,
+ omittedEdgeCount,
+ omittedEdgeKindCounts,
+ reasonCodes: uniqueSortedStrings([
+ ...index.coverage.reasonCodes,
+ ...(omittedNodeCount ? ['node_budget_reached'] : []),
+ ...(omittedEdgeCount ? ['edge_budget_reached'] : [])
+ ])
+}
+```
+
+Do not truncate after graph construction. The returned graph itself must satisfy the public schema.
+
+- [x] **Step 4: Extend additive schemas, examples, OpenAPI, and RFC**
+
+Add optional bounded integer/count-map properties to the shared coverage definitions in both graph schemas. Also allow `ignoreRuleFingerprint` as a `sha256:` string and up to 100 safe workspace-relative `ignoreFileLocators`; these fields let the later snapshot service identify the discovery policy without exposing file bodies or absolute roots. Keep existing required fields and schema versions unchanged. Update `examples/protocol/source-graph.json` and `source-graph-preview.json` with a partial example. Add one paragraph to RFC 0001 explaining that additive v1 coverage fields report omitted candidates and never expand authority. Mirror the fields in `docs/api/openapi.yaml`.
+
+- [x] **Step 5: Run graph and protocol verification**
+
+Run:
+
+```bash
+node --test tests/source-graph-preview.test.mjs tests/ast-code-candidate-source.test.mjs
+npm run protocol:validate
+```
+
+Expected: graph-budget tests, existing graph tests, and compatibility fixtures pass.
+
+- [x] **Step 6: Commit bounded construction**
+
+```bash
+git add providers/native/context-candidate-ast-code/src/index.mjs packages/protocol/schemas/source-graph.schema.json packages/protocol/schemas/source-graph-preview.schema.json examples/protocol/source-graph.json examples/protocol/source-graph-preview.json docs/api/openapi.yaml rfcs/0001-protocol-contracts.md tests/source-graph-preview.test.mjs
+git commit -m "feat: return bounded partial source graphs"
+```
+
+### Task 4: Add deterministic orientation and focused-neighborhood projections
+
+**Files:**
+- Create: `packages/source-graph/src/orientation.mjs`
+- Modify: `packages/source-graph/src/index.mjs`
+- Modify: `packages/recall-map/src/index.mjs`
+- Modify: `packages/protocol/schemas/source-graph-preview.schema.json`
+- Modify: `packages/protocol/schemas/recall-map.schema.json`
+- Modify: `examples/protocol/source-graph-preview.json`
+- Modify: `examples/protocol/recall-map.json`
+- Test: `tests/source-graph-preview.test.mjs`
+- Test: `tests/recall-map.test.mjs`
+
+**Interfaces:**
+- Produces: `buildSourceGraphOrientation(graph, options): { groups, relations }`.
+- Produces: `buildSourceGraphFocus(graph, options): { nodes, edges, omittedNodes, omittedEdges }`.
+- `buildSourceGraphPreview()` adds top-level `orientation` and `focus` projections.
+- `buildRecallMap()` projects `orientation.groups` and `orientation.relations` under `architecture`.
+
+- [x] **Step 1: Write failing deterministic orientation tests**
+
+Extend the provider import with `buildJsTsSourceGraph` and `rankArchitectureNodes`, and import both new projection functions from `orientation.mjs`. Add this test and helper:
+
+```js
+test('source graph orientation is deterministic and bounded', async (t) => {
+ const root = await writeOrientationRepository(t);
+ const graph = await buildJsTsSourceGraph({ root, workspaceId: 'ws_local' });
+ const ranking = rankArchitectureNodes(graph, { changedLocators: ['workspace://apps/web/app.js'], limit: 12 });
+ const options = {
+ changedLocators: ['workspace://apps/web/app.js'],
+ entryPoints: ranking.entryPoints,
+ maxGroups: 12,
+ maxRelations: 20
+ };
+ const orientation = buildSourceGraphOrientation(graph, options);
+ assert.deepEqual(orientation.groups.map(({ prefix }) => prefix), [
+ 'apps/web',
+ 'packages/source-graph',
+ 'providers/native/context-candidate-ast-code',
+ 'scripts',
+ 'services/control-api',
+ 'tests'
+ ]);
+ assert.equal(orientation.groups.find(({ prefix }) => prefix === 'apps/web').changedFileCount, 1);
+ assert.equal(orientation.groups.every(({ entryPoints }) => entryPoints.length <= 2), true);
+ assert.equal(orientation.relations.length <= 20, true);
+ assert.deepEqual(orientation, buildSourceGraphOrientation(structuredClone(graph), options));
+});
+
+async function writeOrientationRepository(t) {
+ const root = await mkdtemp(path.join(os.tmpdir(), 'recall-orientation-'));
+ t.after(() => rm(root, { recursive: true, force: true }));
+ const files = new Map([
+ ['apps/web/app.js', 'import { build } from "../../packages/source-graph/index.js";\nexport function renderOverview(){ return build(); }\n'],
+ ['packages/source-graph/index.js', 'import { serve } from "../../services/control-api/server.js";\nexport function build(){ return serve(); }\n'],
+ ['services/control-api/server.js', 'import { parse } from "../../providers/native/context-candidate-ast-code/index.js";\nexport function serve(){ return parse(); }\n'],
+ ['providers/native/context-candidate-ast-code/index.js', 'export function parse(){ return "ready"; }\n'],
+ ['scripts/smoke.js', 'import { renderOverview } from "../apps/web/app.js";\nexport const smoke = renderOverview();\n'],
+ ['tests/web.test.js', 'import { renderOverview } from "../apps/web/app.js";\nexport const expected = typeof renderOverview;\n']
+ ]);
+ for (const [relative, body] of files) {
+ await mkdir(path.dirname(path.join(root, relative)), { recursive: true });
+ await writeFile(path.join(root, relative), body);
+ }
+ return root;
+}
+```
+
+- [x] **Step 2: Write failing focused-neighborhood tests**
+
+For a query result inside `apps/web`, reuse `writeOrientationRepository()` and assert the focus projection contains seed nodes and bounded adjacent edges but not the full graph:
+
+```js
+test('source graph focus returns a bounded neighborhood', async (t) => {
+ const root = await writeOrientationRepository(t);
+ const graph = await buildJsTsSourceGraph({ root, workspaceId: 'ws_local' });
+ const seed = graph.nodes.find(({ label }) => label === 'renderOverview');
+ assert(seed);
+ const focus = buildSourceGraphFocus(graph, {
+ seedNodeIds: [seed.id],
+ locatorPrefix: 'workspace://apps/web',
+ nodeLimit: 50,
+ edgeLimit: 100
+ });
+ assert(focus.nodes.some(({ id }) => id === seed.id));
+ assert(focus.nodes.every(({ locator }) => !locator || locator.startsWith('workspace://apps/web')));
+ assert(focus.nodes.length <= 50);
+ assert(focus.edges.length <= 100);
+ assert(focus.omittedNodes > 0 || focus.nodes.length < graph.nodes.length);
+});
+```
+
+- [x] **Step 3: Run the projection tests and verify missing exports**
+
+Run:
+
+```bash
+node --test --test-name-pattern="deterministic orientation|focused neighborhood" tests/source-graph-preview.test.mjs
+```
+
+Expected: FAIL because `orientation.mjs`, `buildSourceGraphOrientation`, and `buildSourceGraphFocus` do not exist.
+
+- [x] **Step 4: Implement deterministic group derivation**
+
+Create `orientation.mjs`. Convert node locators to repository-relative paths. Use two segments for known workspace roots (`apps`, `packages`, `services`, `plugins`, `examples`, `tests`, and `scripts`), three for `providers//` when available, and one segment otherwise. Never invent a group.
+
+```js
+function groupPrefix(locator) {
+ const parts = relativeLocator(locator).split('/').filter(Boolean);
+ if (!parts.length) return null;
+ if (parts[0] === 'providers') return parts.slice(0, Math.min(3, parts.length - 1 || 1)).join('/');
+ if (new Set(['apps', 'packages', 'services', 'plugins', 'examples', 'tests', 'scripts']).has(parts[0])) {
+ return parts.slice(0, Math.min(2, parts.length - 1 || 1)).join('/');
+ }
+ return parts[0];
+}
+
+function relativeLocator(locator) {
+ const value = String(locator ?? '').split('#', 1)[0];
+ return value.startsWith('workspace://') ? value.slice('workspace://'.length) : '';
+}
+```
+
+Count unique files and symbols per group. Assign up to two ranked entry points by locator prefix. Aggregate only inter-group `imports` and `calls` relations, sort by descending count then source/target prefix, and cap at 20. Create stable IDs with the existing hash helper; do not expose package-manager metadata or absolute paths.
+
+- [x] **Step 5: Implement a bounded one-hop focus projection**
+
+Start from query/search/trace/impact seed IDs. If `locatorPrefix` is present, include matching file and symbol nodes first. Add one-hop edges in priority order `calls`, `imports`, `exports`, `defined_in`, `contains`, `references`. Add the opposite endpoint only while under the node limit. Sort returned nodes/edges by ID and report omitted counts from the eligible neighborhood.
+
+```js
+return Object.freeze({
+ nodeLimit,
+ edgeLimit,
+ nodes: Object.freeze(selectedNodes),
+ edges: Object.freeze(selectedEdges),
+ omittedNodes: Math.max(0, eligibleNodeIds.size - selectedNodes.length),
+ omittedEdges: Math.max(0, eligibleEdges.length - selectedEdges.length)
+});
+```
+
+- [x] **Step 6: Wire projections into preview and Recall Map**
+
+Build `orientation` from the validated public graph. Build focus seeds from search result node IDs, trace path node IDs, and impact node IDs. For an unscoped empty query, return an empty focus so Overview uses groups rather than a raw file graph. Project the same group/relations objects into Recall Map:
+
+```js
+architecture: {
+ ...existingArchitecture,
+ groups: preview.orientation.groups,
+ groupRelations: preview.orientation.relations
+}
+```
+
+Add optional strict bounded definitions to both schemas: 12 groups, 20 relations, 200 focus nodes, and 400 focus edges. The producer always emits them, while the optional schema fields preserve additive v1 reader compatibility. Update both examples.
+
+- [x] **Step 7: Verify projection and protocol behavior**
+
+Run:
+
+```bash
+node --test tests/source-graph-preview.test.mjs tests/recall-map.test.mjs
+npm run protocol:validate
+```
+
+Expected: orientation, focus, Recall Map, and protocol tests pass.
+
+- [x] **Step 8: Commit orientation data**
+
+```bash
+git add packages/source-graph/src/orientation.mjs packages/source-graph/src/index.mjs packages/recall-map/src/index.mjs packages/protocol/schemas/source-graph-preview.schema.json packages/protocol/schemas/recall-map.schema.json examples/protocol/source-graph-preview.json examples/protocol/recall-map.json tests/source-graph-preview.test.mjs tests/recall-map.test.mjs
+git commit -m "feat: project bounded repository orientation data"
+```
+
+### Task 5: Add the injected in-process snapshot service
+
+**Files:**
+- Create: `packages/source-graph/src/snapshot-service.mjs`
+- Create: `tests/source-graph-snapshot-service.test.mjs`
+- Modify: `packages/source-graph/src/index.mjs`
+- Modify: `packages/protocol/schemas/source-graph-preview.schema.json`
+- Modify: `examples/protocol/source-graph-preview.json`
+
+**Interfaces:**
+- Produces: `createSourceGraphSnapshotService(options): SourceGraphSnapshotService`.
+- Produces methods `getSnapshot(request)`, `markDirty(root, reason)`, `inspect(root)`, and `close()`.
+- `buildSourceGraphPreview(options)` adds optional `snapshotService` and `refresh = false`.
+- Snapshot identity is SHA-256 over canonical root, graph/parser version, ignore-rule fingerprint, and source-index fingerprint.
+
+- [x] **Step 1: Write failing cache, concurrency, invalidation, and stale tests**
+
+Create `tests/source-graph-snapshot-service.test.mjs` using an injected `buildGraph` counter and injected watcher:
+
+```js
+test('snapshot service reuses, deduplicates, invalidates, and preserves last valid graph', async (t) => {
+ const root = await mkdtemp(path.join(os.tmpdir(), 'recall-snapshot-service-'));
+ t.after(() => rm(root, { recursive: true, force: true }));
+ let builds = 0;
+ let fail = false;
+ let onChange = null;
+ const graph = fixtureGraph();
+ const service = createSourceGraphSnapshotService({
+ buildGraph: async () => {
+ builds += 1;
+ await Promise.resolve();
+ if (fail) throw new Error('fixture_build_failed');
+ return graph;
+ },
+ watchRoot: (_root, listener) => {
+ onChange = listener;
+ return { close() {} };
+ },
+ clock: () => 1000
+ });
+ t.after(() => service.close());
+
+ const request = { root, workspaceId: 'ws_local', maxFiles: 1000, maxFileBytes: 524288 };
+ const [first, concurrent] = await Promise.all([service.getSnapshot(request), service.getSnapshot(request)]);
+ assert.equal(builds, 1);
+ assert.equal(first.reuse, 'cold');
+ assert.equal(concurrent.reuse, 'inflight');
+
+ const cached = await service.getSnapshot(request);
+ assert.equal(cached.reuse, 'cache');
+ assert.equal(builds, 1);
+ assert.match(service.inspect(root).identity, /^sha256:[a-f0-9]{64}$/u);
+
+ onChange('change', 'src/app.js');
+ fail = true;
+ const stale = await service.getSnapshot(request);
+ assert.equal(stale.status, 'stale');
+ assert.equal(stale.graph.graphFingerprint, graph.graphFingerprint);
+ assert.equal(builds, 2);
+});
+
+test('snapshot service falls back to a bounded metadata scan when recursive watch is unavailable', async (t) => {
+ const root = await mkdtemp(path.join(os.tmpdir(), 'recall-snapshot-fallback-'));
+ t.after(() => rm(root, { recursive: true, force: true }));
+ let builds = 0;
+ let manifest = 'manifest:a';
+ const unavailable = Object.assign(new Error('recursive watch unavailable'), { code: 'ERR_FEATURE_UNAVAILABLE' });
+ const service = createSourceGraphSnapshotService({
+ buildGraph: async () => {
+ builds += 1;
+ return fixtureGraph();
+ },
+ watchRoot: () => { throw unavailable; },
+ freshnessProbe: async () => manifest,
+ clock: () => 1000
+ });
+ t.after(() => service.close());
+ const request = { root, workspaceId: 'ws_local', maxFiles: 1000, maxFileBytes: 524288 };
+
+ await service.getSnapshot(request);
+ const cached = await service.getSnapshot(request);
+ assert.equal(cached.reuse, 'cache');
+ assert.equal(cached.validationMode, 'metadata-scan');
+ assert.equal(builds, 1);
+
+ manifest = 'manifest:b';
+ const rebuilt = await service.getSnapshot(request);
+ assert.equal(rebuilt.reuse, 'cold');
+ assert.equal(builds, 2);
+});
+
+function fixtureGraph() {
+ return Object.freeze({
+ schemaVersion: '1.0.0',
+ workspaceId: 'ws_local',
+ graphVersion: 'memory-recall-test-1.0.0',
+ parserVersion: 'memory-recall-test-parser',
+ builtAt: '2026-07-15T10:00:00.000Z',
+ sourceIndexFingerprint: `sha256:${'a'.repeat(64)}`,
+ graphFingerprint: `sha256:${'b'.repeat(64)}`,
+ summary: {
+ fileCount: 1,
+ symbolCount: 0,
+ moduleCount: 0,
+ nodeCount: 0,
+ edgeCount: 0,
+ nodeKindCounts: {},
+ edgeKindCounts: {},
+ hotspots: [],
+ entryPoints: [],
+ coverage: {
+ ignoreRuleFingerprint: `sha256:${'c'.repeat(64)}`,
+ ignoreFileLocators: []
+ }
+ },
+ nodes: [],
+ edges: [],
+ diagnostics: []
+ });
+}
+```
+
+Import `mkdtemp` and `rm` from `node:fs/promises`, plus `os` and `path`; the request root must be canonicalized by the service.
+
+- [x] **Step 2: Run the service test and verify the missing module**
+
+Run:
+
+```bash
+node --test tests/source-graph-snapshot-service.test.mjs
+```
+
+Expected: FAIL with module-not-found for `snapshot-service.mjs`.
+
+- [x] **Step 3: Implement the snapshot service**
+
+Create `snapshot-service.mjs` with one entry per canonical root plus graph options. Use `node:fs.watch` recursively by default. Relevant supported-source, `.gitignore`, and `.recallignore` events increment `dirtyGeneration`; ignored/cache/build output events do not. The service result shape is:
+
+```js
+Object.freeze({
+ graph,
+ status: 'fresh', // or 'stale'
+ reuse: 'cold', // or 'cache' or 'inflight'
+ reason: null,
+ generation,
+ buildDurationMs,
+ builtAt: graph.builtAt
+})
+```
+
+Use a `Map` of entries with `{ graph, identity, manifest, dirty, generation, inFlight, watcher, validationMode, lastBuildDurationMs }`. Compute identity with `node:crypto` SHA-256 over canonical root, `graphVersion`, `parserVersion`, `graph.summary.coverage.ignoreRuleFingerprint`, and `sourceIndexFingerprint`. Set `inFlight` before awaiting the build. Clear it in `finally`. Replace `graph`, identity, and manifest only after a successful build. On failure with a last valid graph, return `status: 'stale'`, `reason: safe error code`, and the old graph. On first-build failure, rethrow. `close()` closes every watcher and clears the map.
+
+The default watcher uses `fs.watch(root, { recursive: true })`. If recursive watching reports `ERR_FEATURE_UNAVAILABLE` or `ERR_INVALID_ARG_VALUE`, set `validationMode` to `metadata-scan`. The default bounded freshness probe stats the canonical root, safe file-node locators, every directory prefix derived from those locators, and `ignoreFileLocators`, capped by the existing 1,000-file/100-ignore-file bounds; sort `{ locator, size, mtimeMs }` tuples and hash them. Before returning a cached result in this mode, compare the manifest and mark dirty on change. This fallback may scan metadata but must not read source bodies or walk outside the canonical root.
+
+- [x] **Step 4: Query the snapshot from the preview facade**
+
+In `buildSourceGraphPreview()`:
+
+```js
+const snapshot = snapshotService
+ ? await snapshotService.getSnapshot({ root, workspaceId: safeWorkspaceId, maxFiles: boundedMaxFiles, maxFileBytes: boundedMaxFileBytes, refresh })
+ : { graph: await buildJsTsSourceGraph({ root, workspaceId: safeWorkspaceId, maxFiles: boundedMaxFiles, maxFileBytes: boundedMaxFileBytes, clock: () => generatedAt }), status: 'fresh', reuse: 'cold', reason: null, generation: 0, buildDurationMs: null };
+graph = snapshot.graph;
+```
+
+Add a `snapshot` object to every preview response with `status`, `reuse`, `reason`, `generation`, `validationMode`, `buildDurationMs`, and `builtAt`. Define it as an optional additive field in the v1 schema so older valid producers remain readable. The unavailable response uses `{ status: 'unavailable', reuse: 'none', reason: code, generation: 0, validationMode: 'none', buildDurationMs: null, builtAt: null }`. The UI may label `metadata-scan` as a scan; it must not describe it as watcher-backed reuse.
+
+- [x] **Step 5: Verify snapshot and facade behavior**
+
+Run:
+
+```bash
+node --test tests/source-graph-snapshot-service.test.mjs tests/source-graph-preview.test.mjs
+npm run protocol:validate
+```
+
+Expected: service, facade, and protocol tests pass.
+
+- [x] **Step 6: Commit snapshot service**
+
+```bash
+git add packages/source-graph/src/snapshot-service.mjs packages/source-graph/src/index.mjs packages/protocol/schemas/source-graph-preview.schema.json examples/protocol/source-graph-preview.json tests/source-graph-snapshot-service.test.mjs tests/source-graph-preview.test.mjs
+git commit -m "feat: reuse source graph snapshots"
+```
+
+### Task 6: Share one snapshot across Recall Map and Map API operations
+
+**Files:**
+- Modify: `packages/recall-map/src/index.mjs`
+- Modify: `packages/protocol/schemas/recall-map.schema.json`
+- Modify: `examples/protocol/recall-map.json`
+- Modify: `services/control-api/src/server.mjs`
+- Modify: `services/control-api/src/route-contracts.mjs`
+- Modify: `tests/recall-map.test.mjs`
+- Modify: `tests/control-api-boundary.test.mjs`
+
+**Interfaces:**
+- `buildRecallMap(options)` adds `sourceGraphSnapshotService` and `refreshSourceGraph = false`.
+- `createControlApiServer(options)` adds injectable `sourceGraphSnapshotService`.
+
+- [x] **Step 1: Write the failing shared-build Control API test**
+
+In `tests/control-api-boundary.test.mjs`, import `buildJsTsSourceGraph` and `createSourceGraphSnapshotService`. Use the existing `startServer()` injectable harness so the test exercises both authenticated routes against the same real service and temporary repository:
+
+```js
+test('Recall Map and source preview share one source snapshot', async (t) => {
+ const sourceGraphRoot = await mkdtemp(path.join(os.tmpdir(), 'oaf-shared-source-snapshot-'));
+ t.after(async () => rm(sourceGraphRoot, { recursive: true, force: true }));
+ await mkdir(path.join(sourceGraphRoot, 'src'), { recursive: true });
+ await writeFile(path.join(sourceGraphRoot, 'src', 'app.js'), 'export const sharedSnapshotFixture = true;\n');
+
+ let buildCount = 0;
+ const sourceGraphSnapshotService = createSourceGraphSnapshotService({
+ buildGraph: async (options) => {
+ buildCount += 1;
+ return buildJsTsSourceGraph(options);
+ }
+ });
+ t.after(() => sourceGraphSnapshotService.close());
+ const api = await startServer(t, { sourceGraphRoot, sourceGraphSnapshotService });
+ const authHeaders = { cookie: api.auth.cookie, origin: api.base };
+
+ const recall = await request(api.base, '/api/recall/map?workspaceId=ws_local', {
+ headers: authHeaders
+ });
+ const map = await request(api.base, '/api/context/graph/preview', {
+ method: 'POST',
+ headers: {
+ ...authHeaders,
+ 'content-type': 'application/json',
+ 'x-csrf-token': api.auth.csrf
+ },
+ body: JSON.stringify({ workspaceId: 'ws_local', sampleLimit: 3 })
+ });
+
+ assert.equal(recall.status, 200, recall.text);
+ assert.equal(map.status, 200, map.text);
+ assert.equal(buildCount, 1);
+ assert.equal(recall.body.support.sourceGraph.snapshot.reuse, 'cold');
+ assert.equal(map.body.snapshot.reuse, 'cache');
+ assert.equal(map.body.graph.summary.fileCount > 0, true);
+});
+```
+
+The test owns and closes its injected service. The server must never close a caller-owned service.
+
+Also add a stale fixture to `tests/recall-map.test.mjs` and assert `support.sourceGraph.coverage.status === 'stale'`, not `unavailable` and not a zero-result ready state.
+
+- [x] **Step 2: Run focused tests and verify duplicate construction**
+
+Run:
+
+```bash
+node --test --test-name-pattern="share one source snapshot|stale source snapshot" tests/control-api-boundary.test.mjs tests/recall-map.test.mjs
+```
+
+Expected: FAIL because Recall Map and preview build independently and Recall Map has no snapshot projection.
+
+- [x] **Step 3: Inject the service into Recall Map**
+
+Call `buildSourceGraphPreview({ snapshotService: sourceGraphSnapshotService, refresh: refreshSourceGraph, ... })`. Project snapshot truth under `support.sourceGraph.snapshot`:
+
+```js
+snapshot: {
+ status: preview.snapshot.status,
+ reuse: preview.snapshot.reuse,
+ reason: preview.snapshot.reason,
+ validationMode: preview.snapshot.validationMode,
+ builtAt: preview.snapshot.builtAt,
+ buildDurationMs: preview.snapshot.buildDurationMs
+}
+```
+
+Set coverage to `stale` when the last valid snapshot is shown after a failed refresh, `partial` for bounded omission, `complete` only for complete current coverage, and `unavailable` only when no graph exists.
+
+- [x] **Step 4: Own one service in the Control API server**
+
+Import `createSourceGraphSnapshotService`. In `createControlApiServer()`, use the injected service or create one:
+
+```js
+const sourceSnapshots = sourceGraphSnapshotService ?? createSourceGraphSnapshotService();
+const ownsSourceSnapshots = !sourceGraphSnapshotService;
+server.once('close', () => {
+ if (ownsSourceSnapshots) sourceSnapshots.close();
+});
+```
+
+Pass `sourceSnapshots` to both `buildRecallMap()` cases and `buildSourceGraphPreview()` in `previewContextGraph`. Add an optional boolean `refresh` to the POST Recall Map and graph-preview request schemas. Pass it as `refreshSourceGraph` or `refresh`; a true value marks the root dirty before the request. GET remains cache-aware and read-only. Preserve all auth, rate-limit, validation, and side-effect behavior.
+
+- [x] **Step 5: Extend Recall Map schema and examples additively**
+
+Allow coverage states `complete`, `partial`, `stale`, and `unavailable`. Add the bounded snapshot object and optional request `refresh` flag. Update the example and route contract fixtures. Do not rename existing source-graph or readiness fields.
+
+- [x] **Step 6: Verify shared API behavior**
+
+Run:
+
+```bash
+node --test tests/recall-map.test.mjs tests/control-api.test.mjs tests/control-api-boundary.test.mjs
+npm run protocol:validate
+```
+
+Expected: all focused API, boundary, and protocol tests pass with one shared graph build.
+
+- [x] **Step 7: Commit Control API reuse**
+
+```bash
+git add packages/recall-map/src/index.mjs packages/protocol/schemas/recall-map.schema.json examples/protocol/recall-map.json services/control-api/src/server.mjs services/control-api/src/route-contracts.mjs tests/recall-map.test.mjs tests/control-api-boundary.test.mjs
+git commit -m "feat: share graph snapshots across local map routes"
+```
+
+### Task 7: Add generated and real-repository performance proof
+
+**Files:**
+- Create: `scripts/source-graph-large-repo-smoke.mjs`
+- Modify: `package.json`
+- Modify: `docs/usage/recall-map.md`
+- Test: `tests/source-graph-preview.test.mjs`
+
+**Interfaces:**
+- Produces command: `npm run source-graph:large-smoke`.
+- Optional environment: `MEMORY_RECALL_LARGE_REPO_ROOT=/absolute/read-only/repository`.
+- Emits one JSON object with cold/cached timings, counts, coverage, cache reuse, and validation state.
+
+- [x] **Step 1: Write the smoke script assertions before implementation**
+
+Create the script entry with these terminal assertions:
+
+```js
+must(first.graph.summary.fileCount > 0, 'large_repo_graph_empty');
+must(!first.graph.diagnostics.some(({ code }) => code.startsWith('source_graph_unavailable')), 'large_repo_graph_unavailable');
+must(first.graph.summary.nodeCount <= 20_000, 'large_repo_node_budget_exceeded');
+must(first.graph.summary.edgeCount <= 50_000, 'large_repo_edge_budget_exceeded');
+must(second.snapshot.reuse === 'cache', 'large_repo_snapshot_not_reused');
+must(cachedMs <= coldMs * 0.2, `large_repo_cache_not_80_percent_faster:${coldMs}:${cachedMs}`);
+```
+
+The generated fixture must include at least 1,100 supported files, more than 50,000 candidate relations, ordinary `users` paths, `.worktrees`, `.venv`, generated output, nested `.gitignore`, and `.recallignore`. Use bounded file bodies and remove the temporary fixture in `finally`.
+
+- [x] **Step 2: Add the package command and run it red**
+
+Add:
+
+```json
+"source-graph:large-smoke": "node scripts/source-graph-large-repo-smoke.mjs"
+```
+
+Run:
+
+```bash
+npm run source-graph:large-smoke
+```
+
+Expected before the preceding tasks are complete: FAIL on unavailable graph, edge budget, ignored-tree traversal, or cache reuse.
+
+- [x] **Step 3: Finish generated and optional real-repository measurement**
+
+Use one `createSourceGraphSnapshotService()` for both preview calls. When `MEMORY_RECALL_LARGE_REPO_ROOT` is present, run the same read-only checks against that canonical root without creating or editing files there. Emit:
+
+```js
+console.log(JSON.stringify({
+ schemaVersion: '1.0.0',
+ rootKind: configuredRoot ? 'configured' : 'generated',
+ coldMs,
+ cachedMs,
+ cacheReductionPercent: Number(((1 - cachedMs / coldMs) * 100).toFixed(2)),
+ snapshot: second.snapshot,
+ summary: first.graph.summary,
+ diagnostics: first.graph.diagnostics.map(({ code }) => code),
+ protocolValid: validateJsonSchema(sourceGraphPreviewSchema, first).valid
+}, null, 2));
+```
+
+- [x] **Step 4: Document operator behavior**
+
+Update `docs/usage/recall-map.md` with default exclusions, `.recallignore`, supported-file budgeting, partial coverage reason codes, automatic invalidation, explicit refresh, and the large-repository command. State that timings are local measurements, not universal claims.
+
+- [x] **Step 5: Run foundation verification**
+
+Run:
+
+```bash
+npm run source-graph:large-smoke
+MEMORY_RECALL_LARGE_REPO_ROOT=/Users/rebel/Desktop/polychads-clean npm run source-graph:large-smoke
+node --test tests/source-graph-discovery.test.mjs tests/source-graph-snapshot-service.test.mjs tests/source-graph-preview.test.mjs tests/recall-map.test.mjs tests/control-api.test.mjs tests/control-api-boundary.test.mjs
+npm run protocol:validate
+```
+
+Expected: both smoke modes return non-empty valid results, the cached path is at least 80% faster, and all focused tests pass.
+
+- [x] **Step 6: Commit performance proof**
+
+```bash
+git add scripts/source-graph-large-repo-smoke.mjs package.json docs/usage/recall-map.md tests/source-graph-preview.test.mjs
+git commit -m "test: prove large repository graph performance"
+```
+
+### Task 8: Run the graph-foundation release gate
+
+**Files:**
+- Verify only; fix failures in the owning task before continuing.
+
+**Interfaces:**
+- Produces a clean, independently testable graph foundation for the UI plan.
+
+- [x] **Step 1: Run all source, map, protocol, and consumer checks**
+
+```bash
+npm run check
+npm run protocol:validate
+node --test tests/ast-code-candidate-source.test.mjs tests/source-graph-discovery.test.mjs tests/source-graph-snapshot-service.test.mjs tests/source-graph-preview.test.mjs tests/recall-map-ranking.test.mjs tests/recall-map.test.mjs tests/control-api.test.mjs tests/control-api-boundary.test.mjs
+npm run source-graph:large-smoke
+npm run consumer:smoke
+```
+
+Expected: every command exits 0.
+
+- [x] **Step 2: Confirm no security or side-effect drift**
+
+Inspect both generated and real-repository smoke JSON. Confirm:
+
+```text
+networkCalls = 0
+modelCalls = 0
+externalWritesEnabled = false
+rawBodyIncluded = false
+graphDatabaseUsed = false
+protocolValid = true
+```
+
+- [x] **Step 3: Record the foundation checkpoint**
+
+```bash
+git status --short
+git log --oneline -7
+```
+
+Expected: clean worktree and one focused commit per task. Do not squash before the UI plan is verified.
diff --git a/docs/superpowers/plans/2026-07-15-memory-recall-orientation-workbench-ui.md b/docs/superpowers/plans/2026-07-15-memory-recall-orientation-workbench-ui.md
new file mode 100644
index 00000000..4ceb6628
--- /dev/null
+++ b/docs/superpowers/plans/2026-07-15-memory-recall-orientation-workbench-ui.md
@@ -0,0 +1,1191 @@
+# Memory Recall Orientation Workbench UI Implementation Plan
+
+> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
+
+**Goal:** Replace the rejected Overview, Map, and memory-graph presentation with a compact, orientation-first workbench that shows repository structure, starting points, change impact, and trusted context without AI-style slogans or generic dashboard design.
+
+**Architecture:** Keep the existing static ESM shell and five-destination navigation. Split pure view models and route renderers out of `apps/web/app.js`, consume the bounded orientation/focus projections from the graph-foundation plan, run detailed graph layout in a worker, and provide semantic outlines as the canonical accessible representation.
+
+**Tech Stack:** Browser-native ESM, semantic HTML, CSS custom properties, Canvas 2D for data visualization, Web Workers, Node test runner, Playwright consumer browser smoke.
+
+## Prerequisite
+
+Complete and verify `docs/superpowers/plans/2026-07-15-memory-recall-large-repository-graph-foundation.md` first. This UI plan consumes `report.architecture.groups`, `report.architecture.groupRelations`, `preview.orientation`, `preview.focus`, and `preview.snapshot` exactly as defined there.
+
+## Global Constraints
+
+- Follow `DESIGN.md` and the approved `2026-07-15-memory-recall-orientation-workbench-design.md` specification.
+- Preserve the existing five destinations, stable deep links, local-only boundary, setup flow, Memory review queue, Handoffs flow, and Settings behavior.
+- Add no frontend framework, graph library, icon library, runtime dependency, model call, network service, or new product route.
+- Use the existing native system sans, native monospace, warm off-white, graphite, restrained cobalt, 6 px controls, and 8 px bounded panels.
+- Use lists, rules, aligned rows, and disclosures before cards; do not add gradients, glow, glass, heavy shadows, decorative art, ambient motion, or a metric-card wall.
+- Minimal means fewer elements, not empty space: related gaps are 8 to 16 px and primary-region gaps use only 24 or 32 px tokens.
+- No hero, slogan, promotional subtitle, fake chat, typing indicator, sparkle mark, robot imagery, or intelligence theater.
+- Visible copy names an object, state, reason, or action. AI/model/provider terms appear only for a real configured provider, operation, setting, or technical boundary.
+- Overview shows at most 12 deterministic groups, at most 20 inter-group relations, and exactly three `Start here` items when three are available.
+- Detailed graphs render only a focused bounded payload and perform no unbounded quadratic layout on the main thread.
+- Every visual graph has a keyboard-reachable outline with identical selection and inspector state.
+- Preserve query and scope through submit, success, partial result, failure, reload, back, and forward.
+- Empty governed memory renders no canvas and no zero-value metric strip.
+- Meet WCAG 2.2 AA, visible focus, 44 px primary touch targets, reduced motion, light/dark modes, and no horizontal overflow at 320, 375, 414, 768, and 1440 px.
+
+---
+
+## File Map
+
+### Create
+
+- `apps/web/api.js`: loopback JSON requests, CSRF handling, and bounded API errors.
+- `apps/web/ui-primitives.js`: escaping, state panels, error recovery, date/fingerprint formatting, and status text.
+- `apps/web/orientation-model.js`: pure Overview state, group layering, starting-point ranking, impact, and trust models.
+- `apps/web/orientation-view.js`: Overview markup and selected-group interactions.
+- `apps/web/source-map-view.js`: Map URL state, request payload, renderer, outline, inspector, and viewport controls.
+- `apps/web/memory-graph-view.js`: governed-memory graph model, empty/populated rendering, outline, and inspector.
+- `apps/web/graph-viewport.js`: shared canvas transform, hit testing, selection, outline parity, and worker lifecycle.
+- `apps/web/graph-layout-worker.js`: deterministic bounded detailed-graph layout off the main thread.
+- `tests/web-orientation.test.mjs`: Overview model and markup tests.
+- `tests/web-source-map.test.mjs`: Map URL, focused graph, outline, and error-state tests.
+- `tests/web-memory-graph.test.mjs`: empty/populated governed-memory graph tests.
+
+### Modify
+
+- `apps/web/app.js`: retain boot, routing, shared shell state, and delegation only for touched routes.
+- `apps/web/index.html`: turn the existing repository search into the single deterministic command bar.
+- `apps/web/styles.css`: add compact orientation, map, graph, outline, and responsive styles; remove obsolete touched-route styles.
+- `apps/web/tokens.css`: reuse tokens; change only if a missing semantic alias is proven.
+- `tests/web-shell.test.mjs`: update module imports and retain shell regression coverage.
+- `scripts/consumer-browser-smoke.mjs`: exercise the new first-ten-seconds contract, Map, and memory graph across states and widths.
+- `DESIGN.md`: change only if implementation finds an unrecorded canonical rule; do not weaken existing constraints.
+
+---
+
+### Task 1: Extract API and shared UI primitives without visual change
+
+**Files:**
+- Create: `apps/web/api.js`
+- Create: `apps/web/ui-primitives.js`
+- Modify: `apps/web/app.js`
+- Modify: `tests/web-shell.test.mjs`
+
+**Interfaces:**
+- Produces: `requestJson(path, options): Promise` and `ApiRequestError` from `api.js`.
+- Produces: `escapeHtml`, `formatDate`, `shortFingerprint`, `buildApiErrorUiModel`, `renderApiErrorPanel`, and `statePanel` from `ui-primitives.js`.
+- `app.js` imports and delegates to these functions; route behavior remains unchanged.
+
+- [x] **Step 0: Capture the rejected UI as baseline evidence**
+
+Before changing any visual markup or CSS, run the existing browser smoke and preserve the current Overview, Map, and Memory screenshots outside the files later runs overwrite:
+
+```bash
+mkdir -p .scratch/ui-redesign/before
+npm run consumer:browser-smoke
+cp .scratch/ui-redesign/overview-desktop-light-1440.png .scratch/ui-redesign/before/overview-desktop-light-1440.png
+cp .scratch/ui-redesign/map-desktop-1440.png .scratch/ui-redesign/before/map-desktop-1440.png
+cp .scratch/ui-redesign/memory-desktop-1440.png .scratch/ui-redesign/before/memory-desktop-1440.png
+```
+
+Expected: the three baseline files exist and remain uncommitted for the final visual comparison.
+
+- [x] **Step 1: Write failing module-boundary tests**
+
+Add to `tests/web-shell.test.mjs`:
+
+```js
+test('web API and UI primitives are focused modules', async () => {
+ const apiSource = await readFile(new URL('../apps/web/api.js', import.meta.url), 'utf8');
+ const primitiveSource = await readFile(new URL('../apps/web/ui-primitives.js', import.meta.url), 'utf8');
+ const appSource = await readFile(new URL('../apps/web/app.js', import.meta.url), 'utf8');
+ assert.match(apiSource, /export async function requestJson/);
+ assert.match(apiSource, /export class ApiRequestError/);
+ assert.match(primitiveSource, /export function escapeHtml/);
+ assert.match(primitiveSource, /export function statePanel/);
+ assert.doesNotMatch(appSource, /async function api\(/);
+ assert.doesNotMatch(appSource, /function statePanel\(/);
+});
+```
+
+- [x] **Step 2: Run the boundary test and verify missing modules**
+
+Run:
+
+```bash
+node --test --test-name-pattern="focused modules" tests/web-shell.test.mjs
+```
+
+Expected: FAIL because `api.js` and `ui-primitives.js` do not exist.
+
+- [x] **Step 3: Extract the API client**
+
+Move the existing CSRF lookup, request headers, JSON parsing, correlation ID, issue list, and error mapping into `apps/web/api.js`. Keep the public shape small:
+
+```js
+export class ApiRequestError extends Error {
+ constructor(message, { status = null, code = '', correlationId = '', issues = [] } = {}) {
+ super(message);
+ this.name = 'ApiRequestError';
+ this.status = status;
+ this.code = code;
+ this.correlationId = correlationId;
+ this.issues = issues;
+ }
+}
+
+export async function requestJson(path, { method = 'GET', body, signal } = {}) {
+ const response = await fetch(path, {
+ method,
+ credentials: 'same-origin',
+ signal,
+ headers: requestHeaders(method),
+ body
+ });
+ const payload = await readPayload(response);
+ if (!response.ok) throw apiError(response, payload);
+ return payload;
+}
+
+function csrfToken() {
+ return /(?:^|;\s*)oaf_csrf=([^;]+)/u.exec(globalThis.document?.cookie ?? '')?.[1] ?? '';
+}
+
+function requestHeaders(method) {
+ const headers = new Headers();
+ if (!['GET', 'HEAD'].includes(method)) {
+ headers.set('content-type', 'application/json');
+ const token = csrfToken();
+ if (token) headers.set('x-csrf-token', token);
+ }
+ return headers;
+}
+
+async function readPayload(response) {
+ return response.clone().json().catch(() => null);
+}
+
+function apiError(response, payload) {
+ const code = payload?.error?.code ?? '';
+ const message = code === 'bootstrap_required'
+ ? 'Local owner setup is required.'
+ : code === 'invalid_credentials'
+ ? 'Username or password is incorrect.'
+ : response.status === 401
+ ? 'Local authentication required.'
+ : payload?.error?.message ?? `Request failed with ${response.status}`;
+ return new ApiRequestError(message, {
+ status: response.status,
+ code,
+ correlationId: payload?.error?.correlationId ?? response.headers.get('x-correlation-id') ?? '',
+ issues: Array.isArray(payload?.error?.issues) ? payload.error.issues : []
+ });
+}
+```
+
+Do not read storage, change auth semantics, retry automatically, or log response bodies.
+
+- [x] **Step 4: Extract safe shared render helpers**
+
+Move only pure formatting, escaping, state-panel, and API-error rendering into `ui-primitives.js`. Use dependency injection for action markup instead of importing route state. The escaping implementation remains:
+
+```js
+export function escapeHtml(value) {
+ return String(value ?? '').replace(/[&<>'"]/gu, (character) => ({
+ '&': '&', '<': '<', '>': '>', "'": ''', '"': '"'
+ })[character]);
+}
+```
+
+Export legacy aliases from `app.js` temporarily if existing tests or untouched routes import them. Do not duplicate implementation.
+
+- [x] **Step 5: Run shell regression tests**
+
+Run:
+
+```bash
+node --test tests/web-shell.test.mjs tests/control-api-boundary.test.mjs
+```
+
+Expected: all existing shell and boundary tests pass with no visual behavior change.
+
+- [x] **Step 6: Commit the extraction**
+
+```bash
+git add apps/web/api.js apps/web/ui-primitives.js apps/web/app.js tests/web-shell.test.mjs
+git commit -m "refactor: extract web API and UI primitives"
+```
+
+### Task 2: Build the deterministic orientation model
+
+**Files:**
+- Create: `apps/web/orientation-model.js`
+- Create: `tests/web-orientation.test.mjs`
+- Modify: `apps/web/app.js`
+- Modify: `apps/web/shell-model.js`
+
+**Interfaces:**
+- Produces: `buildOrientationModel(input): OrientationModel`.
+- Produces: `layerOrientationGroups(groups, relations): LayeredGroup[]`.
+- Produces: `selectOrientationGroup(model, groupId): OrientationModel`.
+- Consumes graph-foundation fields `architecture.groups` and `architecture.groupRelations`.
+- Input accepts `loading = false`, `error = null`, `gitChanges = null`, `handoff = null`, and an injected `now` timestamp for deterministic age labels.
+
+- [x] **Step 1: Write failing first-ten-seconds model tests**
+
+Create `tests/web-orientation.test.mjs`:
+
+```js
+import test from 'node:test';
+import assert from 'node:assert/strict';
+import { buildOrientationModel } from '../apps/web/orientation-model.js';
+
+test('orientation model is deterministic and bounded', () => {
+ const report = orientationFixture({ groupCount: 16, entryPointCount: 8 });
+ const first = buildOrientationModel({ report, gitChanges: changedFixture(), handoff: handoffFixture() });
+ const second = buildOrientationModel({ report: structuredClone(report), gitChanges: changedFixture(), handoff: handoffFixture() });
+ assert.deepEqual(first.groups, second.groups);
+ assert.equal(first.groups.length, 12);
+ assert.equal(first.relations.length <= 20, true);
+ assert.equal(first.startHere.length, 3);
+ assert.deepEqual(first.startHere.map(({ reason }) => reason), [
+ 'application route',
+ 'package entry point',
+ 'changed central module'
+ ]);
+ assert.equal(first.repository.name, 'large-repository');
+ assert.equal(first.repository.branch, 'main');
+ assert.equal(first.coverage.status, 'partial');
+ assert.equal(first.coverage.builtAt, '2026-07-15T09:59:00.000Z');
+ assert.equal(first.impact.unrepresentedChangedCount, 1);
+ assert.equal(first.trust.memory.status, 'pending');
+ assert.equal(first.trust.handoff.status, 'verified');
+});
+
+test('small repositories keep real groups and do not invent filler', () => {
+ const model = buildOrientationModel({ report: orientationFixture({ groupCount: 3, entryPointCount: 2 }) });
+ assert.equal(model.groups.length, 3);
+ assert.equal(model.startHere.length, 2);
+});
+
+test('orientation model distinguishes loading, clean, stale, empty, and failure truth', () => {
+ assert.equal(buildOrientationModel({ loading: true }).state, 'loading');
+ assert.equal(buildOrientationModel({ report: null, loading: false }).state, 'empty');
+ assert.equal(buildOrientationModel({ error: { message: 'Graph validation failed.' } }).state, 'failure');
+
+ const cleanReport = orientationFixture({ groupCount: 3, entryPointCount: 3 });
+ cleanReport.repository.dirtyCount = 0;
+ const clean = buildOrientationModel({ report: cleanReport, gitChanges: { status: 'available', changedLocators: [], totalCount: 0, omittedCount: 0, truncated: false } });
+ assert.equal(clean.impact.status, 'clean');
+ assert.equal(clean.impact.label, 'No local changes detected');
+
+ const staleReport = orientationFixture({ groupCount: 3, entryPointCount: 3 });
+ staleReport.support.sourceGraph.snapshot.status = 'stale';
+ staleReport.support.sourceGraph.snapshot.reason = 'source_graph_refresh_failed';
+ const stale = buildOrientationModel({ report: staleReport, now: '2026-07-15T10:00:00.000Z' });
+ assert.equal(stale.state, 'stale');
+ assert.equal(stale.coverage.lastValidSnapshotShown, true);
+});
+
+const GROUP_PREFIXES = [
+ 'apps/web', 'apps/cli', 'packages/source-graph', 'packages/recall-map',
+ 'packages/protocol', 'services/control-api', 'providers/native/memory-sqlite',
+ 'providers/native/context-candidate-ast-code', 'scripts', 'tests', 'docs',
+ 'examples', 'evals', 'rfcs', 'deploy', 'planning'
+];
+
+function orientationFixture({ groupCount = 8, entryPointCount = 5 } = {}) {
+ const groups = GROUP_PREFIXES.slice(0, groupCount).map((prefix, index) => ({
+ id: `group_${index}`,
+ label: prefix.split('/').at(-1),
+ prefix,
+ fileCount: 10 + index,
+ symbolCount: 30 + index,
+ changedFileCount: index === 0 ? 1 : 0,
+ coverageStatus: index === groupCount - 1 ? 'partial' : 'complete',
+ entryPoints: []
+ }));
+ const reasons = ['application_route', 'package_entry_point', 'changed_central_module', 'executable_command', 'inbound_dependency_hub'];
+ const labels = ['route', 'createServer', 'renderOverview', 'recall', 'buildSourceGraphPreview'];
+ const entryPoints = Array.from({ length: entryPointCount }, (_, index) => ({
+ nodeId: `sgnode_${String(index).padStart(32, '0')}`,
+ label: labels[index % labels.length],
+ locator: `workspace://${groups[index % groups.length].prefix}/entry-${index}.js#L1-L4`,
+ symbolKind: 'function',
+ reasonCodes: [reasons[index % reasons.length]],
+ score: 100 - index
+ }));
+ for (const item of entryPoints) {
+ const group = groups.find(({ prefix }) => item.locator.startsWith(`workspace://${prefix}/`));
+ if (group && group.entryPoints.length < 2) group.entryPoints.push(item);
+ }
+ return {
+ schemaVersion: '1.0.0',
+ workspaceId: 'ws_local',
+ generatedAt: '2026-07-15T10:00:00.000Z',
+ repository: { name: 'large-repository', branch: 'main', commitSha: 'a'.repeat(40), dirtyCount: 2, gitStatusAvailable: true, reason: null },
+ support: {
+ sourceGraph: {
+ status: 'implemented',
+ coverage: { status: 'partial', analyzedFileCount: 572, maxFiles: 1000, diagnosticCount: 2, reasonCodes: ['unsupported_extensions_skipped'] },
+ snapshot: { status: 'fresh', reuse: 'cache', reason: null, builtAt: '2026-07-15T09:59:00.000Z', buildDurationMs: 15 }
+ }
+ },
+ architecture: {
+ groups,
+ groupRelations: groups.slice(1).map((group, index) => ({ fromGroupId: groups[index].id, toGroupId: group.id, kind: 'imports', count: 2 })),
+ entryPoints,
+ hotspots: [],
+ impact: { changedLocators: ['workspace://apps/web/app.js'], representedChangedLocators: ['workspace://apps/web/app.js'], affectedSymbols: [], depth: 2 }
+ },
+ memory: { status: 'available', activeFacts: [], pendingProposals: [{ id: 'mpq_1' }], staleFactCount: 0, conflictingFactCount: 0 },
+ readiness: { handoff: { status: 'available', command: 'recall handoff' }, nextCommands: [] },
+ safeguards: { readOnly: true, modelCalls: 0, networkCalls: 0, externalWritesEnabled: false }
+ };
+}
+
+function changedFixture() {
+ return { status: 'available', changedLocators: ['apps/web/app.js'], totalCount: 2, omittedCount: 1, truncated: false };
+}
+
+function handoffFixture() {
+ return { status: 'verified', createdAt: '2026-07-15T09:58:00.000Z' };
+}
+```
+
+Define fixture helpers in the same test file with complete repository, support, architecture, memory, safeguards, and readiness fields.
+
+- [x] **Step 2: Run the model test and verify the missing module**
+
+Run:
+
+```bash
+node --test tests/web-orientation.test.mjs
+```
+
+Expected: FAIL with module-not-found for `orientation-model.js`.
+
+- [x] **Step 3: Implement bounded group and start-point selection**
+
+In `orientation-model.js`, normalize every external string and array. Cap groups at 12 and relations at 20. Rank start points with explicit reason priority:
+
+```js
+const START_REASON_PRIORITY = new Map([
+ ['application_route', 0],
+ ['package_entry_point', 1],
+ ['changed_central_module', 2],
+ ['executable_command', 3],
+ ['inbound_dependency_hub', 4]
+]);
+const START_REASON_LABEL = new Map([
+ ['application_route', 'application route'],
+ ['executable_command', 'executable command'],
+ ['package_entry_point', 'package entry point'],
+ ['changed_central_module', 'changed central module'],
+ ['inbound_dependency_hub', 'inbound dependency hub']
+]);
+
+function rankStartHere(items) {
+ return [...items]
+ .filter(({ locator = '' }) => !/(?:^|\/)(?:test|tests|fixtures|generated|vendor)(?:\/|$)/iu.test(locator))
+ .sort((left, right) => (
+ (START_REASON_PRIORITY.get(left.reasonCode) ?? 99) - (START_REASON_PRIORITY.get(right.reasonCode) ?? 99)
+ || right.score - left.score
+ || left.locator.localeCompare(right.locator)
+ ))
+ .slice(0, 3)
+ .map((item) => ({ ...item, reason: START_REASON_LABEL.get(item.reasonCode) ?? 'ranked source entry point' }));
+}
+```
+
+Collapse strongly connected group components before assigning left-to-right topological layers. Sort groups inside a layer by repository-relative prefix. Do not use randomness, measured DOM size, or force layout.
+
+- [x] **Step 4: Build truthful impact and trust models**
+
+Expose represented and unrepresented changed counts separately. Map graph snapshot states to `complete`, `partial`, `stale`, `failed`, or `not scanned`. Keep memory counts as active, pending, stale, and conflicting. Include token reduction only when the report contains a measured baseline and `providerBillingClaimed === false`; otherwise set it to `null`.
+
+Return a frozen model with:
+
+```js
+{
+ state,
+ repository,
+ coverage,
+ groups,
+ relations,
+ selectedGroupId,
+ startHere,
+ impact,
+ trust: { memory, handoff, source, deliveryReduction },
+ primaryAction
+}
+```
+
+- [x] **Step 5: Delegate Overview modeling from `app.js`**
+
+Replace `buildRecallMapHomeModel()` internals with an import/delegation to `buildOrientationModel()`. Keep a named re-export from `app.js` for compatibility until `tests/web-shell.test.mjs` imports the new module directly. Update `selectOverviewPrimaryAction()` only to consume the new model fields; keep its current route IDs and actions.
+
+- [x] **Step 6: Verify model and shell behavior**
+
+Run:
+
+```bash
+node --test tests/web-orientation.test.mjs tests/web-shell.test.mjs
+```
+
+Expected: deterministic orientation tests and existing shell state tests pass.
+
+- [x] **Step 7: Commit orientation modeling**
+
+```bash
+git add apps/web/orientation-model.js apps/web/app.js apps/web/shell-model.js tests/web-orientation.test.mjs tests/web-shell.test.mjs
+git commit -m "feat: model repository orientation deterministically"
+```
+
+### Task 3: Render the compact Overview workbench
+
+**Files:**
+- Create: `apps/web/orientation-view.js`
+- Modify: `apps/web/index.html`
+- Modify: `apps/web/app.js`
+- Modify: `apps/web/styles.css`
+- Modify: `tests/web-orientation.test.mjs`
+- Modify: `tests/web-shell.test.mjs`
+
+**Interfaces:**
+- Produces: `renderOrientation(model): string`.
+- Produces: `bindOrientation(root, { onSelectGroup, onRefresh }): () => void`.
+- Consumes: `OrientationModel` from Task 2 and primitives from Task 1.
+
+- [x] **Step 1: Write failing minimalist Overview markup tests**
+
+Add to `tests/web-orientation.test.mjs`:
+
+```js
+import { readFile } from 'node:fs/promises';
+import { renderOrientation } from '../apps/web/orientation-view.js';
+
+test('Overview renders the first-ten-seconds contract without dashboard slop', () => {
+ const html = renderOrientation(buildOrientationModel({ report: orientationFixture({ groupCount: 8, entryPointCount: 5 }) }));
+ for (const label of ['Architecture', 'Start here', 'Current impact', 'Trusted context']) assert.match(html, new RegExp(label));
+ assert.equal((html.match(/class="orientation-group/g) ?? []).length, 8);
+ assert.equal((html.match(/class="start-item/g) ?? []).length, 3);
+ assert.match(html, /aria-label="Repository architecture outline"/);
+ assert.doesNotMatch(html, /class="metric-strip"/);
+ assert.doesNotMatch(html, /hero|tagline|AI-powered|intelligent|smart|magical|seamless|unlock|supercharge|next-generation/iu);
+});
+
+test('repository command bar exposes four deterministic intents', async () => {
+ const html = await readFile(new URL('../apps/web/index.html', import.meta.url), 'utf8');
+ for (const intent of ['explain', 'trace', 'impact', 'handoff']) {
+ assert.match(html, new RegExp(`value="${intent}"`));
+ }
+ assert.doesNotMatch(html, /chat|ask AI|thinking/iu);
+});
+
+test('repository truth bar names local and external-write state', async () => {
+ const html = await readFile(new URL('../apps/web/index.html', import.meta.url), 'utf8');
+ assert.match(html, /id="repository-boundary"/);
+ assert.match(html, /Local only/);
+ assert.match(html, /External writes off/);
+});
+```
+
+- [x] **Step 2: Run the test and verify the missing renderer**
+
+Run:
+
+```bash
+node --test --test-name-pattern="first-ten-seconds" tests/web-orientation.test.mjs
+```
+
+Expected: FAIL because `renderOrientation` does not exist.
+
+- [x] **Step 3: Implement semantic orientation markup**
+
+Render this macrostructure, with no wrapper cards around the three secondary sections:
+
+```html
+
+
+ Overview
+ Partial · scanned 2 minutes ago
+
+
+
+```
+
+Group nodes are `` elements positioned by CSS grid columns from `layer`. Visual relationship lines are generated from actual relation data and marked `aria-hidden="true"`; the always-present outline contains links/buttons with the same `data-group-id`. The inspector contains three sections separated by `border-top` rules.
+
+Keep repository name, branch, scan age, and textual coverage in the existing truth bar. Add one compact `Local only · External writes off `. In `renderRepositoryBar()`, derive `External writes on/off` from `recallMap.safeguards.externalWritesEnabled`, retain the `Local only` label, and set a warning state when writes are on. Do not represent either state with color alone.
+
+- [x] **Step 4: Add compact workbench styling**
+
+Use the existing tokens only. Required declarations include:
+
+```css
+.orientation-workbench{max-width:1440px;margin:0 auto}
+.orientation-heading{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-sm);padding-bottom:var(--space-sm);border-bottom:1px solid var(--color-rule)}
+.orientation-heading h1{font-size:24px;letter-spacing:-.02em}
+.orientation-layout{display:grid;grid-template-columns:minmax(0,7fr) minmax(280px,3fr);gap:var(--space-lg);padding-top:var(--space-md)}
+.orientation-group{min-height:44px;border:1px solid var(--color-rule);border-radius:var(--radius-control);background:var(--color-panel);box-shadow:none}
+.orientation-inspector section{padding:var(--space-sm) 0;border-top:1px solid var(--color-rule)}
+.orientation-inspector section:first-child{padding-top:0;border-top:0}
+```
+
+Do not use `.surface-primary`, fixed/minimum content heights, gradients, decorative shadows, or `metric-strip`. At 1440 × 900, the Overview title, architecture groups, three start items, impact state, and trust state must fit without scrolling.
+
+- [x] **Step 5: Bind selection and delegate render from `app.js`**
+
+`renderHome()` calls `renderOrientation()`. After each route render, call `bindOrientation()` and return/replace its cleanup callback before rebinding. Selecting a group updates the model and inspector without re-fetching; `Open in Map` navigates to `/map?group=`.
+
+- [x] **Step 6: Upgrade the existing global search into the single command bar**
+
+Add a compact, labeled intent select to the existing `#global-search-form`; do not add a second input:
+
+```html
+
+ Explain module
+ Trace symbol
+ Inspect changed-file impact
+ Prepare handoff
+
+```
+
+Route deterministically in `app.js`:
+
+```js
+const commandTargets = {
+ explain: (value) => `/map?query=${encodeURIComponent(value)}`,
+ trace: (value) => `/map?query=${encodeURIComponent(value)}&start=${encodeURIComponent(value)}`,
+ impact: (value) => `/map?query=${encodeURIComponent(value)}&changed=${encodeURIComponent(value)}`,
+ handoff: (value) => `/handoffs?objective=${encodeURIComponent(value)}`
+};
+```
+
+On Handoffs, use the bounded `objective` URL value only to prefill the existing form. Do not submit, write, or call a model automatically. On empty input, keep focus in the field and announce `Enter a file, symbol, concept, or path.`
+
+- [x] **Step 7: Verify Overview markup and responsive shell**
+
+Run:
+
+```bash
+node --test tests/web-orientation.test.mjs tests/web-shell.test.mjs
+```
+
+Expected: all Overview and shell tests pass with no retired markup.
+
+- [x] **Step 8: Commit the Overview workbench**
+
+```bash
+git add apps/web/orientation-view.js apps/web/index.html apps/web/app.js apps/web/styles.css tests/web-orientation.test.mjs tests/web-shell.test.mjs
+git commit -m "feat: render the orientation-first Overview"
+```
+
+### Task 4: Make Map URL state and failure behavior deterministic
+
+**Files:**
+- Create: `apps/web/source-map-view.js`
+- Create: `tests/web-source-map.test.mjs`
+- Modify: `apps/web/app.js`
+- Modify: `apps/web/styles.css`
+
+**Interfaces:**
+- Produces: `parseMapUrl(input): MapQueryState`.
+- Produces: `serializeMapUrl(state): string`.
+- Produces: `buildMapRequest(state): object`.
+- Produces: `renderSourceMap({ state, report, error }): string`.
+- Produces: `bindSourceMap(root, handlers): () => void`.
+
+- [x] **Step 1: Write failing URL round-trip and failure tests**
+
+Create `tests/web-source-map.test.mjs`:
+
+```js
+import test from 'node:test';
+import assert from 'node:assert/strict';
+import { readFile } from 'node:fs/promises';
+import { parseMapUrl, renderSourceMap, serializeMapUrl } from '../apps/web/source-map-view.js';
+
+test('Map query state round-trips through the URL', () => {
+ const state = parseMapUrl('http://127.0.0.1:4318/map?query=copytrading&group=apps%2Fterminal&start=execute&changed=src%2Ftrade.ts&depth=3&limit=24');
+ assert.deepEqual(state, {
+ query: 'copytrading', group: 'apps/terminal', startName: 'execute',
+ changedLocator: 'src/trade.ts', depth: 3, limit: 24, advanced: true
+ });
+ assert.equal(serializeMapUrl(state), '/map?query=copytrading&group=apps%2Fterminal&start=execute&changed=src%2Ftrade.ts&depth=3&limit=24');
+});
+
+test('Map failure keeps submitted values and diagnostic truth', () => {
+ const state = parseMapUrl('/map?query=copytrading&group=apps%2Fterminal');
+ const html = renderSourceMap({ state, error: { message: 'Graph validation failed.', correlationId: 'req_map_1' } });
+ assert.match(html, /value="copytrading"/);
+ assert.match(html, /value="apps\/terminal"/);
+ assert.match(html, /Graph validation failed/);
+ assert.doesNotMatch(html, /preview ready|No map results/iu);
+});
+
+test('Map partial state keeps useful results and names omitted coverage', () => {
+ const state = parseMapUrl('/map?query=router');
+ const report = mapPreviewFixture({
+ coverage: { status: 'partial', representedFileCount: 572, omittedFileCount: 428, omittedEdgeCount: 39012, reasonCodes: ['file_budget_reached', 'edge_budget_reached'] }
+ });
+ const html = renderSourceMap({ state, report });
+ assert.match(html, /572 represented files/);
+ assert.match(html, /428 omitted files/);
+ assert.match(html, /39,012 omitted relationships/);
+ assert.match(html, /File limit reached|Relationship limit reached/);
+ assert.doesNotMatch(html, /preview ready/iu);
+});
+
+function mapPreviewFixture({ coverage } = {}) {
+ const resolvedCoverage = coverage ?? {
+ status: 'complete', representedFileCount: 1, omittedFileCount: 0,
+ omittedEdgeCount: 0, reasonCodes: []
+ };
+ const node = {
+ id: `sgnode_${'1'.repeat(32)}`,
+ kind: 'symbol',
+ label: 'router',
+ locator: 'workspace://apps/web/router.js#L1-L8'
+ };
+ return {
+ snapshot: {
+ status: 'fresh', reuse: 'cache', reason: null, generation: 1,
+ validationMode: 'watch', builtAt: '2026-07-15T10:00:00.000Z', buildDurationMs: 12
+ },
+ coverage: resolvedCoverage,
+ orientation: {
+ groups: [{ id: 'group_apps_web', label: 'web', prefix: 'apps/web', fileCount: 1, symbolCount: 1, changedFileCount: 0, coverageStatus: resolvedCoverage.status, entryPoints: [node] }],
+ groupRelations: [],
+ omittedGroupCount: 0,
+ omittedRelationCount: 0
+ },
+ focus: { nodes: [node], edges: [], omittedNodeCount: 0, omittedEdgeCount: 0 },
+ graph: { summary: { fileCount: 1, nodeCount: 1, edgeCount: 0, coverage: resolvedCoverage }, sampleNodes: [node], sampleEdges: [], diagnostics: [] },
+ diagnostics: [],
+ safeguards: { persisted: false, modelCalls: 0, networkCalls: 0, externalWritesEnabled: false }
+ };
+}
+```
+
+- [x] **Step 2: Run the tests and verify the missing module**
+
+Run:
+
+```bash
+node --test tests/web-source-map.test.mjs
+```
+
+Expected: FAIL with module-not-found for `source-map-view.js`.
+
+- [x] **Step 3: Implement bounded URL state and request mapping**
+
+Normalize strings to existing API maxima. `buildMapRequest()` maps `group` to `locatorPrefix`, a single `changedLocator` to `changedLocators`, and returns `sampleLimit: 50`. Default state is an empty query, depth 2, limit 20; do not inject `where should I start` into the field. `advanced` is true only when start, changed, depth other than 2, or limit other than 20 is present.
+
+- [x] **Step 4: Render query, disclosure, truth state, and outline**
+
+`Query` remains visible. Put group, trace, changed locator, depth, and limit inside ``. Render snapshot/coverage state as text. Render grouped orientation before a focus exists; render `preview.focus` when a query/group/trace/impact exists. Always render a semantic outline and inspector. A failure uses `renderApiErrorPanel()` and never renders an empty-success message.
+
+- [x] **Step 5: Delegate Map submit and history handling from `app.js`**
+
+On submit:
+
+1. Serialize form state into `/map?...`.
+2. Call `history.pushState()` only when the URL changes.
+3. Fetch with the exact state-derived request.
+4. Keep the submitted state object through error or partial response.
+5. On `popstate`, parse the URL and refetch.
+
+Global search must navigate to `/map?query=` and use the same path. Remove the old default query substitution. The visible `Refresh` action repeats the current request with `{ refresh: true }`; ordinary submit, reload, back, and forward use the cache-aware default.
+
+- [x] **Step 6: Verify URL, shell, and API behavior**
+
+Run:
+
+```bash
+node --test tests/web-source-map.test.mjs tests/web-shell.test.mjs tests/control-api.test.mjs
+```
+
+Expected: Map state tests, existing shell tests, and Control API tests pass.
+
+- [x] **Step 7: Commit deterministic Map state**
+
+```bash
+git add apps/web/source-map-view.js apps/web/app.js apps/web/styles.css tests/web-source-map.test.mjs tests/web-shell.test.mjs
+git commit -m "feat: preserve Map query and failure state"
+```
+
+### Task 5: Move detailed graph layout off the main thread
+
+**Files:**
+- Create: `apps/web/graph-viewport.js`
+- Create: `apps/web/graph-layout-worker.js`
+- Modify: `apps/web/source-map-view.js`
+- Modify: `apps/web/app.js`
+- Modify: `apps/web/styles.css`
+- Modify: `tests/web-source-map.test.mjs`
+
+**Interfaces:**
+- Worker consumes `{ requestId, nodes, edges, width, height }`.
+- Worker produces `{ requestId, positions, bounds }`.
+- `graph-viewport.js` exports `createGraphViewport(canvas, outline, inspector, options)` with `fit`, `reset`, `focus`, `destroy` methods.
+
+- [x] **Step 1: Write failing worker and outline-parity tests**
+
+Add:
+
+```js
+test('focused graph uses a worker and keeps outline selection canonical', async () => {
+ const source = await readFile(new URL('../apps/web/source-map-view.js', import.meta.url), 'utf8');
+ const viewport = await readFile(new URL('../apps/web/graph-viewport.js', import.meta.url), 'utf8');
+ const worker = await readFile(new URL('../apps/web/graph-layout-worker.js', import.meta.url), 'utf8');
+ assert.match(viewport, /new Worker\(new URL\('\.\/graph-layout-worker\.js'/);
+ assert.match(source, /data-node-id/);
+ assert.match(source, /Fit selection/);
+ assert.match(source, /Reset view/);
+ assert.doesNotMatch(source, /for \(let tick = 0; tick < 90/);
+ assert.match(worker, /postMessage\(\{ requestId, positions, bounds \}\)/);
+});
+```
+
+- [x] **Step 2: Run the test and verify no worker exists**
+
+Run:
+
+```bash
+node --test --test-name-pattern="focused graph uses a worker" tests/web-source-map.test.mjs
+```
+
+Expected: FAIL with missing worker file or missing Worker construction.
+
+- [x] **Step 3: Implement deterministic bounded layout**
+
+The worker rejects more than 200 nodes or 400 edges. Use a deterministic breadth-first layered layout, avoiding force simulation entirely. Return plain serializable objects. Do not read the DOM or use randomness.
+
+```js
+self.onmessage = ({ data }) => {
+ const { requestId, nodes = [], edges = [], width = 960, height = 560 } = data ?? {};
+ if (nodes.length > 200 || edges.length > 400) {
+ self.postMessage({ requestId, error: 'graph_layout_bounds_exceeded' });
+ return;
+ }
+ const { positions, bounds } = layoutFocusedGraph(nodes, edges, width, height);
+ self.postMessage({ requestId, positions, bounds });
+};
+
+function layoutFocusedGraph(nodes, edges, width, height) {
+ const ordered = [...nodes].sort((left, right) => String(left.id).localeCompare(String(right.id)));
+ const adjacency = new Map(ordered.map(({ id }) => [id, new Set()]));
+ for (const { fromNodeId, toNodeId } of edges) {
+ if (!adjacency.has(fromNodeId) || !adjacency.has(toNodeId)) continue;
+ adjacency.get(fromNodeId).add(toNodeId);
+ adjacency.get(toNodeId).add(fromNodeId);
+ }
+ const roots = [...ordered].sort((left, right) => (
+ adjacency.get(right.id).size - adjacency.get(left.id).size || left.id.localeCompare(right.id)
+ ));
+ const layerById = new Map();
+ let componentOffset = 0;
+ for (const root of roots) {
+ if (layerById.has(root.id)) continue;
+ const queue = [{ id: root.id, layer: componentOffset }];
+ let cursor = 0;
+ let componentMax = componentOffset;
+ while (cursor < queue.length) {
+ const current = queue[cursor++];
+ if (layerById.has(current.id)) continue;
+ layerById.set(current.id, current.layer);
+ componentMax = Math.max(componentMax, current.layer);
+ for (const neighbor of [...adjacency.get(current.id)].sort()) {
+ if (!layerById.has(neighbor)) queue.push({ id: neighbor, layer: current.layer + 1 });
+ }
+ }
+ componentOffset = componentMax + 2;
+ }
+ const layers = new Map();
+ for (const node of ordered) {
+ const layer = layerById.get(node.id) ?? 0;
+ if (!layers.has(layer)) layers.set(layer, []);
+ layers.get(layer).push(node.id);
+ }
+ const layerIds = [...layers.keys()].sort((left, right) => left - right);
+ const xStep = (width - 96) / Math.max(1, layerIds.length - 1);
+ const positions = {};
+ layerIds.forEach((layer, column) => {
+ const ids = layers.get(layer);
+ const yStep = (height - 96) / Math.max(1, ids.length - 1);
+ ids.forEach((id, row) => {
+ positions[id] = { x: 48 + column * xStep, y: ids.length === 1 ? height / 2 : 48 + row * yStep };
+ });
+ });
+ return { positions, bounds: { minX: 48, minY: 48, maxX: width - 48, maxY: height - 48 } };
+}
+```
+
+- [x] **Step 4: Implement viewport controls and shared selection**
+
+Use one `selectedNodeId` inside `createGraphViewport()`. Canvas hit testing and outline clicks both call the injected `onSelect(nodeId)`, update `aria-current`, render the same inspector through the route callback, and call `focus()` only when requested. Add pointer pan, wheel zoom clamped to `0.5..2.5`, fit-to-selection, reset, and resize handling. `destroy()` terminates the worker and removes listeners. `source-map-view.js` owns the outline and inspector markup, then passes their elements and route callbacks to the viewport.
+
+- [x] **Step 5: Style the detailed graph without fake visual assets**
+
+The graph is a real data view drawn from response nodes and edges. Use no decorative SVG, CSS illustration, glow, or gradient. The canvas and outline sit in a flat split region. Status is visible in text, not color alone. Hide the canvas entirely when focus has no nodes.
+
+- [x] **Step 6: Verify worker and Map tests**
+
+Run:
+
+```bash
+node --test tests/web-source-map.test.mjs tests/web-shell.test.mjs
+```
+
+Expected: worker, viewport contract, outline parity, and shell tests pass.
+
+- [x] **Step 7: Commit focused graph interaction**
+
+```bash
+git add apps/web/graph-viewport.js apps/web/graph-layout-worker.js apps/web/source-map-view.js apps/web/app.js apps/web/styles.css tests/web-source-map.test.mjs
+git commit -m "feat: add bounded interactive Map graph"
+```
+
+### Task 6: Replace the governed-memory graph’s empty canvas and main-thread layout
+
+**Files:**
+- Create: `apps/web/memory-graph-view.js`
+- Create: `tests/web-memory-graph.test.mjs`
+- Modify: `apps/web/app.js`
+- Modify: `apps/web/styles.css`
+- Modify: `tests/web-shell.test.mjs`
+
+**Interfaces:**
+- Produces: `buildMemoryGraphViewModel(report, options)`.
+- Produces: `renderMemoryGraphView(model)`.
+- Produces: `bindMemoryGraph(root, handlers): () => void`.
+- Reuses `graph-viewport.js` and `graph-layout-worker.js` from Task 5.
+
+- [x] **Step 1: Write failing empty and populated tests**
+
+Create `tests/web-memory-graph.test.mjs`:
+
+```js
+import test from 'node:test';
+import assert from 'node:assert/strict';
+import { buildMemoryGraphViewModel, renderMemoryGraphView } from '../apps/web/memory-graph-view.js';
+
+test('empty governed memory renders no canvas or zero metrics', () => {
+ const model = buildMemoryGraphViewModel(memoryGraphFixture({ nodes: [], edges: [] }), {});
+ const html = renderMemoryGraphView(model);
+ assert.match(html, /No governed memory yet/);
+ assert.match(html, /Checked workspace/);
+ assert.doesNotMatch(html, / {
+ const model = buildMemoryGraphViewModel(memoryGraphFixture(), { history: true, query: 'provider' });
+ const html = renderMemoryGraphView(model);
+ assert.match(html, /id="memory-graph-canvas"/);
+ assert.match(html, /aria-label="Governed memory outline"/);
+ assert.match(html, /data-node-id="provider:native:memory:sqlite"/);
+ assert.match(html, /Current|Superseded/);
+ assert.doesNotMatch(html, /Community colors/);
+});
+
+function memoryGraphFixture({ nodes, edges } = {}) {
+ const defaultNodes = [
+ { id: 'provider:native:memory:sqlite', name: 'provider:native:memory:sqlite', type: 'provider', current: true, governedDecision: false, degree: 1, size: 14, community: 1 },
+ { id: 'MemoryBackendPort', name: 'MemoryBackendPort', type: 'port', current: true, governedDecision: false, degree: 1, size: 14, community: 1 },
+ { id: 'legacy-view', name: 'legacy-view', type: 'decision', current: false, governedDecision: true, degree: 1, size: 13, community: 2 }
+ ];
+ const defaultEdges = [
+ { id: 'medge_current', from: 'provider:native:memory:sqlite', to: 'MemoryBackendPort', predicate: 'implements_port', factId: 'memfact_current', current: true, status: 'active', validFrom: '2026-07-15T08:00:00.000Z', validUntil: null, supersededBy: null, source: 'workspace://providers/native/memory-sqlite/provider.json' },
+ { id: 'medge_history', from: 'legacy-view', to: 'MemoryBackendPort', predicate: 'replaced_by', factId: 'memfact_history', current: false, status: 'superseded', validFrom: '2026-07-14T08:00:00.000Z', validUntil: '2026-07-15T08:00:00.000Z', supersededBy: 'memfact_current', source: 'workspace://docs/decisions.md' }
+ ];
+ const graphNodes = nodes ?? defaultNodes;
+ const graphEdges = edges ?? defaultEdges;
+ return {
+ schemaVersion: '1.0.0',
+ workspaceId: 'ws_local',
+ generatedAt: '2026-07-15T10:00:00.000Z',
+ provider: 'provider:native:memory:sqlite',
+ mode: 'history',
+ communityMethod: 'label-propagation',
+ summary: {
+ nodeCount: graphNodes.length,
+ edgeCount: graphEdges.length,
+ currentNodeCount: graphNodes.filter(({ current }) => current).length,
+ currentEdgeCount: graphEdges.filter(({ current }) => current).length,
+ historyNodeCount: graphNodes.filter(({ current }) => !current).length,
+ historyEdgeCount: graphEdges.filter(({ current }) => !current).length,
+ communityCount: new Set(graphNodes.map(({ community }) => community)).size
+ },
+ graph: { nodes: graphNodes, edges: graphEdges },
+ focus: null,
+ safeguards: { readOnly: true, modelCalls: 0, networkCalls: 0, externalWritesEnabled: false },
+ reportFingerprint: `sha256:${'e'.repeat(64)}`
+ };
+}
+```
+
+- [x] **Step 2: Run tests and verify current empty-canvas behavior**
+
+Run:
+
+```bash
+node --test tests/web-memory-graph.test.mjs
+```
+
+Expected: FAIL because the current renderer always emits metrics and a fixed canvas.
+
+- [x] **Step 3: Implement empty, populated, and selected states**
+
+Empty state shows workspace/provider check, read-only state, and one factual next action. Populated state uses compact search/history controls, a real bounded canvas, an always-present outline, and one inspector. Replace `Community colors` with `Group related facts`; status labels include text such as `Current`, `Superseded`, and `Historical` so color is never the only channel.
+
+- [x] **Step 4: Remove old memory layout and delegate from `app.js`**
+
+Delete `layoutMemoryGraph()` and `drawMemoryGraphCanvas()` from `app.js`. Delegate rendering and binding to `memory-graph-view.js`. Reuse the worker; do not create a second layout implementation. Keep proposal approval exclusively on the Memory review route.
+
+- [x] **Step 5: Remove fixed empty-canvas styling**
+
+Replace `.memory-graph-canvas-wrap{height:clamp(...)}` with a populated-only aspect/viewport rule and no minimum height in the empty state. Remove the four-column metric strip and legend pills from this route. Preserve dark/light contrast with current tokens.
+
+- [x] **Step 6: Verify memory and shell tests**
+
+Run:
+
+```bash
+node --test tests/web-memory-graph.test.mjs tests/web-shell.test.mjs tests/memory-recall-integrity.test.mjs
+```
+
+Expected: empty/populated graph tests, shell tests, and memory integrity tests pass.
+
+- [x] **Step 7: Commit the governed-memory graph**
+
+```bash
+git add apps/web/memory-graph-view.js apps/web/app.js apps/web/styles.css tests/web-memory-graph.test.mjs tests/web-shell.test.mjs
+git commit -m "feat: simplify the governed memory graph"
+```
+
+### Task 7: Audit all visible web copy and touched-route CSS for AI slop
+
+**Files:**
+- Modify: `apps/web/app.js`
+- Modify: `apps/web/index.html`
+- Modify: `apps/web/orientation-view.js`
+- Modify: `apps/web/source-map-view.js`
+- Modify: `apps/web/memory-graph-view.js`
+- Modify: `apps/web/styles.css`
+- Modify: `tests/web-shell.test.mjs`
+
+**Interfaces:**
+- Produces no new runtime interface; locks the canonical copy and visual constraints in tests.
+
+- [x] **Step 1: Expand the prohibited-copy test**
+
+In `tests/web-shell.test.mjs`, scan all web HTML/JS view files and assert that promotional terms are absent outside a small technical allowlist:
+
+```js
+test('visible web copy is factual and contains no intelligence theater', async () => {
+ const files = [
+ 'apps/web/index.html', 'apps/web/app.js', 'apps/web/orientation-view.js',
+ 'apps/web/source-map-view.js', 'apps/web/memory-graph-view.js'
+ ];
+ const source = (await Promise.all(files.map((file) => readFile(file, 'utf8')))).join('\n');
+ for (const phrase of [
+ 'AI-powered', 'intelligent workspace', 'smart insights', 'magical', 'seamless',
+ 'unlock', 'supercharge', 'revolutionary', 'next-generation', 'nervous system',
+ 'mission control', 'command center', 'content intelligence'
+ ]) assert.doesNotMatch(source, new RegExp(phrase, 'iu'));
+ assert.doesNotMatch(source, /[✨🤖🪄]/u);
+});
+```
+
+- [x] **Step 2: Run the copy test and inventory failures**
+
+Run:
+
+```bash
+node --test --test-name-pattern="visible web copy" tests/web-shell.test.mjs
+rg -n -i '\b(ai|intelligent|intelligence|smart|magical|seamless|unlock|supercharge|revolutionary|next-generation)\b|mission control|command center' apps/web
+```
+
+Expected: any current visible violations, including `Content Intelligence`, are listed. Technical workflow IDs such as `workflow:content-intelligence` may remain internal and must not be renamed in this task.
+
+- [x] **Step 3: Replace visible hype with object, state, reason, or action labels**
+
+Examples:
+
+```text
+Content Intelligence -> Content analysis
+Local agent fabric -> Local process map
+Node conversation -> Connections
+Refresh graph -> Refresh
+Run map -> Search map
+```
+
+Keep technical IDs, compatibility URIs, model/provider settings, and explicit boundary statements where accurate. Do not replace precise language with vague synonyms.
+
+- [x] **Step 4: Audit touched-route CSS mechanically**
+
+Run:
+
+```bash
+rg -n 'gradient|backdrop-filter|filter:blur|box-shadow|border-radius:999|metric-strip|surface-primary|min-height:[3-9][0-9]{2}px' apps/web/styles.css
+```
+
+For Overview, Map, and memory graph selectors, remove decorative shadows, pills, fixed empty height, nested rounded panels, and metric strips. Keep small status chips on untouched routes only when they communicate state.
+
+- [x] **Step 5: Run copy and visual-contract unit tests**
+
+Run:
+
+```bash
+node --test tests/web-orientation.test.mjs tests/web-source-map.test.mjs tests/web-memory-graph.test.mjs tests/web-shell.test.mjs
+```
+
+Expected: all tests pass and the prohibited-copy scan is clean except allowlisted technical IDs/settings.
+
+- [x] **Step 6: Commit the anti-slop sweep**
+
+```bash
+git add apps/web/index.html apps/web/app.js apps/web/orientation-view.js apps/web/source-map-view.js apps/web/memory-graph-view.js apps/web/styles.css tests/web-shell.test.mjs
+git commit -m "refactor: remove AI-style copy and dashboard chrome"
+```
+
+### Task 8: Prove the complete browser experience with realistic states
+
+**Files:**
+- Modify: `scripts/consumer-browser-smoke.mjs`
+- Modify: `tests/web-shell.test.mjs`
+- Verify: `apps/web/*.js`
+- Verify: `apps/web/*.css`
+
+**Interfaces:**
+- Produces inspected screenshots under `.scratch/ui-redesign/` without committing generated files.
+- Produces browser-smoke assertions for Overview, Map, populated memory graph, and empty memory graph.
+
+- [x] **Step 1: Update the browser fixture for six real groups**
+
+Create realistic fixture directories under `apps`, `packages`, `services`, `providers`, `scripts`, and `tests`; include imports between them, three ranked entry points, represented and unrepresented changes, active/pending/stale memory, and a verified handoff. Do not use Lorem Ipsum, fake customers, or invented metrics.
+
+- [x] **Step 2: Assert the first-ten-seconds contract at 1440 × 900**
+
+After login, assert repository name, branch, coverage, 6 to 12 groups, exactly three start items, current impact, and trusted context are visible. Use bounding boxes to prove each required region ends above 900 px:
+
+```js
+for (const selector of ['.orientation-heading', '.architecture-region', '.start-here', '.current-impact', '.trusted-context']) {
+ const box = await page.locator(selector).boundingBox();
+ must(box && box.y + box.height <= 900, `${selector} is outside the first desktop viewport`);
+}
+```
+
+Assert there is no `.metric-strip`, `.fabric-hero`, content-free height, horizontal overflow, or prohibited copy.
+
+Then assert layout and screen-reader status at every required width:
+
+```js
+for (const width of [320, 375, 414, 768, 1440]) {
+ await page.setViewportSize({ width, height: width === 1440 ? 900 : 844 });
+ must(await page.evaluate(() => document.documentElement.scrollWidth <= document.documentElement.clientWidth), `horizontal overflow at ${width}px`);
+}
+must(await page.locator('[role="status"]').count() > 0, 'missing screen-reader status');
+```
+
+- [x] **Step 3: Exercise Overview group selection and Map deep link**
+
+Select a group by keyboard, verify the inspector changes, activate `Open in Map`, and assert the encoded `group` remains in the URL and form. Submit a query, trigger a mocked recoverable failure, reload, go back, and go forward; the exact query/group/scope must survive every transition.
+
+- [x] **Step 4: Exercise detailed graph controls and outline parity**
+
+Assert focus nodes are bounded, then use `Fit selection`, wheel zoom, reset, canvas selection, and outline selection. Verify both selection paths produce the same inspector node ID. Emulate reduced motion and ensure no transition/animation exceeds 1 ms.
+
+- [x] **Step 5: Exercise populated and empty memory graph states**
+
+For populated memory, assert canvas, outline, current/superseded labels, and provenance. For an intercepted empty response, assert `No governed memory yet`, checked workspace/provider state, and absence of `` and `.metric-strip`.
+
+- [x] **Step 6: Capture and inspect desktop/mobile/light/dark screenshots**
+
+Capture:
+
+```text
+overview-desktop-light-1440.png
+overview-desktop-dark-1440.png
+overview-mobile-390.png
+map-focused-desktop-1440.png
+map-focused-mobile-390.png
+memory-graph-populated-1440.png
+memory-graph-empty-1440.png
+```
+
+Inspect each screenshot for clipped text, excessive gaps, wrong font weight, nested cards, broken borders, inconsistent radii, horizontal overflow, poor focus treatment, and AI-style copy. Compare the same viewport/state before and after when assessing visible improvement.
+
+- [x] **Step 7: Run browser smoke**
+
+```bash
+npm run consumer:browser-smoke
+```
+
+Expected: the script exits 0 with no browser console/page errors and all screenshots are present.
+
+- [x] **Step 8: Commit browser proof**
+
+```bash
+git add scripts/consumer-browser-smoke.mjs tests/web-shell.test.mjs
+git commit -m "test: verify orientation workbench in browser"
+```
+
+### Task 9: Run the full product and package release gate
+
+**Files:**
+- Verify only; fix a failure in the task that owns it before rerunning.
+
+**Interfaces:**
+- Produces a clean implementation branch ready for review, not npm publication or merge.
+
+- [x] **Step 1: Run focused UI and graph verification**
+
+```bash
+node --test tests/source-graph-discovery.test.mjs tests/source-graph-snapshot-service.test.mjs tests/source-graph-preview.test.mjs tests/recall-map-ranking.test.mjs tests/recall-map.test.mjs tests/control-api.test.mjs tests/control-api-boundary.test.mjs tests/web-orientation.test.mjs tests/web-source-map.test.mjs tests/web-memory-graph.test.mjs tests/web-shell.test.mjs
+npm run source-graph:large-smoke
+MEMORY_RECALL_LARGE_REPO_ROOT=/Users/rebel/Desktop/polychads-clean npm run source-graph:large-smoke
+npm run consumer:browser-smoke
+```
+
+Expected: every command exits 0.
+
+- [x] **Step 2: Run full repository gates**
+
+```bash
+npm run ci
+npm run consumer:smoke
+npm run release:readiness
+npm pack --dry-run
+```
+
+Expected: CI, consumer smoke, release readiness, and package manifest checks pass.
+
+- [x] **Step 3: Test the packed artifact in a fresh repository**
+
+```bash
+SOURCE_ROOT="/Users/rebel/Downloads/memoryforge-launch"
+PACK_FILE="$(npm pack --silent)"
+TEMP_REPO="$(mktemp -d)"
+trap 'rm -rf "$TEMP_REPO"; rm -f "$SOURCE_ROOT/$PACK_FILE"' EXIT
+cd "$TEMP_REPO"
+npm init -y >/dev/null
+npm install "$SOURCE_ROOT/$PACK_FILE"
+npx recall --version
+npx recall verify --root . --format summary
+```
+
+Expected: the installed package reports the intended version and verifies the fresh consumer repository without relying on the source checkout.
+
+- [x] **Step 4: Confirm implementation truth**
+
+```bash
+git status --short
+git log --oneline -15
+find .scratch/ui-redesign/before -maxdepth 1 -type f -name '*.png' -print
+find .scratch/ui-redesign -maxdepth 1 -type f -name '*.png' -print
+```
+
+Expected: clean worktree; focused commits for foundation, UI, copy, browser, and package proof; baseline/current screenshots and cold/cached timing output are present for handoff. Do not publish, merge, delete branches, or rewrite history.
diff --git a/docs/superpowers/plans/2026-07-16-memory-recall-mcp-code-intelligence.md b/docs/superpowers/plans/2026-07-16-memory-recall-mcp-code-intelligence.md
new file mode 100644
index 00000000..1859dc6c
--- /dev/null
+++ b/docs/superpowers/plans/2026-07-16-memory-recall-mcp-code-intelligence.md
@@ -0,0 +1,46 @@
+# Read-Only MCP Code Intelligence Implementation Plan
+
+> Execute with contract tests first. All outputs must stay bounded, workspace-locator-safe, and free of raw source bodies.
+
+**Goal:** Expand the MCP surface from five to twelve useful tools by exposing and composing the native source graph.
+
+**Architecture:** Add pure intelligence helpers under `packages/source-graph/src/` and thin validation/transport handlers in `apps/cli/oaf.mjs`. Reuse `buildSourceGraphPreview`, `searchSourceGraph`, `traceSourceGraph`, `mapSourceGraphDiffImpact`, `rankArchitectureNodes`, and the orientation model. Do not duplicate parsers in the MCP layer.
+
+## Task 1: Shared graph delivery and validation
+
+**Files:** `packages/source-graph/src/intelligence.mjs`, `packages/source-graph/src/index-store.mjs`, `apps/cli/oaf.mjs`, `tests/source-graph-intelligence.test.mjs`, `tests/mcp-token-saver.test.mjs`
+
+1. Add failing tests for bounded enum/list/string arguments and locator normalization.
+2. Add a shared graph loader that prefers a valid read-only persisted index and otherwise performs the existing bounded in-memory scan without writing.
+3. Return source, freshness, coverage, and safeguard metadata with every structural response.
+4. Run focused tests to green.
+
+## Task 2: Architecture and index status
+
+1. Add failing MCP contract tests for `repo.architecture` and `repo.index_status`.
+2. Implement architecture groups, ranked entry points, hotspots, relationship counts, and coverage from sanitized graph data.
+3. Implement index status as metadata-only inspection; absent and stale indexes are valid states, not implicit refresh triggers.
+4. Verify both tools report `read-only` and zero local writes.
+
+## Task 3: Search, context, and trace
+
+1. Add failing tests for `code.search`, `code.context`, and `code.trace`, including ambiguous symbols, direction/depth bounds, pagination, and locator prefixes.
+2. Implement search as a compact wrapper over `searchSourceGraph`.
+3. Implement context as one selected node plus bounded incoming/outgoing edges, containing file/chunk, callers, callees, references, and ambiguity candidates.
+4. Implement trace over `traceSourceGraph` with terminal locators and bounded paths.
+5. Assert raw fixture source does not appear in any response.
+
+## Task 4: Dependencies and routes
+
+1. Add failing tests for `code.dependencies` on file, module, and symbol starting points.
+2. Add failing route tests for conventional server route files and handler symbols, including no-route results.
+3. Implement dependency traversal over import, contains, defined-in, call, and reference edges with explicit relation kinds.
+4. Implement route discovery as evidence-based ranking using file patterns, handler/export signals, and connected graph nodes. Label it static discovery, not runtime tracing.
+5. Run focused tests to green.
+
+## Task 5: Impact integration and tool manifest
+
+1. Extend `code.impact` tests for risk summary, direct/transitive counts, unrepresented changes, and freshness.
+2. Update the MCP manifest and reference descriptions to exactly twelve tools.
+3. Run MCP inspection and smoke tests against a temporary multi-file repository.
+4. Verify every structural tool is read-only, bounded, locator-only, and deterministic for a fixed clock.
diff --git a/docs/superpowers/plans/2026-07-16-memory-recall-persistent-index.md b/docs/superpowers/plans/2026-07-16-memory-recall-persistent-index.md
new file mode 100644
index 00000000..f4f55cdf
--- /dev/null
+++ b/docs/superpowers/plans/2026-07-16-memory-recall-persistent-index.md
@@ -0,0 +1,46 @@
+# Persistent Incremental Source Index Implementation Plan
+
+> Execute with temporary repositories and process-restart tests. MCP reads indexes but never writes them.
+
+**Goal:** Add a safe persistent local source-graph index that reuses unchanged file metadata and supports larger repositories without false scale claims.
+
+**Architecture:** Persist sanitized per-file parse shards plus a merged graph and manifest. The explicit CLI writer owns mutation. The read-only loader validates schema, workspace containment, parser version, ignore identity, and freshness before serving data.
+
+## Task 1: Per-file shard contract
+
+**Files:** `providers/native/context-candidate-ast-code/src/index.mjs`, `packages/source-graph/src/index-store.mjs`, `tests/source-graph-index-store.test.mjs`
+
+1. Add failing tests that a file shard contains structural metadata and hashes but no raw body.
+2. Add an `onlyIncludes` scan option that prunes traversal to requested workspace-relative JS/TS files while preserving ignore and safety rules.
+3. Export a safe shard builder and a merge function that rebuilds the global symbol index from merged chunks/file outlines.
+4. Verify merged output matches a clean full scan for the same fixture.
+
+## Task 2: Atomic persistent format
+
+1. Add failing tests for schema validation, workspace-contained paths, corrupt files, parser-version mismatch, and atomic replacement.
+2. Implement `index.v1.json` with schema version, workspace ID, root identity hash, scan settings, ignore fingerprint, file manifest, shards, sanitized graph, generated time, and content fingerprint.
+3. Write through a same-directory temporary file, fsync/close, then rename.
+4. Enforce permissions and never store absolute paths or source bodies.
+
+## Task 3: Incremental refresh
+
+1. Add a fixture with changed, added, deleted, and unchanged files.
+2. Assert refresh parses only changed/added paths, reuses unchanged shards, removes deleted shards, and produces the same public graph as a clean full build.
+3. Treat ignore-rule, parser-version, or scan-setting changes as explicit full rebuild reasons.
+4. Report parsed, reused, added, changed, deleted, duration, and coverage counts without making provider token or scale claims.
+
+## Task 4: CLI lifecycle
+
+**Files:** `apps/cli/oaf.mjs`, `tests/cli.test.mjs`
+
+1. Add failing help and behavior tests for `recall graph index --write`, `--refresh`, `--status`, `--out`, and `--watch`.
+2. Require explicit `--write` or `--refresh` for mutation. `--status` is read-only.
+3. Implement bounded debounced watch mode with clean shutdown and visible refresh results.
+4. Keep the index under `.local/` by default and update ignore/setup guidance.
+
+## Task 5: Restart, scale, and safety verification
+
+1. Build an index, exit, load it in a new process, and verify graph fingerprint equality.
+2. Call every MCP structural tool against the persisted index and assert the index mtime does not change.
+3. Generate a representative large JS/TS fixture and record cold build, warm load, and one-file refresh time plus index size.
+4. Document the measured fixture size and current bounds. Do not claim million-node or cross-repository support.
diff --git a/docs/superpowers/plans/2026-07-16-memory-recall-polyglot-phase-0.md b/docs/superpowers/plans/2026-07-16-memory-recall-polyglot-phase-0.md
new file mode 100644
index 00000000..b3941d6e
--- /dev/null
+++ b/docs/superpowers/plans/2026-07-16-memory-recall-polyglot-phase-0.md
@@ -0,0 +1,541 @@
+# Memory Recall Polyglot Phase 0 Implementation Plan
+
+> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
+
+**Goal:** Freeze the production code-intelligence boundary, publish an evidence-bearing language capability matrix, define the provider-neutral protocol contract, pin the benchmark corpus, and record the current Memory Recall baseline before Node/Rust integration begins.
+
+**Architecture:** Phase 0 adds contracts and measurement infrastructure only. The current JS/TS provider and experimental Rust runtime remain behaviorally unchanged. New JSON Schemas define bounded provider-neutral graph output, language capability claims, and benchmark corpus inputs; small Node scripts validate evidence and run the current local baseline.
+
+**Tech Stack:** Node.js 22 ESM, JSON Schema 2020-12, existing dependency-free schema validator, Rust workspace and existing quality harnesses, Git, Markdown, Node test runner.
+
+## Global Constraints
+
+- The public package remains `memory-recall`; existing OAF identifiers remain compatibility internals.
+- No source body, absolute filesystem path, user name, credential, or provider-native identity may enter protocol fixtures or reports.
+- Protocol additions are additive within v1 and require valid plus invalid compatibility fixtures.
+- MCP remains read-only; Phase 0 adds no index mutation through MCP.
+- Current product claims remain JS/TS-only until later phases pass their gates.
+- `full` language support requires symbol recall at least 95 percent and resolved-call precision at least 90 percent on the approved corpus.
+- Loading a grammar is not language support.
+- No push, merge, npm publish, deploy, or external release occurs in this plan.
+- The worktree must be clean after each task commit.
+
+---
+
+### Task 1: Record the approved architecture decision
+
+**Files:**
+- Modify: `docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md:1-6`
+- Create: `docs/adr/0023-production-rust-code-intelligence-engine.md`
+- Test: `tests/usage-docs.test.mjs`
+
+**Interfaces:**
+- Consumes: approved polyglot leadership specification at commit `34f8b67`.
+- Produces: accepted ADR 0023 and a stable link used by later provider, storage, distribution, and release work.
+
+- [x] **Step 1: Write the failing documentation test**
+
+Add this test to `tests/usage-docs.test.mjs`:
+
+```js
+test('polyglot leadership contract is approved and owns the native engine boundary', () => {
+ const design = read('docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md');
+ const adr = read('docs/adr/0023-production-rust-code-intelligence-engine.md');
+ assert.match(design, /\*\*Status:\*\* Approved for implementation/);
+ assert.match(adr, /## Status\s+Accepted/);
+ assert.match(adr, /Rust.*production code-intelligence engine/s);
+ assert.match(adr, /Node\.js.*CLI.*Control API.*memory.*MCP.*web/s);
+ assert.match(adr, /JSON Lines/);
+ assert.match(adr, /derived local state/);
+ assert.match(adr, /no local Rust toolchain/i);
+});
+```
+
+- [x] **Step 2: Run the focused test and verify it fails**
+
+Run: `node --test tests/usage-docs.test.mjs`
+
+Expected: FAIL because ADR 0023 does not exist and the design status is still proposed.
+
+- [x] **Step 3: Accept the design and write ADR 0023**
+
+Change the design header to:
+
+```markdown
+**Status:** Approved for implementation
+```
+
+ADR 0023 must record these decisions verbatim in substance:
+
+```markdown
+# ADR 0023: Production Rust Code Intelligence Engine
+
+## Status
+
+Accepted.
+
+## Decision
+
+Memory Recall promotes the existing Rust Tree-sitter runtime into the production code-intelligence engine. Node.js continues to own the public CLI, loopback Control API, governed memory, read-only MCP facade, and web workbench.
+
+Node and Rust communicate through a versioned JSON Lines subprocess protocol. The graph and index remain derived local state, not canonical memory. The public npm installation selects a verified platform binary and does not require a local Rust toolchain.
+```
+
+The ADR must also cover alternatives rejected, failure boundaries, compatibility, security, distribution, and reversal.
+
+- [x] **Step 4: Run the focused test and documentation hygiene checks**
+
+Run: `node --test tests/usage-docs.test.mjs && git diff --check`
+
+Expected: all usage-document tests pass and `git diff --check` prints nothing.
+
+- [x] **Step 5: Commit the accepted decision**
+
+```bash
+git add docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md docs/adr/0023-production-rust-code-intelligence-engine.md tests/usage-docs.test.mjs
+git commit -m "docs: accept production code intelligence engine"
+```
+
+### Task 2: Add the provider-neutral graph contract
+
+**Files:**
+- Create: `packages/protocol/schemas/code-intelligence-graph.schema.json`
+- Create: `examples/protocol/code-intelligence-graph.json`
+- Create: `examples/protocol/compatibility/invalid/code-intelligence-graph-raw-body.json`
+- Create: `examples/protocol/compatibility/invalid/code-intelligence-graph-absolute-path.json`
+- Modify: `examples/protocol/compatibility/fixtures.json`
+- Modify: `packages/protocol/README.md`
+- Modify: `rfcs/0001-protocol-contracts.md`
+- Create: `tests/code-intelligence-contract.test.mjs`
+
+**Interfaces:**
+- Consumes: workspace-locator rules from `packages/protocol/src/source-graph-locator.mjs` and the node/edge vocabulary approved in the design.
+- Produces: schema ID `https://openagentfabric.dev/schemas/code-intelligence-graph.schema.json`, graph version `memory-recall-code-intelligence-1`, node IDs matching `^cinode_[a-f0-9]{32}$`, and edge IDs matching `^ciedge_[a-f0-9]{32}$`.
+
+- [x] **Step 1: Write failing valid and invalid fixture tests**
+
+Create `tests/code-intelligence-contract.test.mjs`:
+
+```js
+import assert from 'node:assert/strict';
+import { readFile } from 'node:fs/promises';
+import test from 'node:test';
+import { validateJsonSchema } from '../packages/protocol/src/schema-validator.mjs';
+
+const readJson = async (file) => JSON.parse(await readFile(new URL(`../${file}`, import.meta.url), 'utf8'));
+
+test('provider-neutral code intelligence graph validates', async () => {
+ const schema = await readJson('packages/protocol/schemas/code-intelligence-graph.schema.json');
+ const graph = await readJson('examples/protocol/code-intelligence-graph.json');
+ assert.equal(validateJsonSchema(schema, graph).valid, true);
+ assert.equal(graph.nodes.every((node) => !Object.hasOwn(node, 'body') && !Object.hasOwn(node, 'sourceText')), true);
+});
+
+test('code intelligence graph rejects source bodies and absolute paths', async () => {
+ const schema = await readJson('packages/protocol/schemas/code-intelligence-graph.schema.json');
+ for (const file of [
+ 'examples/protocol/compatibility/invalid/code-intelligence-graph-raw-body.json',
+ 'examples/protocol/compatibility/invalid/code-intelligence-graph-absolute-path.json'
+ ]) {
+ assert.equal(validateJsonSchema(schema, await readJson(file)).valid, false, file);
+ }
+});
+```
+
+- [x] **Step 2: Run the focused test and verify it fails**
+
+Run: `node --test tests/code-intelligence-contract.test.mjs`
+
+Expected: FAIL because the schema and fixtures do not exist.
+
+- [x] **Step 3: Create the bounded graph schema**
+
+The top-level schema must require:
+
+```json
+{
+ "schemaVersion": "1.0.0",
+ "graphVersion": "memory-recall-code-intelligence-1",
+ "repository": {
+ "id": "repo_0123456789abcdef0123456789abcdef",
+ "workspaceId": "ws_local",
+ "rootIdentityHash": "sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
+ },
+ "engine": {
+ "name": "memory-recall-native",
+ "version": "0.1.0",
+ "protocolVersion": "1.0.0"
+ },
+ "generation": {
+ "id": "cigen_0123456789abcdef0123456789abcdef",
+ "builtAt": "2026-07-16T00:00:00.000Z",
+ "freshness": "current"
+ },
+ "coverage": [],
+ "nodes": [],
+ "edges": [],
+ "diagnostics": [],
+ "graphFingerprint": "sha256:abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789"
+}
+```
+
+Use closed objects. Bound nodes to 5,000, edges to 10,000, coverage rows to 64, and diagnostics to 1,000. Use the exact node, edge, resolution, evidence, language, and freshness enums from the approved design. Locators must be workspace-relative and may include `#Lx-Ly`; no `body`, `sourceText`, arbitrary metadata, absolute path, URI, or provider-native ID property is permitted.
+
+- [x] **Step 4: Add one valid example and two invalid fixtures**
+
+The valid example contains one TypeScript file node, one function node, and one exact `defines` edge with a bounded evidence span. The raw-body fixture copies the valid example and adds `sourceText`. The absolute-path fixture replaces the file locator with `/Users/example/private.ts`.
+
+Register all three in `examples/protocol/compatibility/fixtures.json` with expected validity `true`, `false`, and `false`.
+
+- [x] **Step 5: Document the additive protocol**
+
+Add a concise section to `packages/protocol/README.md` and `rfcs/0001-protocol-contracts.md` stating that the new contract is provider-neutral, bounded, additive within v1, and separate from canonical memory. Keep `source-graph.schema.json` as the current JS/TS compatibility schema until Phase 1 migration.
+
+- [x] **Step 6: Run protocol verification**
+
+Run: `node --test tests/code-intelligence-contract.test.mjs tests/protocol-schema-validator.test.mjs && npm run protocol:validate`
+
+Expected: focused tests pass and the compatibility fixture total increases by three with zero failures.
+
+- [x] **Step 7: Commit the graph contract**
+
+```bash
+git add packages/protocol/schemas/code-intelligence-graph.schema.json packages/protocol/README.md rfcs/0001-protocol-contracts.md examples/protocol/code-intelligence-graph.json examples/protocol/compatibility/invalid/code-intelligence-graph-raw-body.json examples/protocol/compatibility/invalid/code-intelligence-graph-absolute-path.json examples/protocol/compatibility/fixtures.json tests/code-intelligence-contract.test.mjs
+git commit -m "feat: define provider-neutral code intelligence graph"
+```
+
+### Task 3: Publish the evidence-bearing language capability matrix
+
+**Files:**
+- Create: `packages/protocol/schemas/code-intelligence-capability-matrix.schema.json`
+- Create: `evals/code-intelligence/capability-matrix.v1.json`
+- Create: `packages/protocol/src/code-intelligence-contract.mjs`
+- Modify: `packages/protocol/src/index.mjs`
+- Modify: `examples/protocol/compatibility/fixtures.json`
+- Create: `examples/protocol/compatibility/invalid/code-intelligence-capability-matrix-false-full.json`
+- Modify: `tests/code-intelligence-contract.test.mjs`
+- Create: `docs/usage/code-intelligence-support.md`
+- Modify: `docs/usage/support-matrix.md`
+
+**Interfaces:**
+- Consumes: fourteen Tier 1 language IDs and eleven capability IDs from the approved specification.
+- Produces: `CODE_INTELLIGENCE_TIER_1_LANGUAGES`, `CODE_INTELLIGENCE_TIER_2_LANGUAGES`, `CODE_INTELLIGENCE_CAPABILITIES`, and `auditCodeIntelligenceCapabilityMatrix(matrix, { root })`.
+
+- [x] **Step 1: Add failing matrix tests**
+
+Append to `tests/code-intelligence-contract.test.mjs`:
+
+```js
+import {
+ CODE_INTELLIGENCE_CAPABILITIES,
+ CODE_INTELLIGENCE_TIER_1_LANGUAGES,
+ auditCodeIntelligenceCapabilityMatrix
+} from '../packages/protocol/src/code-intelligence-contract.mjs';
+
+test('capability matrix covers every Tier 1 language and capability honestly', async () => {
+ const matrix = await readJson('evals/code-intelligence/capability-matrix.v1.json');
+ assert.deepEqual(matrix.languages.filter((item) => item.tier === 1).map((item) => item.id).sort(), [...CODE_INTELLIGENCE_TIER_1_LANGUAGES].sort());
+ assert.equal(matrix.languages.every((item) => CODE_INTELLIGENCE_CAPABILITIES.every((capability) => Object.hasOwn(item.capabilities, capability))), true);
+ assert.deepEqual(await auditCodeIntelligenceCapabilityMatrix(matrix, { root: new URL('..', import.meta.url) }), []);
+ assert.equal(matrix.languages.every((item) => item.benchmarkStatus !== 'meets-floor'), true);
+});
+
+test('matrix audit rejects unsupported full claims without fixture and real-repo evidence', async () => {
+ const invalid = await readJson('examples/protocol/compatibility/invalid/code-intelligence-capability-matrix-false-full.json');
+ const findings = await auditCodeIntelligenceCapabilityMatrix(invalid, { root: new URL('..', import.meta.url) });
+ assert.equal(findings.some((item) => item.code === 'full_claim_missing_fixture_evidence'), true);
+ assert.equal(findings.some((item) => item.code === 'full_claim_missing_real_repo_evidence'), true);
+});
+```
+
+- [x] **Step 2: Run the focused test and verify it fails**
+
+Run: `node --test tests/code-intelligence-contract.test.mjs`
+
+Expected: FAIL because the contract module and matrix do not exist.
+
+- [x] **Step 3: Implement constants and evidence audit**
+
+Create `packages/protocol/src/code-intelligence-contract.mjs` with frozen arrays for:
+
+```js
+export const CODE_INTELLIGENCE_TIER_1_LANGUAGES = Object.freeze([
+ 'typescript', 'javascript', 'python', 'java', 'kotlin', 'csharp', 'go',
+ 'rust', 'php', 'ruby', 'swift', 'c', 'cpp', 'dart'
+]);
+
+export const CODE_INTELLIGENCE_TIER_2_LANGUAGES = Object.freeze([
+ 'lua', 'bash', 'sql', 'objective-c', 'scala', 'r', 'julia', 'zig'
+]);
+
+export const CODE_INTELLIGENCE_CAPABILITIES = Object.freeze([
+ 'parse', 'structure', 'imports', 'exports', 'heritage', 'types',
+ 'calls', 'config', 'frameworks', 'impact', 'processes'
+]);
+```
+
+`auditCodeIntelligenceCapabilityMatrix` must return stable findings for duplicate/missing languages, missing capabilities, evidence paths that are absolute, escape the repository, or do not exist, and any `meets-floor` capability without both `fixture` and `real-repo` evidence classes. It performs no network calls and writes no files.
+
+- [x] **Step 4: Create the schema and initial matrix**
+
+The matrix includes all fourteen Tier 1 and eight Tier 2 languages. Each capability has:
+
+```json
+{
+ "productStatus": "implemented",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ { "class": "implementation", "path": "providers/native/context-candidate-ast-code/src/index.mjs" }
+ ],
+ "limitations": ["Public production path remains bounded JS/TS static analysis."]
+}
+```
+
+Use `implemented` only for behavior on the public Node path, `experimental` for existing Rust-only behavior, `specified` for absent target behavior, and `unsupported` where no implementation exists. Use `unmeasured` for every Phase 0 benchmark status. No language or capability is marked `meets-floor` in the initial matrix.
+
+Register the matrix as a valid protocol fixture and create one invalid fixture that marks a capability `meets-floor` without fixture or real-repository evidence.
+
+- [x] **Step 5: Publish the readable support page**
+
+`docs/usage/code-intelligence-support.md` must explain Tier 1, Tier 2, product status, benchmark status, evidence requirements, and the current JS/TS versus experimental Rust boundary. Link it from `docs/usage/support-matrix.md`. Do not hand-copy every matrix cell into Markdown; the JSON file remains authoritative.
+
+- [x] **Step 6: Verify the matrix**
+
+Run: `node --test tests/code-intelligence-contract.test.mjs && npm run protocol:validate`
+
+Expected: tests pass, the valid matrix fixture validates, the false-full fixture is rejected by the schema or evidence audit, and no current capability claims `meets-floor`.
+
+- [x] **Step 7: Commit the capability contract**
+
+```bash
+git add packages/protocol/schemas/code-intelligence-capability-matrix.schema.json packages/protocol/src/code-intelligence-contract.mjs packages/protocol/src/index.mjs evals/code-intelligence/capability-matrix.v1.json examples/protocol/compatibility/fixtures.json examples/protocol/compatibility/invalid/code-intelligence-capability-matrix-false-full.json tests/code-intelligence-contract.test.mjs docs/usage/code-intelligence-support.md docs/usage/support-matrix.md
+git commit -m "feat: add evidence-bearing language capability matrix"
+```
+
+### Task 4: Pin the benchmark corpus and thresholds
+
+**Files:**
+- Create: `packages/protocol/schemas/code-intelligence-benchmark-manifest.schema.json`
+- Create: `evals/code-intelligence/corpus-candidates.v1.json`
+- Create: `evals/code-intelligence/benchmark-gates.v1.json`
+- Create: `scripts/pin-code-intelligence-corpus.mjs`
+- Create: `evals/code-intelligence/corpus.v1.json`
+- Modify: `tests/code-intelligence-contract.test.mjs`
+
+**Interfaces:**
+- Consumes: exact Tier 1 language constants and public Git repository URLs.
+- Produces: a deterministic corpus with three pinned real repositories per Tier 1 language and explicit small, medium, or large size class.
+
+- [x] **Step 1: Add failing corpus tests**
+
+Append:
+
+```js
+test('benchmark corpus has three pinned real repositories per Tier 1 language', async () => {
+ const corpus = await readJson('evals/code-intelligence/corpus.v1.json');
+ for (const language of CODE_INTELLIGENCE_TIER_1_LANGUAGES) {
+ const repos = corpus.repositories.filter((item) => item.primaryLanguage === language);
+ assert.equal(repos.length, 3, language);
+ assert.equal(repos.every((item) => /^[a-f0-9]{40}$/.test(item.commit)), true, language);
+ assert.equal(new Set(repos.map((item) => item.url)).size, 3, language);
+ }
+});
+
+test('benchmark gates preserve the approved accuracy floors', async () => {
+ const gates = await readJson('evals/code-intelligence/benchmark-gates.v1.json');
+ assert.equal(gates.languageFull.symbolRecallMinimum, 0.95);
+ assert.equal(gates.languageFull.resolvedCallPrecisionMinimum, 0.90);
+ assert.equal(gates.languageFull.duplicateCanonicalSymbolMaximum, 0);
+ assert.equal(gates.claims.parityRequiresAllTier1Languages, true);
+ assert.equal(gates.claims.leadershipRequiresRelevantCompetitorWin, true);
+});
+```
+
+- [x] **Step 2: Run the focused test and verify it fails**
+
+Run: `node --test tests/code-intelligence-contract.test.mjs`
+
+Expected: FAIL because the corpus and gate files do not exist.
+
+- [x] **Step 3: Create the candidate list**
+
+Use these exact repository groups:
+
+```text
+typescript: microsoft/TypeScript, microsoft/vscode, vercel/next.js
+javascript: expressjs/express, lodash/lodash, axios/axios
+python: pallets/flask, psf/requests, fastapi/fastapi
+java: spring-projects/spring-petclinic, google/gson, google/guava
+kotlin: ktorio/ktor, Kotlin/kotlinx.coroutines, android/nowinandroid
+csharp: dotnet/aspnetcore, dotnet/runtime, JamesNK/Newtonsoft.Json
+go: gin-gonic/gin, go-chi/chi, hashicorp/go-multierror
+rust: dtolnay/itoa, tokio-rs/axum, serde-rs/json
+php: laravel/framework, symfony/symfony, slimphp/Slim
+ruby: rails/rails, sinatra/sinatra, ruby/rake
+swift: vapor/vapor, Alamofire/Alamofire, apple/swift-nio
+c: antirez/kilo, libuv/libuv, curl/curl
+cpp: fmtlib/fmt, catchorg/Catch2, nlohmann/json
+dart: dart-lang/http, dart-lang/shelf, flutter/samples
+```
+
+The C corpus uses libuv instead of Redis so all three benchmark inputs have
+straightforward permissive licenses for benchmark use and derived metadata.
+
+Each candidate includes repository ID, HTTPS Git URL, primary language, size class, role, SPDX license expression, and an authoritative license URL. Candidate entries contain no commit field.
+
+- [x] **Step 4: Implement deterministic pinning**
+
+`scripts/pin-code-intelligence-corpus.mjs --write` reads the candidates, runs `git ls-remote HEAD`, validates one 40-character commit per repository, sorts by language and ID, and atomically writes `evals/code-intelligence/corpus.v1.json`. It must fail on non-HTTPS Git URLs, duplicate URLs, missing commits, extra output, missing license evidence, or fewer/more than three repositories per Tier 1 language.
+
+`--check` is offline. It validates that the committed corpus exactly matches the candidate identities and metadata, contains immutable 40-character pins, and satisfies the schema without comparing pins to a moving remote branch. A later `--refresh` mode may resolve new HEAD commits, but it must print the proposed pin changes and require a separate explicit `--write` invocation to replace the corpus.
+
+- [x] **Step 5: Pin the corpus**
+
+Run: `node scripts/pin-code-intelligence-corpus.mjs --write`
+
+Expected: 42 repositories pinned with 40-character commits and one local file written.
+
+- [x] **Step 6: Verify schema and gates**
+
+Run: `node --test tests/code-intelligence-contract.test.mjs && node scripts/pin-code-intelligence-corpus.mjs --check`
+
+Expected: tests pass and the committed corpus matches its candidate identities, license metadata, cardinality, and immutable-pin schema without a network call.
+
+- [x] **Step 7: Commit the corpus contract**
+
+```bash
+git add packages/protocol/schemas/code-intelligence-benchmark-manifest.schema.json evals/code-intelligence/corpus-candidates.v1.json evals/code-intelligence/corpus.v1.json evals/code-intelligence/benchmark-gates.v1.json scripts/pin-code-intelligence-corpus.mjs tests/code-intelligence-contract.test.mjs
+git commit -m "test: pin polyglot benchmark corpus"
+```
+
+### Task 5: Record the current Memory Recall baseline
+
+**Files:**
+- Create: `scripts/code-intelligence-phase0-baseline.mjs`
+- Create: `evals/code-intelligence/results/phase0-baseline.json`
+- Modify: `tests/code-intelligence-contract.test.mjs`
+- Modify: `docs/benchmarks.md`
+
+**Interfaces:**
+- Consumes: current Node JS/TS tests, current Rust quality harnesses, corpus manifest, and benchmark gates.
+- Produces: an immutable current-state report that separates public Node behavior, experimental Rust behavior, missing competitive measurements, and commands executed.
+
+- [x] **Step 1: Add a failing report-truth test**
+
+Append:
+
+```js
+test('Phase 0 baseline separates public, experimental, and unmeasured evidence', async () => {
+ const report = await readJson('evals/code-intelligence/results/phase0-baseline.json');
+ assert.equal(report.phase, 0);
+ assert.equal(report.publicEngine.languageIds.join(','), 'javascript,typescript');
+ assert.equal(report.experimentalEngine.languageIds.includes('python'), true);
+ assert.equal(report.competitors.gitnexus.status, 'unmeasured');
+ assert.equal(report.competitors.codebaseMemoryMcp.status, 'unmeasured');
+ assert.equal(report.claims.parity, false);
+ assert.equal(report.claims.leadership, false);
+ assert.equal(report.commands.every((item) => item.exitCode === 0), true);
+});
+```
+
+- [x] **Step 2: Run the focused test and verify it fails**
+
+Run: `node --test tests/code-intelligence-contract.test.mjs`
+
+Expected: FAIL because the baseline report does not exist.
+
+- [x] **Step 3: Implement the baseline runner**
+
+The runner executes these commands in order and records command, exit code, duration, and SHA-256 of stdout and stderr without embedding raw output:
+
+```js
+const COMMANDS = [
+ ['node', ['--test', 'tests/ast-code-candidate-source.test.mjs', 'tests/source-graph-index-store.test.mjs', 'tests/mcp-code-intelligence.test.mjs']],
+ ['cargo', ['build', '--release', '--manifest-path', 'rust/Cargo.toml']],
+ ['cargo', ['test', '--manifest-path', 'rust/Cargo.toml']],
+ ['node', ['scripts/rust-ingest-quality.mjs']],
+ ['node', ['scripts/rust-typed-calls-quality.mjs']],
+ ['node', ['scripts/rust-incremental-quality.mjs']]
+];
+```
+
+The report records platform, architecture, Node version, Rust version, current commit, dirty state before the generated report, public language IDs, experimental language IDs, matrix fingerprint, corpus fingerprint, gate values, command receipts, and explicit false parity/leadership claims. Competitor measurements remain `unmeasured` until the Phase 8 harness runs them on identical pinned clones.
+
+Support `--out evals/code-intelligence/results/phase0-baseline.json`. Write through a same-directory temporary file and rename. Do not include source bodies, absolute repository roots, environment variables, command stdout, or command stderr.
+
+- [x] **Step 4: Run the baseline**
+
+Run: `node scripts/code-intelligence-phase0-baseline.mjs --out evals/code-intelligence/results/phase0-baseline.json`
+
+Expected: all six commands exit zero and the report is written once.
+
+- [x] **Step 5: Document the baseline honestly**
+
+Add a Phase 0 section to `docs/benchmarks.md` with the report path, command, what was measured, and what remains unmeasured. State that the public product remains JS/TS-only and that experimental Rust parser/harness success is not GitNexus or Codebase Memory MCP parity.
+
+- [x] **Step 6: Verify the report**
+
+Run: `node --test tests/code-intelligence-contract.test.mjs && git diff --check`
+
+Expected: tests pass, the report claims no parity or leadership, and diff hygiene passes.
+
+- [x] **Step 7: Commit the current baseline**
+
+```bash
+git add scripts/code-intelligence-phase0-baseline.mjs evals/code-intelligence/results/phase0-baseline.json tests/code-intelligence-contract.test.mjs docs/benchmarks.md
+git commit -m "test: record polyglot phase zero baseline"
+```
+
+### Task 6: Close the Phase 0 gate
+
+**Files:**
+- Modify: `PROJECT_STATUS.json`
+- Modify: `CHANGELOG.md`
+- Modify: `docs/usage/code-intelligence-support.md`
+- Modify: `docs/superpowers/plans/2026-07-16-memory-recall-polyglot-phase-0.md`
+
+**Interfaces:**
+- Consumes: accepted ADR, graph schema, capability matrix, pinned corpus, gates, and baseline report.
+- Produces: machine-readable Phase 0 status and the clean handoff into Phase 1.
+
+- [x] **Step 1: Add Phase 0 evidence to project status**
+
+Add a specified capability named `code-intelligence.polyglot-production-engine` whose evidence lists the approved spec, ADR, schemas, capability matrix, corpus, gates, baseline, and contract tests. Its limitations must state that the public runtime remains JS/TS-only, the Rust engine remains experimental, competitors remain unmeasured, and no parity claim exists.
+
+- [x] **Step 2: Update support and changelog truth**
+
+Add one changelog entry under Unreleased describing contracts and baseline only. Update the support page with the baseline report link and next phase. Do not change README language support claims.
+
+- [x] **Step 3: Mark every completed plan checkbox**
+
+Change each executed `- [ ]` in this file to `- [x]`. Leave no checked item whose command or artifact was not completed.
+
+- [x] **Step 4: Run the complete Phase 0 gate**
+
+Run:
+
+```bash
+npm run check
+npm run protocol:validate
+npm test
+npm run eval
+npm run verify:handoff
+npm run release:readiness:check
+git diff --check
+git status --short
+```
+
+Expected: every command passes. `git status --short` lists only the intended Phase 0 status, changelog, support-page, and checked-plan changes before the final commit.
+
+- [x] **Step 5: Commit Phase 0 closure**
+
+```bash
+git add PROJECT_STATUS.json CHANGELOG.md docs/usage/code-intelligence-support.md docs/superpowers/plans/2026-07-16-memory-recall-polyglot-phase-0.md HANDOFF_VERIFICATION.json REPOSITORY_MANIFEST.json docs/release
+git commit -m "docs: close polyglot phase zero"
+```
+
+- [x] **Step 6: Verify the clean milestone boundary**
+
+Run: `git status --short --branch && git log -6 --oneline`
+
+Expected: clean `codex/memory-recall-orientation-workbench` worktree with the six Phase 0 commits visible. No push, merge, publish, or deployment occurred.
diff --git a/docs/superpowers/plans/2026-07-16-memory-recall-polyglot-phase-1.md b/docs/superpowers/plans/2026-07-16-memory-recall-polyglot-phase-1.md
new file mode 100644
index 00000000..0345b6ee
--- /dev/null
+++ b/docs/superpowers/plans/2026-07-16-memory-recall-polyglot-phase-1.md
@@ -0,0 +1,238 @@
+# Memory Recall Polyglot Leadership Phase 1 Implementation Plan
+
+> **Execution mode:** Use `superpowers:executing-plans` and test-driven development. Complete tasks in order, check each step only after its command and artifact are verified, and keep the existing JS/TS engine as the public default throughout this phase.
+
+**Goal:** Connect the Node product shell to the Rust code-intelligence engine through a versioned, bounded, provider-neutral subprocess port. Prove useful JS/TS compatibility, read-only behavior, deterministic fingerprints, cancellation, process isolation, stable errors, and packed-consumer behavior before exposing the native path as an explicit preview.
+
+**Stop condition:** Phase 1 is complete only when all focused tests, Rust tests, protocol fixtures, consumer-package checks, full repository CI, handoff verification, and release-readiness checks pass. The native engine must not become the default in this phase.
+
+**Architecture:** The Rust binary accepts JSON Lines requests on stdin and emits protocol frames only on stdout. Node owns process lifecycle, request validation, workspace containment, deadlines, cancellation, output bounds, response validation, and translation into the existing source-graph compatibility contract. The Rust result uses `code-intelligence-graph.schema.json`; the existing source graph remains the UI, CLI, API, and MCP compatibility shape until later migration gates pass.
+
+**Safety boundary:** Scanning is local and read-only. No network, model, canonical-memory, index, configuration, or external writes are permitted. Absolute filesystem roots, source bodies, environment values, raw parser errors, provider IDs, and Tree-sitter implementation names must not cross the public protocol.
+
+---
+
+## Task 1: Define the native engine protocol
+
+**Files:**
+
+- Create: `packages/protocol/schemas/code-intelligence-engine-request.schema.json`
+- Create: `packages/protocol/schemas/code-intelligence-engine-response.schema.json`
+- Create: `examples/protocol/code-intelligence-engine-request.json`
+- Create: `examples/protocol/code-intelligence-engine-response.json`
+- Create: `examples/protocol/compatibility/invalid/code-intelligence-engine-request-absolute-root.json`
+- Create: `examples/protocol/compatibility/invalid/code-intelligence-engine-response-raw-error.json`
+- Modify: `examples/protocol/compatibility/fixtures.json`
+- Modify: `packages/protocol/README.md`
+- Modify: `rfcs/0001-protocol-contracts.md`
+- Modify: `tests/code-intelligence-contract.test.mjs`
+
+- [x] **Step 1: Add failing protocol tests**
+
+Test a valid `graph.build` request and success response. Reject unknown major protocol versions, absolute or traversing roots, unbounded limits, additional properties, source bodies, raw error text, and absolute paths in error details.
+
+Run: `node --test tests/code-intelligence-contract.test.mjs`
+
+Expected: new assertions fail because the schemas and fixtures do not exist.
+
+- [x] **Step 2: Add closed, additive v1 schemas and fixtures**
+
+Use protocol version `1.0.0`, bounded request IDs, workspace IDs, relative root `.` only, operation `graph.build`, a deadline duration, optional cancellation token, requested graph schema version, and bounded graph arguments. Responses are a success frame containing the provider-neutral graph or a failure frame containing only a stable code, retryability, and bounded sanitized details.
+
+- [x] **Step 3: Verify and commit the protocol**
+
+Run: `node --test tests/code-intelligence-contract.test.mjs && npm run protocol:validate && git diff --check`
+
+Commit: `feat: define native code intelligence protocol`
+
+## Task 2: Implement the Rust JSON Lines engine
+
+**Files:**
+
+- Modify: `rust/oaf/src/main.rs`
+- Modify: `rust/oaf-ingest/src/lib.rs` only if public structured extraction metadata is required
+- Add focused Rust unit tests beside the implementation
+- Create: `scripts/rust-code-intelligence-protocol-quality.mjs`
+- Modify: `package.json`
+
+- [x] **Step 1: Add failing Rust and process-level tests**
+
+Cover one valid JS/TS workspace, deterministic generation and graph fingerprints, strict request parsing, unsupported operation/version, malformed JSON, bounded files and output, multiple JSON Lines requests, stdout protocol purity, sanitized stderr, and no local writes.
+
+- [x] **Step 2: Add `code-intelligence serve --stdio`**
+
+Translate existing Rust extraction facts into the provider-neutral graph. Emit stable repository, file, symbol, module, route, definition, import, call, and route-handler nodes/edges where evidence exists. Keep IDs content-derived, sort every collection, cap nodes/edges/diagnostics, and compute fingerprints from canonical structural content rather than timestamps.
+
+- [x] **Step 3: Enforce the native boundary**
+
+Resolve the workspace from the child process working directory, accept relative root `.` only, reject writes and network-requiring operations, check deadlines before and after extraction, emit stable error frames, and never print raw source, absolute paths, environment values, or parser internals.
+
+- [x] **Step 4: Verify and commit the engine**
+
+Run: `cd rust && cargo fmt --all -- --check && cd .. && cargo test --manifest-path rust/Cargo.toml && cargo build --release --manifest-path rust/Cargo.toml && node scripts/rust-code-intelligence-protocol-quality.mjs && git diff --check`
+
+Commit: `feat: add bounded rust code intelligence engine`
+
+## Task 3: Add the Node native provider port
+
+**Files:**
+
+- Create: `providers/native/code-intelligence-rust/provider.json`
+- Create: `providers/native/code-intelligence-rust/src/index.mjs`
+- Modify: `providers/native/catalog.json`
+- Modify: `packages/protocol/src/index.mjs` as needed for shared validation exports
+- Create: `tests/native-code-intelligence-provider.test.mjs`
+
+- [x] **Step 1: Add failing provider-boundary tests**
+
+Cover binary discovery, explicit override, request/response validation, workspace containment, timeout, abort signal, stdin closure, stdout/stderr byte caps, nonzero exit, malformed frames, duplicate terminal frames, request-ID mismatch, schema-invalid graph, missing binary, and child cleanup.
+
+- [x] **Step 2: Implement the dependency-free subprocess wrapper**
+
+Spawn one request per child for Phase 1. Set the child working directory to the verified workspace, pass only an allowlisted environment, close stdin after one JSON Line, validate the terminal frame and graph, terminate on timeout/cancel/overflow, and expose stable provider-neutral errors.
+
+- [x] **Step 3: Register the provider without changing defaults**
+
+Document it as local, read-only, preview-only, no-network, no-model, no-write, and dependent on a verified native binary. Do not silently compile Rust or silently choose a weaker engine when `native-preview` is explicitly requested.
+
+- [x] **Step 4: Verify and commit the provider**
+
+Run: `node --test tests/native-code-intelligence-provider.test.mjs tests/adapter-contracts.test.mjs tests/protocol-schema-validator.test.mjs && git diff --check`
+
+Commit: `feat: add native code intelligence provider port`
+
+## Task 4: Translate native graphs into the existing compatibility surface
+
+**Files:**
+
+- Create: `packages/source-graph/src/native-compatibility.mjs`
+- Modify: `packages/source-graph/src/index.mjs`
+- Modify: `packages/source-graph/src/intelligence.mjs`
+- Create: `tests/source-graph-native-compatibility.test.mjs`
+
+- [x] **Step 1: Add failing translation and parity tests**
+
+Use representative JS, TS, TSX, imports, exports, classes, methods, calls, routes, and malformed files. Compare stable developer-facing facts rather than provider-specific IDs: represented file locators, declared symbol names and locators, resolved import relationships, call relationships, route handlers, diagnostics, and coverage.
+
+- [x] **Step 2: Implement the pure compatibility translator**
+
+Convert the provider-neutral graph to the closed `source-graph.schema.json` shape. Preserve locators and evidence, derive compatibility IDs and summary fields deterministically, map only supported kinds and edges, report omitted native constructs explicitly, and validate the translated graph before returning it.
+
+- [x] **Step 3: Add engine selection behind the source-graph port**
+
+Support `js` as the unchanged default, `native-preview` as strict native execution, and `compatibility` as a test/evidence mode that runs both and returns the native graph plus an evidence-bearing comparison. Never silently fall back when strict native preview is selected.
+
+- [x] **Step 4: Verify and commit compatibility**
+
+Run: `node --test tests/source-graph-native-compatibility.test.mjs tests/source-graph-preview.test.mjs tests/source-graph-index-store.test.mjs && git diff --check`
+
+Commit: `feat: bridge native intelligence to source graph`
+
+## Task 5: Expose a safe explicit preview and prove MCP read isolation
+
+**Files:**
+
+- Modify: `apps/cli/oaf.mjs`
+- Modify: `apps/cli/help.mjs`
+- Modify: `packages/recall-map/src/index.mjs` only if the preview can reuse its provider port without changing the default
+- Modify: `tests/cli-graph-index.test.mjs`
+- Modify: `tests/mcp-code-intelligence.test.mjs`
+- Create or modify focused CLI tests for engine selection
+
+- [x] **Step 1: Add failing CLI and MCP tests**
+
+Require `--engine js|native-preview|compatibility` on graph read commands with `js` as default. Prove explicit native preview works with a local verified binary, missing native binary fails clearly, invalid engine values return exit code 2, and MCP reads never build an index or mutate workspace state.
+
+- [x] **Step 2: Wire the preview through the provider port**
+
+Pass engine selection only to read-only graph preview/intelligence calls. Surface engine, compatibility status, coverage, and safe diagnostics in JSON. Keep summary output short and do not claim parity from one fixture.
+
+- [x] **Step 3: Verify and commit the preview**
+
+Run: `node --test tests/cli-graph-index.test.mjs tests/mcp-code-intelligence.test.mjs tests/cli.test.mjs && git diff --check`
+
+Commit: `feat: expose native graph preview`
+
+## Task 6: Prove isolated packed-consumer behavior
+
+**Files:**
+
+- Create: `scripts/native-code-intelligence-consumer-smoke.mjs`
+- Modify: `scripts/consumer-smoke.mjs` or release-readiness checks only where the new proof belongs
+- Modify: `package.json` package allowlist only if Phase 1 runtime files are missing
+- Modify: `tests/release-regressions.test.mjs`
+
+- [x] **Step 1: Add a failing packed-product test**
+
+Pack the npm tarball, install it into an isolated temporary home and repository, provide the locally built native binary only through the documented preview override, run one native preview, verify the graph contract, then remove the override and verify a clear unavailable error. Prove no network, model, canonical-memory, config, or unexpected workspace writes.
+
+- [x] **Step 2: Make the smallest package-boundary correction**
+
+Include only the provider, protocol, translator, and runtime files required by Phase 1. Do not ship checkout-only corpus, benchmark results, Rust build output, or toolchain dependencies. Signed platform binary distribution remains Phase 6.
+
+- [x] **Step 3: Verify and commit the consumer proof**
+
+Run: `node scripts/native-code-intelligence-consumer-smoke.mjs && node --test tests/release-regressions.test.mjs && npm pack --dry-run --json`
+
+Commit: `test: prove packed native intelligence preview`
+
+## Task 7: Record honest Phase 1 evidence and close the milestone
+
+**Files:**
+
+- Create: `evals/code-intelligence/results/phase1-js-ts-compatibility.json`
+- Create: `scripts/code-intelligence-phase1-compatibility.mjs`
+- Modify: `evals/code-intelligence/capability-matrix.v1.json`
+- Modify: `docs/usage/code-intelligence-support.md`
+- Modify: `docs/usage/support-matrix.md`
+- Modify: `docs/usage/rust-acceleration.md`
+- Modify: `docs/benchmarks.md`
+- Modify: `PROJECT_STATUS.json`
+- Modify: `CHANGELOG.md`
+- Modify: `HANDOFF_VERIFICATION.json`
+- Modify: `REPOSITORY_MANIFEST.json`
+- Modify: this plan
+
+- [x] **Step 1: Add the reproducible compatibility evidence runner**
+
+Run both engines on deterministic local fixtures and at least two pinned real JS/TS repositories from the Phase 0 corpus. Record exact commit, platform, engine versions, graph fingerprints, bounded capability counts, compatibility dimensions, failures, and thresholds. Do not store raw source, checkout paths, environment values, or competitor claims.
+
+- [x] **Step 2: Update claims only from passing evidence**
+
+Mark only the JS/TS native-preview capabilities actually demonstrated. Keep the JS/TS public default unchanged, every other language experimental or unmeasured as appropriate, and parity/leadership false until later gates prove them.
+
+- [x] **Step 3: Run the complete Phase 1 gate**
+
+Run:
+
+```bash
+npm run check
+npm run protocol:validate
+npm test
+npm run eval
+cargo test --manifest-path rust/Cargo.toml
+node scripts/rust-code-intelligence-protocol-quality.mjs
+node scripts/native-code-intelligence-consumer-smoke.mjs
+node scripts/code-intelligence-phase1-compatibility.mjs --check
+npm run verify:handoff
+npm run release:readiness:check
+git diff --check
+```
+
+Expected: every command passes with the native engine still preview-only and the JS/TS engine still the public default.
+
+- [x] **Step 4: Commit Phase 1 closure and verify a clean boundary**
+
+Commit: `docs: close polyglot phase one`
+
+Run: `git status --short --branch && git log -12 --oneline`
+
+Expected: clean worktree on `codex/memory-recall-orientation-workbench`.
+
+## Rollback
+
+Every task is an additive commit. Before Phase 1 closes, rollback is a commit-level revert. Runtime rollback is immediate because `js` remains the default and the preview flag is opt-in. Delete any derived preview output; canonical memory and the existing source-graph index are untouched.
+
+## Phase 2 handoff
+
+Phase 2 may begin only after this plan is fully checked and committed. Its first work is language-batch fixture evidence against the provider-neutral graph, not changing the public default or claiming all-language parity.
diff --git a/docs/superpowers/plans/2026-07-16-memory-recall-polyglot-phase-2.md b/docs/superpowers/plans/2026-07-16-memory-recall-polyglot-phase-2.md
new file mode 100644
index 00000000..d825dd4b
--- /dev/null
+++ b/docs/superpowers/plans/2026-07-16-memory-recall-polyglot-phase-2.md
@@ -0,0 +1,335 @@
+# Memory Recall Polyglot Phase 2 Implementation Plan
+
+> Status: approved under the active polyglot leadership goal. Routine local implementation, tests, evidence generation, and commits are pre-approved. Push, merge, publish, deploy, and public release remain outside this plan.
+
+**Goal:** Bring all fourteen Tier 1 languages through the same source-backed fixture and pinned-repository gates, while keeping the JS engine as the public default until native accuracy, package, and later distribution gates pass.
+
+**Architecture:** Extend the existing Rust Tree-sitter ingest pipeline and provider-neutral graph. Language-specific extraction creates normalized declarations and unresolved relationships first; deterministic repository-level resolvers then produce imports, heritage, typed calls, routes, and confidence evidence. Benchmark truth stays separate from engine output. Node remains the CLI/control plane and the existing JS/TS engine remains the default throughout Phase 2.
+
+**Quality rule:** Loading a grammar is not support. A capability can move from `unmeasured` only when deterministic fixtures and sampled truth from all three pinned repositories for that language exist. `full` additionally requires every applicable published floor. Missing or non-applicable behavior is explicit; it is never inferred from graph density.
+
+## Non-negotiable boundaries
+
+- The public CLI and all MCP tools remain on `engine=js` by default.
+- Native graph access remains explicit, read-only, local, bounded, and preview-only.
+- No source body, absolute checkout path, environment value, command output, or credential enters a committed evidence report.
+- Canonical memory is never changed by indexing, benchmarking, or compatibility work.
+- Relationship evidence names a syntax/config locator and confidence class.
+- Unresolved calls/imports/heritage remain unresolved records or diagnostics; they are not converted to guessed exact edges.
+- Each real-repository case is pinned to the Phase 0 corpus commit and names its bounded scope.
+- Framework claims require syntax-backed or configuration-backed handlers and routes.
+- Capability matrices report `full`, `partial`, `parse-only`, or `unsupported` independently from the benchmark state `unmeasured`, `does-not-meet-floor`, or `meets-floor`.
+- No competitor, parity, leadership, fourteen-language, or scale claim changes in Phase 2.
+- Every task is an additive commit and leaves the previous public runtime available.
+
+## Published floors
+
+- symbol recall: at least 0.95;
+- resolved-call precision: at least 0.90;
+- duplicate canonical symbols: 0;
+- deterministic structural fingerprints: required;
+- malformed-file repository failures: 0;
+- explicit partial and unsupported diagnostics: required;
+- real-repository evidence: required.
+
+Recall and precision require reviewed truth records. Compatibility against the Node graph is diagnostic only and cannot satisfy an accuracy floor.
+
+## Batch order
+
+| Batch | Languages | Required resolution focus |
+| --- | --- | --- |
+| A | JavaScript, TypeScript | relative/package imports, CommonJS, exports/re-exports, typed receivers, route handlers, native-vs-current regression |
+| B | Python, Go, Rust | modules/crates/packages, receiver resolution, traits/interfaces, Flask/FastAPI/Django, net/http/Gin/Echo/Chi, Axum/Actix/Rocket |
+| C | Java, Kotlin, C# | packages/namespaces, overload-safe receivers, heritage, annotations, Spring/Ktor/ASP.NET routes |
+| D | C, C++, Swift, Dart | includes/modules, declarations and receivers, protocols/heritage, Vapor/Shelf/Flutter entry points, build-target evidence |
+| E | PHP, Ruby | namespace/package conventions, traits/mixins, dynamic-dispatch confidence, Laravel/Symfony/Rails structure |
+
+## Task 1: Add reviewable language truth contracts and a deterministic evaluator
+
+**Files:**
+
+- Create: `packages/protocol/schemas/code-intelligence-language-truth.schema.json`
+- Create: `packages/protocol/schemas/code-intelligence-language-report.schema.json`
+- Create: `packages/protocol/src/code-intelligence-evaluation.mjs`
+- Modify: `packages/protocol/src/index.mjs`
+- Modify: `packages/protocol/README.md`
+- Create: `examples/protocol/code-intelligence-language-truth.json`
+- Create: `examples/protocol/code-intelligence-language-report.json`
+- Create: invalid compatibility fixtures for raw bodies, absolute paths, duplicate truth IDs, and unsupported full claims
+- Modify: `examples/protocol/compatibility/fixtures.json`
+- Create: `tests/code-intelligence-language-evaluation.test.mjs`
+- Create: `evals/code-intelligence/truth/README.md`
+
+- [x] **Step 1: Write failing protocol and evaluator tests**
+
+Require closed schemas for a fixture or real-repository truth manifest and its sanitized result. Truth items identify language, capability, repository ref or fixture ref, locator, stable semantic key, expected presence/absence, relationship resolution, and review provenance. They never contain source text. Reject absolute paths, repository escapes, duplicate IDs/semantic keys, raw bodies, missing locators, and `full` claims without fixture plus real-repository evidence.
+
+- [x] **Step 2: Implement deterministic metric evaluation**
+
+Evaluate declaration recall, relationship recall, resolved-call precision, duplicate canonical symbols, parse failures, deterministic fingerprints, and explicit partial states. Separate applicable, non-applicable, unsupported, and unmeasured cells. Produce per-case, per-language, and per-capability results with numerator/denominator counts so no percentage can hide a zero-sized sample.
+
+- [x] **Step 3: Add evidence review rules**
+
+Document how truth records are selected and reviewed: all fixture facts, plus stable sampled declarations/imports/heritage/calls/routes from each pinned repository. Record exact commit and bounded scope. A generator may propose samples, but a checked-in truth record requires source-locator review and must not be generated from the engine being evaluated.
+
+- [x] **Step 4: Verify and commit the evaluation foundation**
+
+Run:
+
+```bash
+node --test tests/code-intelligence-language-evaluation.test.mjs tests/code-intelligence-contract.test.mjs
+npm run protocol:validate
+npm run check
+git diff --check
+```
+
+Commit: `feat: add polyglot truth evaluation contracts`
+
+## Task 2: Close Batch A JS/TS native gaps before using it as the resolver reference
+
+**Files:**
+
+- Modify: `rust/oaf-ingest/src/lib.rs`
+- Modify: `rust/oaf/src/code_intelligence.rs`
+- Create: `evals/code-intelligence/truth/fixtures/javascript.json`
+- Create: `evals/code-intelligence/truth/fixtures/typescript.json`
+- Create: `evals/code-intelligence/truth/repositories/javascript/*.json`
+- Create: `evals/code-intelligence/truth/repositories/typescript/*.json`
+- Create: `scripts/code-intelligence-batch-a.mjs`
+- Create: `evals/code-intelligence/results/phase2-batch-a.json`
+- Modify: `tests/native-code-intelligence-provider.test.mjs`
+- Add focused Rust tests in `rust/oaf-ingest/src/lib.rs`
+
+- [x] **Step 1: Turn Phase 1 gaps into failing fixtures**
+
+Cover ESM relative imports, package imports, aliases, CommonJS `require`, exports and re-exports, nested functions, class/interface/type declarations, receiver methods, constructors, typed calls, unresolved calls, Node HTTP, Express, Fastify, NestJS, and Next.js server routes. Reproduce the Phase 1 TypeScript import mismatch and Express CommonJS import/call gaps.
+
+- [x] **Step 2: Normalize declarations and relationships**
+
+Give symbols repository-unique qualified names that include module and owner scope. Preserve function/method/type distinctions. Emit export/re-export, construct, inheritance/implementation, and unresolved-call facts with exact syntax spans. Prevent module targets from being emitted as functions.
+
+- [x] **Step 3: Add deterministic JS/TS resolution**
+
+Resolve extensions, index files, package entry points, TypeScript path aliases only when configuration evidence exists, CommonJS imports, receiver calls with explicit types/constructors, and route handlers. Confidence is `exact`, `typed`, `inferred`, or `unresolved`; lexical matches cannot become typed edges.
+
+- [x] **Step 4: Run all six pinned JS/TS repositories**
+
+Use the three TypeScript and three JavaScript corpus commits. Record bounded scopes, graph fingerprints, truth counts, recall/precision, duplicates, parse failures, time, RSS, and disk-neutral read behavior. If a floor fails, keep the matrix partial/unmeasured or `does-not-meet-floor` and preserve the failing evidence.
+
+- [x] **Step 5: Verify and commit Batch A**
+
+Run focused Rust, provider, graph compatibility, fixture evaluation, real-repository evidence, packed-consumer, and default-engine tests.
+
+Commit: `feat: close native javascript typescript gaps`
+
+## Task 3: Complete Batch B Python, Go, and Rust
+
+**Files:**
+
+- Modify: `rust/oaf-ingest/src/lib.rs`
+- Modify: `rust/oaf/src/code_intelligence.rs`
+- Create: fixture truth for Python, Go, and Rust
+- Create: nine pinned-repository truth manifests
+- Create: `scripts/code-intelligence-batch-b.mjs`
+- Create: `evals/code-intelligence/results/phase2-batch-b.json`
+- Add focused Rust and Node contract tests
+
+- [x] **Step 1: Add failing language fixtures**
+
+Python: packages/modules, relative imports, aliases, classes, inheritance, decorators, type annotations, constructor receiver calls, Flask/FastAPI/Django routes.
+
+Go: packages/modules, imports/aliases, functions, methods and receivers, structs/interfaces/embedding, constructor patterns, net/http/Gin/Echo/Chi routes.
+
+Rust: crates/modules/use paths, functions/impl methods, structs/enums/traits, trait implementations, typed receiver calls, Axum/Actix/Rocket routes.
+
+- [x] **Step 2: Implement package/module and heritage models**
+
+Extend manifest/config inputs for `pyproject.toml`, package markers, `go.mod`, Cargo workspaces/features, and language-specific module paths. Add `inherits`, `implements`, `extends`, `constructs`, and typed-call facts with evidence. Unsupported dynamic edges remain unresolved.
+
+- [x] **Step 3: Implement initial framework routes**
+
+Routes require syntax/config evidence for method, normalized path, handler, and owning module. String literals alone are candidates, not exact route edges.
+
+- [x] **Step 4: Run all nine pinned repositories and record exact truth capability cells**
+
+The public aggregate capability matrix remains unchanged until Task 7 can apply the worst-case rule across all fourteen Tier 1 languages.
+
+No language-level pass is allowed unless all three repositories and fixtures run deterministically. Capabilities that miss floors remain partial or `does-not-meet-floor` with the failure counts retained.
+
+- [x] **Step 5: Verify and commit Batch B**
+
+Commit: `feat: add python go rust intelligence batch`
+
+## Task 4: Complete Batch C Java, Kotlin, and C#
+
+**Files:**
+
+- Modify the Rust extractor/resolver and provider graph mapping
+- Add fixture truth for Java, Kotlin, and C#
+- Add nine pinned-repository truth manifests
+- Create: `scripts/code-intelligence-batch-c.mjs`
+- Create: `evals/code-intelligence/results/phase2-batch-c.json`
+- Add focused Rust and Node tests
+
+- [x] **Step 1: Add failing JVM/.NET fixtures**
+
+Cover package/namespace declarations, imports/using aliases, classes/interfaces/records/data classes, inheritance and implementation, constructors, overload-safe call identities, annotations/attributes, extension methods where resolvable, Spring MVC/Boot, Ktor, ASP.NET controllers, and minimal APIs.
+
+- [x] **Step 2: Add package, namespace, heritage, and typed receiver resolution**
+
+Qualified identities include package/namespace, owner, member, and stable signature discriminator when overloads exist. Resolve only evidence-backed receiver types. Record ambiguity instead of choosing an arbitrary overload.
+
+- [x] **Step 3: Add framework route extraction**
+
+Combine annotation/attribute and configuration evidence. Normalize methods and paths without copying request bodies or controller source.
+
+- [x] **Step 4: Run all nine pinned repositories and update exact matrix cells**
+
+Record floors and failures independently for Java, Kotlin, and C#.
+
+- [x] **Step 5: Verify and commit Batch C**
+
+Commit: `feat: add jvm dotnet intelligence batch`
+
+## Task 5: Complete Batch D C, C++, Swift, and Dart
+
+**Files:**
+
+- Modify the Rust extractor/resolver and provider graph mapping
+- Add fixture truth for C, C++, Swift, and Dart
+- Add twelve pinned-repository truth manifests
+- Create: `scripts/code-intelligence-batch-d.mjs`
+- Create: `evals/code-intelligence/results/phase2-batch-d.json`
+- Add focused Rust and Node tests
+
+- [x] **Step 1: Add failing native/mobile fixtures**
+
+C/C++: translation units, headers/includes, macros only where structurally safe, functions, structs/classes, namespaces, methods, constructors, inheritance, and CMake/build entry targets without invented HTTP routes.
+
+Swift: modules/imports, functions/types/protocols/extensions, protocol conformance, receiver calls, Vapor routes.
+
+Dart: libraries/imports/exports/parts, functions/classes/mixins/extensions, receiver calls, Shelf routes, Flutter application entry points.
+
+- [x] **Step 2: Implement includes/modules, protocols, and bounded ambiguity**
+
+Header relationships remain include edges until evidence resolves ownership. C/C++ overload ambiguity is explicit. Swift protocols/extensions and Dart mixins/parts receive distinct normalized relationships.
+
+- [x] **Step 3: Add supported framework and entry-point detection**
+
+Vapor and Shelf routes require syntax-backed registrations. Flutter, C, and C++ expose application/build entry points and dependencies, not fabricated web framework support.
+
+- [x] **Step 4: Run all twelve pinned repositories and update exact matrix cells**
+
+- [x] **Step 5: Verify and commit Batch D**
+
+Commit: `feat: add native mobile intelligence batch`
+
+## Task 6: Complete Batch E PHP and Ruby
+
+**Files:**
+
+- Modify the Rust extractor/resolver and provider graph mapping
+- Add fixture truth for PHP and Ruby
+- Add six pinned-repository truth manifests
+- Create: `scripts/code-intelligence-batch-e.mjs`
+- Create: `evals/code-intelligence/results/phase2-batch-e.json`
+- Add focused Rust and Node tests
+
+- [x] **Step 1: Add failing dynamic-language fixtures**
+
+PHP: namespaces, `use` aliases, includes, functions/classes/interfaces/traits, inheritance/implementation, typed receivers, Laravel and Symfony routes.
+
+Ruby: require/load paths, modules/classes/mixins, methods, inheritance, receiver calls with bounded confidence, Rails routes/controllers.
+
+- [x] **Step 2: Implement namespace/convention resolution and dynamic confidence**
+
+Use explicit types, constructors, imports, owners, and framework configuration before convention. Dynamic dispatch without evidence remains unresolved or inferred; it cannot count toward resolved-call precision.
+
+- [x] **Step 3: Add Laravel, Symfony, and Rails structure**
+
+Framework evidence joins route configuration/DSL registration to a handler locator. Do not mark controller-name string matches as exact handlers without configuration or syntax evidence.
+
+- [x] **Step 4: Run all six pinned repositories and update exact matrix cells**
+
+- [x] **Step 5: Verify and commit Batch E**
+
+Commit: `feat: add php ruby intelligence batch`
+
+## Task 7: Run the complete 42-repository Tier 1 audit
+
+**Files:**
+
+- Create: `scripts/code-intelligence-phase2-tier1.mjs`
+- Create: `evals/code-intelligence/results/phase2-tier1-summary.json`
+- Modify: `evals/code-intelligence/capability-matrix.v1.json`
+- Modify: `docs/usage/code-intelligence-support.md`
+- Modify: `docs/usage/support-matrix.md`
+- Modify: `docs/benchmarks.md`
+- Modify: `PROJECT_STATUS.json`
+- Modify: `CHANGELOG.md`
+- Modify generated release evidence
+
+- [x] **Step 1: Aggregate without averaging away failures**
+
+The summary lists every fixture and repository result. Per-language status uses the worst applicable required capability, not a macro average. A single nondeterministic case, repository failure, duplicate canonical symbol, or missing real-repository truth blocks `meets-floor` for that capability.
+
+- [x] **Step 2: Verify safety and bounded resource behavior**
+
+Record platform, engine/protocol version, exact commits/scopes, bounds, wall time, peak RSS where measurable, response bytes, graph counts, and write/network/model/memory safeguards. Reports contain hashes and counts, not raw output or paths.
+
+- [x] **Step 3: Update public support language from the evidence only**
+
+Name exact per-language values. Do not describe all fourteen as supported unless every required row passes. Keep npm binary availability, default-engine, MCP, web, multi-repo, scale, semantic search, communities, and process limitations explicit.
+
+- [x] **Step 4: Verify and commit the Tier 1 audit**
+
+Commit: `test: record tier one language evidence`
+
+## Task 8: Close Phase 2 without promoting the runtime default
+
+**Files:**
+
+- Modify: `HANDOFF_VERIFICATION.json`
+- Modify: `REPOSITORY_MANIFEST.json`
+- Modify: generated release evidence
+- Modify: this plan
+
+- [x] **Step 1: Run every batch check plus the complete repository gate**
+
+```bash
+npm run check
+npm run protocol:validate
+npm test
+npm run eval
+cargo fmt --manifest-path rust/Cargo.toml --all -- --check
+cargo test --manifest-path rust/Cargo.toml
+node scripts/native-code-intelligence-consumer-smoke.mjs
+node scripts/code-intelligence-phase1-compatibility.mjs --check
+node scripts/code-intelligence-batch-a.mjs --check
+node scripts/code-intelligence-batch-b.mjs --check
+node scripts/code-intelligence-batch-c.mjs --check
+node scripts/code-intelligence-batch-d.mjs --check
+node scripts/code-intelligence-batch-e.mjs --check
+node scripts/code-intelligence-phase2-tier1.mjs --check
+npm run verify:handoff
+npm run release:readiness:check
+git diff --check
+```
+
+- [x] **Step 2: Verify claims and defaults**
+
+Assert that default graph and all MCP reads still select JS, native remains preview-only, npm bundles no native binary, no non-evidenced language cell says `meets-floor`, competitor status remains unmeasured, and no parity/leadership claim exists.
+
+- [x] **Step 3: Commit and verify a clean Phase 2 boundary**
+
+Commit: `docs: close polyglot phase two`
+
+Run: `git status --short --branch && git log -16 --oneline`
+
+## Rollback
+
+Each batch is additive and native remains opt-in. Revert the failing batch commit and its evidence/matrix changes. The public JS graph and MCP behavior remain available. Derived benchmark checkouts live in temporary directories and are deleted; no canonical memory or persistent public index is changed.
+
+## Phase 3 handoff
+
+Phase 3 begins only after Phase 2 has a truthful per-language matrix and a clean full gate. It moves the proven normalized graph into a new persistent SQLite index with incremental generations, dependency invalidation, watcher bounds, migrations, and corruption recovery. Phase 3 does not revisit failed language claims by relabeling them; unresolved Phase 2 gaps remain explicit work.
diff --git a/docs/superpowers/plans/2026-07-16-memory-recall-polyglot-phase-3.md b/docs/superpowers/plans/2026-07-16-memory-recall-polyglot-phase-3.md
new file mode 100644
index 00000000..515f443d
--- /dev/null
+++ b/docs/superpowers/plans/2026-07-16-memory-recall-polyglot-phase-3.md
@@ -0,0 +1,294 @@
+# Memory Recall Polyglot Phase 3 Implementation Plan
+
+> Status: approved under the active polyglot leadership goal. Routine local implementation, tests, evidence generation, and commits are pre-approved. Push, merge, publish, deploy, and public release remain outside this plan.
+
+**Goal:** Replace the bounded JS/TS JSON runtime snapshot with a separate, versioned SQLite source index owned by the Rust engine. The index must persist all fourteen Tier 1 language graphs, refresh only affected scope, survive interruption and corruption, and serve bounded read-only queries without changing the public default before distribution gates pass.
+
+**Architecture:** Add a dedicated `oaf-index` Rust crate. It owns source-index migrations, generation transactions, file manifests, normalized nodes, edges, unresolved relationships, evidence spans, coverage, and health records. `oaf-store` remains canonical governed memory and never imports source-index tables. The Rust code-intelligence subprocess gains closed index lifecycle and query operations; Node remains the bounded CLI/MCP/API facade. The existing JSON index stays available as a compatibility export during migration, but it is not the production storage model.
+
+**Quality rule:** A no-change refresh writes zero database pages through the application path. A changed refresh reparses only added or content-changed files and re-resolves only their dependency closure. The previous committed generation remains queryable until the next generation commits. Corruption or schema mismatch never triggers silent deletion.
+
+## Non-negotiable boundaries
+
+- Canonical governed memory and derived source intelligence use separate SQLite files and schemas.
+- Default CLI graph reads and all MCP reads remain on the current JS compatibility engine during Phase 3.
+- Native index mutation requires an explicit local writer command; MCP, API reads, and web reads cannot create, migrate, refresh, repair, or delete an index.
+- The npm package continues to bundle no native executable during Phase 3.
+- Index records contain hashes, normalized locators, evidence spans, and bounded metadata, never raw source bodies, absolute checkout paths, credentials, environment values, or command output.
+- File change detection uses content hashes. Size and modification time may avoid unnecessary hashing only when backed by a verified manifest state; they are not correctness evidence by themselves.
+- Resolved records carry evidence and confidence. Unresolved relationships remain first-class records.
+- Generation commits are atomic. Failed, cancelled, or killed refreshes cannot expose half-written graphs.
+- Watch mode is opt-in, debounced, bounded, cancellable, and coalesces storms. It schedules the same explicit refresh pipeline and never changes memory.
+- Doctor reports invalid, stale, migration-required, interrupted, and corrupt states. Repair is a plan until a separate explicit rebuild command is confirmed.
+- Query responses are bounded and paginated. Full graph materialization remains a debug/export operation with fixed ceilings.
+- No parity, leadership, multi-repository, or million-node claim changes in Phase 3.
+
+## Storage layout
+
+Default index path: `.local/source-index/index.v1.sqlite`
+
+Required tables:
+
+- `index_metadata`: schema version, engine version, repository identity, ignore fingerprint, active generation, created and updated timestamps;
+- `index_migrations`: applied migration ID and checksum;
+- `index_generations`: generation state, parent, reason, timestamps, counts, and structural fingerprint;
+- `index_files`: generation, normalized locator, content hash, size, language, parse state, diagnostic count, and ownership identity;
+- `index_nodes`: generation, canonical ID, kind, language kind, qualified name, locator, evidence span, content hash, and visibility;
+- `index_edges`: generation, canonical ID, source, target, kind, locator, evidence span, resolver/version, confidence, resolution class, and stale state;
+- `index_unresolved`: generation, source, relationship kind, target text hash, evidence span, resolver reason, and confidence class;
+- `index_coverage`: generation, language, capability, represented/omitted/failed counts, and reason code;
+- `index_health`: integrity result, interrupted generation evidence, last successful refresh, and repair recommendation;
+- lexical search tables only after deterministic exact/path lookup is proven.
+
+Historical generation retention is bounded. The active generation and one previous valid generation remain available by default; older generations are removed only inside a successful writer transaction.
+
+## Task 1: Lock the Phase 3 storage and protocol contract
+
+**Files:**
+
+- Create: `docs/adr/0024-rust-sqlite-source-index.md`
+- Create: `packages/protocol/schemas/code-intelligence-index-request.schema.json`
+- Create: `packages/protocol/schemas/code-intelligence-index-response.schema.json`
+- Create: valid and invalid protocol examples
+- Modify: `examples/protocol/compatibility/fixtures.json`
+- Modify: `packages/protocol/src/index.mjs`
+- Modify: `packages/protocol/README.md`
+- Create: `tests/code-intelligence-index-contract.test.mjs`
+
+- [x] **Step 1: Write failing closed-schema tests**
+
+Cover `index.build`, `index.refresh`, `index.status`, `index.doctor`, and bounded `index.query`. Reject absolute paths, source bodies, SQL text, unknown fields, unbounded limits, writer flags on read operations, and repair/delete authority in doctor requests.
+
+- [x] **Step 2: Define safe lifecycle and query responses**
+
+Responses expose repository identity hash, index locator, schema/engine versions, active generation, freshness, health, counts, timing, page cursor, bounded results, diagnostics, and safeguard counters. They never expose the local database path or raw SQLite errors.
+
+- [x] **Step 3: Record the storage ADR and rollback boundary**
+
+Document why source intelligence is not stored in `oaf-store`, why SQLite is owned by Rust, how the JSON compatibility index is retired later, and how a failed Phase 3 commit leaves JS public behavior intact.
+
+- [x] **Step 4: Verify and commit**
+
+Run focused protocol tests, full protocol validation, repository checks, and diff checks.
+
+Commit: `feat: define sqlite source index contract`
+
+## Task 2: Add the isolated Rust SQLite index and migrations
+
+**Files:**
+
+- Create: `rust/oaf-index/Cargo.toml`
+- Create: `rust/oaf-index/src/lib.rs`
+- Modify: `rust/Cargo.toml`
+- Modify: `rust/Cargo.lock`
+- Add focused crate tests
+
+- [x] **Step 1: Write failing creation, identity, and migration tests**
+
+Prove secure parent/file permissions where supported, WAL and foreign-key settings, workspace identity binding, migration checksums, current/previous schema handling, and refusal of unknown newer schemas.
+
+- [x] **Step 2: Implement the schema and transactional migration runner**
+
+Use bundled `rusqlite`. Apply ordered checksum-pinned migrations inside an exclusive transaction. Opening read-only never migrates or creates files.
+
+- [x] **Step 3: Implement health and integrity inspection**
+
+Return stable health codes for absent, ready, stale, migration-required, interrupted, corrupt, wrong-repository, and unsupported-newer-schema states. Sanitize SQLite details.
+
+- [x] **Step 4: Prove interruption and corruption behavior**
+
+Kill a writer before commit, corrupt a copy, and inject a partial generation. The active generation must remain valid or doctor must fail closed without deleting anything.
+
+Commit: `feat: add isolated source index store`
+
+## Task 3: Persist and query complete normalized generations
+
+**Files:**
+
+- Modify: `rust/oaf-index/src/lib.rs`
+- Modify: `rust/oaf/src/code_intelligence.rs`
+- Modify: `rust/oaf/Cargo.toml`
+- Add Rust integration tests
+
+- [x] **Step 1: Write round-trip tests for every normalized record class**
+
+Persist repository, file, declaration, node, resolved edge, unresolved relationship, evidence, coverage, diagnostic, and generation metadata. Reloading must reproduce the same structural fingerprint without source bodies.
+
+- [x] **Step 2: Implement atomic generation commits**
+
+Write a staging generation, validate counts/references/duplicates, mark it committed, then switch `active_generation` in the same transaction. Keep one previous committed generation.
+
+- [x] **Step 3: Add bounded read-only queries**
+
+Implement status, exact symbol/path lookup, neighborhood, dependency direction, trace, impact seed, route listing, and bounded graph summary. Enforce stable ordering, cursor validation, row/time/output limits, and read-only SQLite flags.
+
+- [x] **Step 4: Run all fourteen fixture graphs through SQLite**
+
+The stored/reloaded graph fingerprint and exact sampled truth must match the in-memory Phase 2 graph for every language fixture.
+
+Commit: `feat: persist normalized code intelligence generations`
+
+## Task 4: Add content-hash incremental refresh and dependency invalidation
+
+**Files:**
+
+- Modify: `rust/oaf-ingest/src/lib.rs`
+- Modify: `rust/oaf-index/src/lib.rs`
+- Modify: `rust/oaf/src/code_intelligence.rs`
+- Add mixed-language incremental fixtures and tests
+
+- [x] **Step 1: Write add/change/delete/rename/no-change tests**
+
+Cover same-size same-mtime content changes, file rename, directory rename, ignore-rule changes, branch-like replacement, malformed changed files, and deleted dependency targets.
+
+- [x] **Step 2: Build a deterministic invalidation closure**
+
+Start with changed file owners; include direct importers, callers with typed/exact targets, heritage dependents, re-exporters, route owners, and config/package dependents. Bound traversal and report omissions.
+
+- [x] **Step 3: Reparse and re-resolve only affected scope**
+
+Reuse unchanged file records. Remove deleted ownership records. Preserve repository-level partial coverage if one file fails. A no-change refresh returns the current generation and performs no writer transaction.
+
+- [x] **Step 4: Prove incremental equals clean rebuild**
+
+For mixed-language fixtures and selected pinned repositories, compare canonical nodes, edges, unresolved records, coverage, and structural fingerprint after incremental refresh versus a clean build.
+
+Commit: `feat: add dependency aware incremental indexing`
+
+## Task 5: Add bounded watch scheduling and concurrency control
+
+**Files:**
+
+- Create: `rust/oaf-index/src/watcher.rs`
+- Modify: `rust/oaf-index/src/lib.rs`
+- Modify: `rust/oaf/src/main.rs` during the Task 7 native lifecycle bridge
+- Add watcher/concurrency tests
+
+- [x] **Step 1: Write debounce, storm, cancellation, and clean-shutdown tests**
+
+Model editor temporary-file sequences, 10,000-event storms, overlapping refresh requests, rename pairs, directory replacement, watcher overflow, SIGINT, and killed workers.
+
+- [x] **Step 2: Implement one bounded coalescing queue per repository**
+
+Use a fixed queue and debounce window. Coalesce paths and fall back to a bounded metadata/hash discovery after overflow. Only one writer runs per repository; readers continue using the active generation.
+
+- [x] **Step 3: Expose watcher state without write authority**
+
+Status reports running/stopped/degraded, queued path count, overflow count, last convergence duration, and last safe reason code. MCP reads status only.
+
+- [x] **Step 4: Prove convergence**
+
+After every tested storm, the final active fingerprint must equal a clean rebuild and the queue must drain within the documented bound.
+
+Commit: `feat: add bounded source index watcher`
+
+## Task 6: Add doctor, migrations, and explicit repair planning
+
+**Files:**
+
+- Modify: Rust index/store and protocol adapters
+- Modify: Node CLI help and command routing during the Task 7 native lifecycle bridge
+- Add doctor/repair fixtures and tests
+
+- [x] **Step 1: Add failure fixtures**
+
+Cover corrupt header/pages, failed integrity check, missing tables, checksum mismatch, interrupted staging generation, wrong repository identity, stale engine version, and unsupported future schema.
+
+- [x] **Step 2: Implement read-only doctor**
+
+Doctor never creates or mutates the database. It emits a sanitized diagnosis, whether the last valid generation is readable, and an exact repair plan fingerprint.
+
+- [x] **Step 3: Implement explicit rebuild repair**
+
+Repair requires a prior doctor plan and matching confirmation. It renames the invalid database to a bounded local backup, builds a new database, verifies it, and only then offers backup cleanup as a separate action.
+
+- [x] **Step 4: Prove rollback and backup behavior**
+
+Failed repair restores the prior path; successful repair leaves a readable backup and current index. No memory database is touched.
+
+Commit: `feat: add source index diagnosis and repair`
+
+## Task 7: Bridge the native index through Node without promoting defaults
+
+**Files:**
+
+- Modify: engine request/response schemas and Rust stdio server
+- Modify: native provider and provider port
+- Modify: CLI graph index lifecycle
+- Modify: MCP structural tools to read an explicitly selected native index in preview tests only
+- Add packed-consumer and zero-write tests
+
+- [x] **Step 1: Add bounded provider lifecycle methods**
+
+Node sends closed lifecycle/query frames and enforces timeout, cancellation, stdout/stderr byte limits, workspace containment, protocol version, and safe errors.
+
+- [x] **Step 2: Add explicit preview CLI commands**
+
+Build, refresh, status, doctor, watch, and query require `--engine native-preview`; writer commands require explicit write/confirmation flags. Existing JS JSON index commands remain compatible.
+
+- [x] **Step 3: Prove twelve MCP tools are read-only**
+
+Run every structural MCP tool against a prebuilt native SQLite index. Database hashes/mtime and governed memory remain unchanged. MCP never falls back to building or refreshing.
+
+- [x] **Step 4: Prove packed-package behavior**
+
+The npm tarball contains protocols and wrappers but no binary. With an explicit verified local binary, restart/build/refresh/query work in an isolated repository. Without it, preview fails closed and JS stays default.
+
+Commit: `6ff1644 feat: bridge native source index lifecycle`
+
+## Task 8: Benchmark and close Phase 3
+
+**Files:**
+
+- Create: reproducible Phase 3 benchmark script and evidence report
+- Modify: capability/support docs, benchmarks, status, changelog, release evidence, handoff, and manifest
+- Modify: this plan
+
+- [x] **Step 1: Run migration, corruption, concurrency, and restart gates**
+
+Run focused Rust/Node suites plus full repository, protocol, evaluation, package, release, and handoff gates.
+
+- [x] **Step 2: Run bounded repository performance cases**
+
+Measure cold build, warm open, no-change refresh, one-file refresh, dependency-closure refresh, exact lookup, neighborhood, trace, impact seed, database size, RSS, and response bytes on fixtures and selected pinned repositories.
+
+- [x] **Step 3: Publish exact limits and failures**
+
+Name platform, commits/scopes, file/node/edge counts, generation counts, percentiles, queue bounds, omissions, and failure recovery. Keep million-node, multi-repository, parity, and leadership unmeasured.
+
+- [x] **Step 4: Close Phase 3 on a clean additive commit**
+
+Incremental refresh and the reproducible benchmark harness landed in
+`919d10e perf: bound native incremental refresh`. The closing evidence commit
+is recorded in repository history after this plan update.
+
+Commit: `docs: close polyglot phase three`
+
+## Full Phase 3 gate
+
+```bash
+npm run check
+npm run protocol:validate
+npm test
+npm run eval
+cargo fmt --manifest-path rust/Cargo.toml --all -- --check
+cargo test --manifest-path rust/Cargo.toml
+cargo clippy -p oaf-index --all-targets --no-deps -- -D warnings
+cargo clippy -p oaf-ingest --all-targets --no-deps -- -D warnings
+node scripts/native-code-intelligence-consumer-smoke.mjs
+node scripts/code-intelligence-phase2-tier1.mjs --check
+node scripts/code-intelligence-phase3-index.mjs --check
+npm run verify:handoff
+npm run release:readiness:check
+git diff --check
+```
+
+Workspace-wide Clippy debt outside the changed crates remains separately reported until fixed; no Phase 3 code may add new warnings.
+
+## Rollback
+
+Phase 3 remains additive and preview-only. Revert the failing task commit. The current JS graph, JSON compatibility index, MCP behavior, governed memory, and packed npm path remain available. Never delete or overwrite a corrupt index during rollback; preserve it for doctor evidence and rebuild only through the explicit repair flow.
+
+## Phase 4 handoff
+
+Phase 4 begins only after SQLite generations, incremental invalidation, watch convergence, migrations, corruption recovery, packed preview behavior, and bounded query performance are proven. It builds hybrid search, communities, execution processes, richer routes/impact, and constrained graph-query operations on the persistent query layer rather than loading the full graph into Node.
diff --git a/docs/superpowers/plans/2026-07-16-memory-recall-task-first-workbench.md b/docs/superpowers/plans/2026-07-16-memory-recall-task-first-workbench.md
new file mode 100644
index 00000000..e845d190
--- /dev/null
+++ b/docs/superpowers/plans/2026-07-16-memory-recall-task-first-workbench.md
@@ -0,0 +1,66 @@
+# Task-First Workbench Implementation Plan
+
+> Execute with test-driven development. Preserve the existing visual system and verify every primary route in the in-app browser.
+
+**Goal:** Make the workbench immediately understandable, make Map truthful and readable, and remove misleading or legacy UI.
+
+**Architecture:** Keep the existing browser shell, orientation model/view, source-map view, and graph viewport. Add small pure view-model helpers where behavior needs unit coverage. No new frontend framework or design dependency.
+
+## Task 1: Task-oriented navigation and first screen
+
+**Files:** `apps/web/shell-model.js`, `apps/web/app.js`, `apps/web/orientation-view.js`, `tests/web-shell.test.mjs`, `tests/web-orientation.test.mjs`
+
+1. Change tests to require `Start`, `Explore code`, `Review memory`, `Prepare handoff`, and `Settings` in desktop navigation, with the first four on mobile.
+2. Add tests that Overview exposes direct actions for exploring code, reviewing memory, and preparing a handoff.
+3. Run the focused tests and observe the expected failures.
+4. Update navigation labels and concise route descriptions without changing stable paths.
+5. Simplify Overview copy and actions around the three developer jobs.
+6. Run focused tests to green.
+
+## Task 2: Default Map graph and query semantics
+
+**Files:** `apps/web/source-map-view.js`, `apps/web/app.js`, `apps/web/graph-viewport.js`, `tests/web-source-map.test.mjs`, `tests/web-shell.test.mjs`
+
+1. Add failing tests that empty-query output includes a repository architecture canvas and group outline.
+2. Add failing tests that the primary submit action is `Search code`, while `Refresh scan` is separate.
+3. Implement a default architecture graph derived from repository groups and their bounded relationships.
+4. Keep focused query/change/group behavior and stable URL state.
+5. Run the focused tests to green.
+
+## Task 3: Progressive labels and legible outline
+
+**Files:** `apps/web/graph-viewport.js`, `apps/web/source-map-view.js`, `apps/web/styles.css`, `tests/web-source-map.test.mjs`
+
+1. Add failing pure tests for a bounded visible-label policy: selected node, hovered node, immediate neighbors, then a small high-value budget.
+2. Add failing markup/style tests for stacked outline copy, `min-width:0`, and controlled locator overflow.
+3. Replace the `nodes.length <= 60` all-label rule with the tested visibility policy.
+4. Render outline rows with dedicated label and locator elements and fix grid sizing.
+5. Run focused tests to green.
+
+## Task 4: Truthful Memory metrics
+
+**Files:** `apps/web/app.js`, `tests/web-shell.test.mjs`
+
+1. Add failing tests for missing or zero baseline returning `Not measured`.
+2. Add model state that distinguishes measured reduction, measured overhead, no reduction, and unmeasured.
+3. Update the Memory header and disclosure copy to explain unmeasured state.
+4. Run focused tests to green.
+
+## Task 5: Real Settings and concise Handoffs
+
+**Files:** `apps/web/app.js`, `apps/web/styles.css`, `tests/web-shell.test.mjs`
+
+1. Add failing tests requiring a Settings H1, local storage/scan/privacy sections, and no token swatch gallery.
+2. Add failing tests requiring Handoffs to lead with one recommended flow and user-facing `recall` commands.
+3. Replace Settings with actual local runtime information already available to the shell.
+4. Reorder Handoffs so build, pin, verify, and receive are the primary path; move reference detail into disclosure.
+5. Convert public command strings from `npm run oaf --` to `recall`, retaining internal test/dev commands only where explicitly labeled.
+6. Run focused tests to green.
+
+## Task 6: Browser verification
+
+1. Run `node --test tests/web-orientation.test.mjs tests/web-source-map.test.mjs tests/web-memory-graph.test.mjs tests/web-shell.test.mjs`.
+2. Open Overview, Map default, Map focused, Memory, Handoffs, and Settings in the user's in-app browser.
+3. Click every primary action, verify URL/state synchronization, inspect console errors, and capture desktop plus narrow screenshots.
+4. Compare the focused Map screenshot against the supplied overlap screenshot and fix remaining collisions.
+5. Re-run focused tests after visual fixes.
diff --git a/docs/superpowers/specs/2026-07-15-memory-recall-orientation-workbench-design.md b/docs/superpowers/specs/2026-07-15-memory-recall-orientation-workbench-design.md
new file mode 100644
index 00000000..6aa64aab
--- /dev/null
+++ b/docs/superpowers/specs/2026-07-15-memory-recall-orientation-workbench-design.md
@@ -0,0 +1,420 @@
+# Memory Recall Orientation Workbench and Large-Repository Graph Design
+
+Date: 2026-07-15
+
+Status: Approved for implementation
+
+## Decision
+
+Memory Recall opens as an orientation-first repository workbench.
+
+The first screen must tell a developer how the repository is organized, where to start, what changed, and whether the available context is trustworthy. It must not open with a raw node graph, a wall of status cards, or a long operational report.
+
+This specification supersedes the `Overview screen`, `Map screen`, and graph-presentation sections of `2026-07-11-memory-recall-product-ui-redesign.md`. It retains that specification's five-destination shell, setup flow, visual system, Memory review queue, Handoffs flow, local-only boundaries, and accessibility requirements.
+
+The work has two required slices:
+
+1. Make the source graph return truthful, bounded results on large repositories.
+2. Replace the rejected Overview, Map, and memory-graph presentation with the orientation-first experience defined here.
+
+Neither slice is complete without the other. A polished interface over an invalid graph is misleading. A valid graph hidden behind the current interface does not deliver the approved first impression.
+
+## Evidence behind the decision
+
+A current local audit used a 1,627-file monorepo with 572 directly supported JavaScript and TypeScript files. The source scan reached its 1,000-file cap, created 17,018 nodes and 89,012 edges, then failed strict validation because the public graph schema permits 50,000 edges. A legitimate repository-relative path containing `/users/` also failed a display-label safety rule intended to reject absolute user paths.
+
+The failed preview returned zero files, zero symbols, and zero relations. The web interface announced that the preview was ready instead of showing the validation failure. The submitted query was replaced by the default query. The initial Recall Map request took 13.6 seconds and a second Map request took 11.4 seconds because the graph was rebuilt.
+
+The same audit found that discovery spent work on nested worktrees, agent tooling, virtual environments, and generated output. It reported more than 78,000 unsupported files before reaching the supported-file cap.
+
+Competitor products informed the interaction direction but are not acceptance evidence:
+
+- [codebase-mcp](https://pypi.org/project/codebase-mcp/) starts with one bounded orientation response containing project status, important files, decisions, recent notes, and index freshness.
+- [codebase-memory-mcp](https://github.com/DeusData/codebase-memory-mcp) exposes a compact architecture overview before its optional graph UI.
+- [GitNexus](https://github.com/nxpatterns/gitnexus) precomputes clusters, flows, and impact instead of asking the client to interpret a raw graph.
+- [Graphify](https://github.com/Graphify-Labs/graphify) pairs its graph with a report, path queries, search, and evidence labels.
+
+Memory Recall keeps its own product boundary: reviewed temporal memory, source evidence, explicit lifecycle state, deterministic authority, and inspectable handoffs.
+
+## First-ten-seconds contract
+
+After a valid cached scan, a developer must be able to identify these facts without scrolling:
+
+1. Repository name, branch, scan freshness, and coverage state.
+2. The repository's main modules or services.
+3. Three recommended starting points with plain reasons.
+4. Whether local changes affect known modules or symbols.
+5. Whether governed memory and the current handoff are current, pending, stale, or unavailable.
+
+The screen may contain counts only when they support one of these decisions. It does not show vanity metrics.
+
+The work area starts immediately beneath the repository truth bar. It has no hero, tagline, descriptive banner, or product slogan.
+
+## Minimalist interface and copy contract
+
+The implementation follows `DESIGN.md` and the existing warm off-white, graphite, and restrained cobalt tokens. It refines the current product instead of introducing a new visual identity.
+
+Minimal means fewer elements and clearer hierarchy. It does not mean large empty sections. Within the workbench, related items use 8 to 16 px gaps, primary regions use only the 24 or 32 px spacing tokens, and no section receives a minimum height only to create visual weight.
+
+The interface uses:
+
+- native system sans for interface text and native monospace only for code, paths, hashes, commands, and identifiers;
+- flat surfaces, thin rules, aligned rows, and compact disclosures;
+- 6 px controls and 8 px bounded panels;
+- restrained cobalt only for focus, selection, links, and the primary action;
+- state-only motion that honors reduced motion.
+
+The touched screens do not use:
+
+- marketing heroes, oversized promotional headings, or decorative empty space;
+- gradients, glass effects, neon, glow, ambient animation, or decorative background art;
+- heavy shadows, floating panels, or a grid of equal statistic cards;
+- rounded containers nested inside rounded containers when a divider or row is sufficient;
+- decorative badges, icons, or charts that do not change a decision;
+- fake chat, typing indicators, sparkle marks, robot imagery, or other intelligence theater.
+
+Visible copy names an object, state, reason, or action. Headings use concrete nouns such as `Architecture`, `Start here`, `Current impact`, and `Trusted context`. Buttons use direct verbs such as `Open`, `Trace`, `Inspect`, and `Prepare handoff`.
+
+The words `AI`, `intelligent`, `smart`, `magical`, `autonomous`, `seamless`, `unlock`, `supercharge`, `revolutionary`, and `next-generation` do not appear as promotional UI copy. `AI`, model, and provider terms may appear only when identifying a real configured provider, model-backed operation, setting, or technical boundary.
+
+Implementation includes a bounded copy review across `apps/web`. Obvious slogan, hype, and intelligence-theater strings are replaced with factual object, state, reason, or action labels. This copy review does not redesign unrelated routes or change their behavior.
+
+## Information architecture
+
+The five existing destinations remain:
+
+- `Overview`: orientation-first repository workbench.
+- `Map`: focused structure, trace, search, and impact exploration.
+- `Memory`: proposal review, current facts, stale facts, history, and the governed memory graph.
+- `Handoffs`: prepare, verify, save, and consume context packages.
+- `Settings`: local storage, connections, clients, models, security, and advanced operations.
+
+`Overview` is not a second Map page. It presents a bounded architecture summary and the next useful action. `Map` owns detailed relationships and evidence. `Memory` owns fact lifecycle and temporal relationships.
+
+## Overview layout
+
+### Repository truth bar
+
+The existing compact repository bar remains at the top. It shows:
+
+- repository and branch;
+- scan state and age;
+- coverage as `complete`, `partial`, `stale`, `failed`, or `not scanned`;
+- local-only and external-write state;
+- the global search field.
+
+Coverage is a text state, not a colored dot without a label.
+
+### Orientation workspace
+
+Desktop uses a 70/30 split beneath the truth bar.
+
+The primary region contains the architecture map. The secondary region contains three compact sections: `Start here`, `Current impact`, and `Trusted context`. These sections use dividers and aligned rows, not three equal cards.
+
+The layout uses the current graphite and cobalt token system. It reduces vertical padding, avoids unused full-width sections and nested card grids, and keeps all primary information within the first desktop viewport at 1440 px.
+
+### Architecture map
+
+The first-screen map shows up to 12 deterministic repository groups. It shows at least 6 when the repository exposes 6 useful groups; smaller repositories show every useful group instead of inventing filler. Groups come from package boundaries, manifests, and stable repository-relative directory prefixes. No model names the groups.
+
+Each group shows:
+
+- name and repository-relative prefix;
+- supported file and symbol counts;
+- changed-file count;
+- up to two ranked entry points;
+- partial-coverage state when applicable.
+
+The map does not render every file or symbol. It uses a layered module-dependency layout, not a force-directed node cloud. Strong dependency direction runs left to right. Cyclic groups share a layer. Within a layer, groups sort by repository-relative prefix, so the same snapshot produces the same positions.
+
+Group nodes are keyboard-focusable semantic controls. A generated relationship layer may connect them visually, but the grouped outline is the canonical accessible representation. Selecting a group from either representation updates the secondary region and provides a direct link to its detailed Map view.
+
+Relationships on the Overview are limited to the 20 strongest inter-group imports or calls. Ties resolve by source and target repository-relative prefix. Omitted relationship counts remain visible. Dense relationship detail belongs in Map.
+
+The semantic fallback is a grouped outline containing the same groups, counts, entry points, and selected state. The outline is always present in the accessibility tree.
+
+### Start here
+
+`Start here` contains exactly three ranked entry points when three are available. Every item includes a reason such as:
+
+- package entry point;
+- application route;
+- executable command;
+- changed central module;
+- high-confidence inbound dependency hub.
+
+Generic test helpers, generated files, vendored code, and low-signal utility symbols cannot outrank source entry points.
+
+### Current impact
+
+With a clean working tree, the section says `No local changes detected` and does not reserve a large empty area.
+
+With changes, it shows:
+
+- changed files represented by the graph;
+- changed files omitted by language or scan bounds;
+- affected groups and top affected symbols;
+- the current impact depth;
+- a link to the detailed impact view.
+
+An unrepresented changed file is never silently treated as safe.
+
+### Trusted context
+
+This section combines only decision-relevant state:
+
+- active, pending, stale, and conflicting memory counts;
+- current handoff state and age;
+- source verification state;
+- measured context-delivery reduction when a current measurement exists.
+
+It does not claim provider billing-token savings. It links to Memory or Handoffs for detail.
+
+### Command bar
+
+One command bar accepts a file, symbol, concept, or path. It offers four deterministic intents:
+
+- explain a module;
+- trace a symbol;
+- inspect changed-file impact;
+- prepare a handoff.
+
+The bar routes to existing read-only operations. It is not a chat interface and does not require a model.
+
+## Map workspace
+
+Map is the detailed repository explorer. Desktop uses three regions:
+
+1. Compact query and scope controls.
+2. The relationship view or equivalent outline.
+3. A selected-item inspector with source evidence and coverage.
+
+The current form is simplified. `Query` is always visible. `Trace symbol`, `Changed locator`, depth, and limit move behind an `Advanced scope` disclosure unless the current deep link requires them.
+
+Submitting a query preserves the query in the URL and form through success, partial results, recoverable failure, reload, back, and forward navigation.
+
+The default Map result shows grouped modules and ranked entry points. File and symbol nodes appear progressively after the developer selects a group, searches, traces, or opens impact detail.
+
+The detailed graph supports pan, zoom, fit-to-selection, reset, and focus. It never attempts to render the full repository graph at once. The visible payload is bounded to a focused neighborhood, and omitted counts are explicit.
+
+Every canvas or visual graph state has an equivalent keyboard-reachable outline. Selecting an outline row and selecting its visual node produce the same inspector state.
+
+## Governed memory graph
+
+The memory graph remains a secondary view within Memory.
+
+When there are no governed nodes, the interface renders a compact empty state with the checked workspace, provider state, and next available action. It does not render metric cards or an empty 640 px canvas.
+
+When nodes exist, the graph:
+
+- fits visible nodes into the available viewport;
+- groups or filters before drawing dense histories;
+- distinguishes current and superseded relationships without relying only on color;
+- keeps search and history controls compact;
+- places the selected fact and provenance in a drawer or inspector;
+- provides a complete outline for keyboard and assistive-technology use.
+
+The graph is read-only. Proposal approval remains in the Memory review flow.
+
+## Large-repository graph foundation
+
+### Discovery
+
+Discovery applies exclusions before supported-file limits. Default exclusions include:
+
+- `.git` and nested Git worktrees;
+- `.worktrees`;
+- `node_modules`;
+- `.venv`, `venv`, and Python site packages;
+- build, coverage, test-result, cache, and generated-output directories;
+- agent-skill and assistant-configuration directories such as `.agents` and `.claude`.
+
+The scanner honors root and descendant `.gitignore` rules. A repository-local `.recallignore` may add product-specific exclusions using gitignore syntax. Explicit CLI includes may override non-security exclusions.
+
+Only supported source files count toward `maxFiles`. Unsupported extensions remain summarized by bounded counts and a bounded extension list. The scanner does not retain tens of thousands of unsupported locators for a public response.
+
+### Locator and label safety
+
+Repository-relative locators and display labels use separate validation rules.
+
+The locator validator rejects absolute paths, traversal, encoded traversal, and known temporary absolute-path prefixes. The display-label validator accepts ordinary repository directories named `users`, `private`, or similar when the complete value is repository-relative.
+
+No response exposes an absolute root, home directory, credential, source body, or remote URL.
+
+### Bounded graph construction
+
+Graph size limits must produce partial results, not an unavailable graph.
+
+The builder applies deterministic budgets during construction:
+
+- preserve file, contains, defined-in, import, export, and call structure first;
+- retain high-confidence references next;
+- omit low-signal references when the edge budget is reached;
+- report represented and omitted node and edge counts by kind;
+- mark coverage `partial` with stable reason codes.
+
+The public preview validates only the bounded public envelope. An internal graph exceeding a public preview limit cannot make the entire preview appear empty.
+
+### Reuse and invalidation
+
+Recall Map, Map search, trace, and impact requests share one explicit source-graph snapshot service per server. The service is injected into callers and does not use hidden global state.
+
+A snapshot is identified by the canonical root, graph-builder version, relevant ignore-rule hash, and a deterministic source fingerprint. The fingerprint covers supported repository-relative locators and content hashes.
+
+After the first build, the service watches included source directories and relevant ignore files. A relevant create, change, delete, rename, or watcher overflow marks the root dirty. Requests against a clean root reuse the snapshot without rediscovering or rehashing the repository. A dirty root rebuilds and produces a new fingerprint. Explicit refresh always marks the root dirty.
+
+When recursive watching is unavailable, the service may validate freshness with a bounded metadata manifest before reuse. The interface labels this fallback check as a scan. Map queries against a snapshot already accepted for the current request do not repeat that validation.
+
+The first release implementation may use an in-process cache. Persistent incremental indexes require a separate storage decision and are not implied by this specification.
+
+Concurrent requests for the same canonical root and dirty generation share one in-flight build. Cancellation or failure clears the in-flight entry without poisoning the last valid snapshot.
+
+## UI module boundaries
+
+The current `apps/web/app.js` is too large to remain the owner of routing, API state, view models, renderers, and graph layout.
+
+The redesign introduces these focused modules while preserving static ESM and zero runtime dependencies:
+
+- `apps/web/app.js`: boot, route coordination, and shared shell state.
+- `apps/web/api.js`: loopback API requests and bounded error mapping.
+- `apps/web/orientation-model.js`: pure Overview view-model construction and action selection.
+- `apps/web/orientation-view.js`: Overview rendering and interactions.
+- `apps/web/source-map-view.js`: Map rendering, URL state, outline parity, and inspector selection.
+- `apps/web/memory-graph-view.js`: governed-memory graph rendering and outline parity.
+- `apps/web/graph-layout-worker.js`: bounded layout work for detailed graphs.
+- `apps/web/ui-primitives.js`: shared state panels, diagnostics, formatting, and safe escaping.
+
+Modules communicate through explicit data objects and events. Route modules do not read storage, mutate canonical state, or own authentication.
+
+The refactor is limited to code touched by Overview, Map, memory graph, and shared primitives. Other routes remain in place until their existing ownership plan runs.
+
+## Loading, partial, empty, and failure states
+
+### Loading
+
+The repository truth bar and layout skeleton render immediately. The work area states which local operation is running. Repeated requests for one snapshot reuse the in-flight build.
+
+### Partial
+
+Partial coverage shows represented files, omitted files or relationships, reason codes translated into plain language, and the safest next action. Available results remain usable.
+
+### Empty
+
+`No supported source files` and `No governed memory yet` are distinct states. Neither produces a large blank canvas.
+
+### Failure
+
+A graph failure states:
+
+1. what failed;
+2. whether the last valid snapshot is still shown;
+3. whether local or canonical state changed;
+4. the safest retry;
+5. the correlation identifier or diagnostic command when available.
+
+The interface cannot announce `ready` after the graph facade returns an unavailable diagnostic. Form values survive recoverable failures.
+
+## Performance requirements
+
+Performance measurements are local implementation gates, not universal hardware claims.
+
+- An unchanged in-process snapshot must avoid a second full graph build.
+- Map queries against an unchanged snapshot must complete without walking the repository again.
+- The large local audit repository must return a non-empty success or truthful partial result. It must not return a false zero-result success.
+- Cold and cached timings must be recorded by the large-repository smoke script. The cached path must be at least 80% faster than the cold path on the same machine and fixture.
+- The browser must not run an unbounded quadratic layout loop on the main thread.
+- The first-screen architecture map renders at most 12 groups and the detailed graph renders a bounded focused neighborhood.
+- No frontend framework, graph library, model call, network service, or runtime dependency is added.
+
+## Security and side effects
+
+- Source scanning and all graph views remain read-only.
+- Canonical memory, policy, approvals, and handoffs do not change during orientation or graph exploration.
+- No new network access or external writes are enabled.
+- Ignore rules cannot broaden filesystem access outside the canonical repository root.
+- Retrieved source metadata cannot modify policy, permissions, or permanent memory.
+- The UI receives bounded locators and summaries, not raw source bodies.
+
+## Verification
+
+### Source graph tests
+
+Add focused coverage for:
+
+- nested worktrees, agent directories, virtual environments, and generated output excluded before file accounting;
+- `.gitignore` and `.recallignore` behavior;
+- more than 1,000 supported files returning truthful partial coverage;
+- a legitimate repository-relative `/users/` path remaining valid;
+- graph construction exceeding 50,000 candidate edges returning bounded partial output;
+- structural edges outranking low-signal references when budgets apply;
+- concurrent callers sharing one graph build;
+- cache reuse and fingerprint invalidation;
+- unavailable diagnostics never becoming a zero-result ready state.
+
+### UI tests
+
+Add focused coverage for:
+
+- the first-ten-seconds fields appearing in the first desktop viewport;
+- every useful group for fixtures with fewer than 6 groups, and 6 to 12 groups for larger populated fixtures;
+- exactly three `Start here` items when available;
+- no hero, slogan, promotional subtitle, intelligence-theater copy, or decorative metric strip on Overview;
+- the approved AI-language allowlist: real provider, model, setting, operation, or technical-boundary labels only;
+- no content-free minimum height or nonsemantic gap larger than the 32 px spacing token in the primary workbench;
+- clean, changed, partial, stale, empty, loading, and failure states;
+- query and scope state surviving submit, failure, reload, back, and forward;
+- the memory graph omitting its canvas when empty;
+- visual and outline selection producing the same inspector model;
+- keyboard access, visible focus, reduced motion, and screen-reader status;
+- no horizontal overflow at 320, 375, 414, 768, and 1440 px;
+- light and dark modes.
+
+### End-to-end verification
+
+Run:
+
+- focused source-graph, Recall Map, Control API, and web-shell tests;
+- protocol fixture validation;
+- a generated large-repository smoke fixture;
+- the current 1,627-file local audit repository as a non-CI validation target;
+- consumer smoke and consumer browser smoke;
+- full `npm run ci`;
+- release-readiness checks;
+- npm package smoke from a packed artifact installed into a fresh repository.
+
+The browser pass captures Overview, Map, populated memory graph, and empty memory graph at desktop and mobile widths. Every accepted screenshot is inspected before handoff.
+
+## Acceptance criteria
+
+The work is complete when:
+
+- a large repository returns useful bounded graph data or an explicit partial/failure state, never a false empty success;
+- repeated Overview and Map operations reuse the same unchanged source snapshot;
+- ordinary repository-relative directory names do not trigger absolute-path safety failures;
+- Overview presents repository truth, every useful group for small repositories or 6 to 12 groups for larger repositories, three starting points when available, current impact, and trusted context within the first desktop viewport;
+- the touched UI contains no slogan, capability hype, intelligence theater, decorative card wall, gradient, glow, or content-free oversized gap;
+- all visible copy in `apps/web` passes the factual object, state, reason, or action review, with model and provider terms retained only where technically necessary;
+- Map progressively reveals group, file, and symbol detail without rendering the full graph;
+- empty memory does not render an empty graph canvas or zero-value metric strip;
+- all visual graphs have equivalent keyboard-reachable outlines;
+- submitted queries and scope survive navigation and recoverable failures;
+- the touched frontend code is split into the explicit modules above without adding runtime dependencies;
+- security, local-only, proposal-review, and external-write boundaries remain unchanged;
+- all focused, protocol, browser, full CI, release-readiness, and packed-package checks pass;
+- before-and-after large-repository screenshots and cold/cached timing evidence are attached to the implementation handoff.
+
+## Non-goals
+
+This specification does not add:
+
+- a hosted service or cloud graph database;
+- embeddings, model reranking, or a chat interface;
+- automatic permanent memory;
+- write-capable MCP tools;
+- non-JavaScript/TypeScript graph coverage;
+- a frontend framework or graph visualization dependency;
+- persistent incremental graph storage;
+- redesigns of the Memory review queue, Handoffs workflow, Settings, or setup beyond shared-shell compatibility;
+- npm publication or GitHub merge as part of implementation.
+
+Publication remains a separate maintainer action after all release gates pass.
diff --git a/docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md b/docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md
new file mode 100644
index 00000000..5aac56eb
--- /dev/null
+++ b/docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md
@@ -0,0 +1,697 @@
+# Memory Recall Polyglot Code Intelligence Design
+
+**Date:** 2026-07-16
+**Status:** Approved for implementation
+**Goal:** Match or beat GitNexus on its documented developer workflows while preserving Memory Recall's governed temporal memory, source evidence, compact delivery, and verified handoffs.
+
+## Decision
+
+Memory Recall will promote its existing Rust Tree-sitter implementation into the production code-intelligence engine. Node.js remains the product shell for the public CLI, loopback Control API, governed memory workflow, MCP compatibility, and web workbench.
+
+The first production language tier covers the same fourteen languages documented by GitNexus:
+
+- TypeScript;
+- JavaScript;
+- Python;
+- Java;
+- Kotlin;
+- C#;
+- Go;
+- Rust;
+- PHP;
+- Ruby;
+- Swift;
+- C;
+- C++;
+- Dart.
+
+The existing Lua, Bash, SQL, Objective-C, Scala, R, Julia, and Zig parsers remain experimental until they pass the same language-quality gates. A parser crate or successful syntax tree does not qualify as product support.
+
+Memory Recall will not copy GitNexus or Codebase Memory MCP source or expose either project as its runtime engine. GitNexus is the primary reference for fourteen-language workflow depth. Codebase Memory MCP is the primary reference for parser breadth, native distribution, indexing throughput, query latency, and large-repository scale. Memory Recall owns its schema, indexing, query behavior, release artifacts, safety boundary, and user experience.
+
+Raw parser count is not the definition of leadership. Codebase Memory MCP currently documents substantially more grammars than this Tier 1 plan. Memory Recall will first prove deeper shared-language correctness and developer-task quality, then expand its language tiers under the same gates. It cannot claim language-count leadership while that count remains lower.
+
+## Current state
+
+The public Node.js path supports JavaScript and TypeScript source graphs. It persists a bounded JSON index and exposes twelve read-only MCP tools for orientation, search, context, trace, dependencies, routes, impact, governed memory, and handoff context.
+
+The repository also contains an experimental Rust runtime with Tree-sitter grammars for twenty-two language groups, SQLite storage, graph queries, local semantic search, community detection, routes, typed-call work, a read-only MCP server, and release-quality harnesses. That runtime is not the public default. The npm package ships Rust source but no compiled binary, and the workbench does not use the Rust graph.
+
+The work is therefore an integration, correctness, distribution, and proof program. It is not a request to add fourteen filename extensions to the JavaScript scanner.
+
+## Success definition
+
+The project may state that it matches GitNexus only after all of the following are true:
+
+1. All fourteen Tier 1 languages pass the published support matrix.
+2. The packed npm product installs and runs on each supported platform without a Rust toolchain.
+3. CLI, MCP, Control API, and web Map read the same production index.
+4. Incremental refresh, watcher behavior, migrations, and corruption recovery pass their failure tests.
+5. Multi-repository queries preserve workspace boundaries and expose evidence for every cross-repository relationship.
+6. A reproducible head-to-head corpus against GitNexus and, where the capability is shared, Codebase Memory MCP shows that Memory Recall meets the accuracy, performance, scale, and usability floors.
+7. Existing governed-memory, handoff, protocol, evaluation, consumer-install, and browser gates remain green.
+
+The project may state that it leads a measured category only when the public benchmark shows a material win against each relevant reference in that category. Tool counts, parser counts, and generated fixtures are not sufficient evidence.
+
+## Product boundary
+
+Memory Recall combines two jobs:
+
+1. explain code structure with bounded, source-backed metadata;
+2. preserve reviewed repository context across sessions and agents.
+
+The code graph is derived local state. It is never canonical memory. Structural facts extracted from source may be refreshed automatically in an explicit local indexing process. Interpretations that could become durable memory remain proposals and require review.
+
+The following invariants remain unchanged:
+
+- MCP is read-only;
+- repository text cannot change policy or grant authority;
+- normal MCP results contain locators and bounded metadata, not raw source bodies;
+- no cloud service or model call is a silent fallback;
+- network activity is explicit and off by default;
+- indexes stay workspace-scoped;
+- external writes require a separate authority path;
+- token figures are local delivery estimates unless a provider supplies billing usage.
+
+## System architecture
+
+```mermaid
+flowchart LR
+ CLI["Node CLI"] --> Engine["Rust code intelligence engine"]
+ API["Loopback Control API"] --> Engine
+ MCP["Read-only MCP facade"] --> Engine
+ Web["Web workbench"] --> API
+ Engine --> Index[("Derived SQLite index")]
+ Engine --> Registry[("Local repository registry")]
+ CLI --> Memory[("Governed memory SQLite")]
+ API --> Memory
+ MCP --> Memory
+ Engine -. "source-backed candidates" .-> Context["Context compiler"]
+ Memory --> Context
+```
+
+### Node responsibilities
+
+Node.js continues to own:
+
+- public `recall` commands and compatibility aliases;
+- setup preview, confirmation, client configuration, doctor, and uninstall;
+- loopback HTTP routes and authentication boundary;
+- governed memory proposal, approval, rejection, and supersession behavior;
+- context-pack composition and delivery accounting;
+- web assets and browser interaction;
+- protocol validation and release orchestration.
+
+### Rust responsibilities
+
+The Rust engine owns:
+
+- repository discovery and ignore handling;
+- language detection and parsing;
+- symbol, declaration, import, export, heritage, route, and call extraction;
+- cross-file and cross-repository resolution;
+- persistent structural indexing and migrations;
+- incremental invalidation and watcher scheduling;
+- lexical, structural, and local semantic retrieval;
+- communities, execution processes, architecture ranking, trace, and impact primitives;
+- bounded read-only query execution.
+
+### Process boundary
+
+Node communicates with the Rust engine through versioned JSON Lines over stdin and stdout. Each request includes:
+
+- protocol version;
+- request ID;
+- workspace or repository ID;
+- operation;
+- bounded arguments;
+- deadline;
+- cancellation token when the caller can cancel;
+- requested response schema version.
+
+Stdout contains protocol frames only. Diagnostics use stderr with stable error codes and sanitized paths. The wrapper enforces timeouts, output limits, process termination, and workspace containment.
+
+The initial integration uses a subprocess because it keeps the native boundary replaceable and testable. An in-process Node native binding is not required for the first production release.
+
+## Code-intelligence schema
+
+The new schema replaces language-specific public payloads with a stable intermediate representation.
+
+### Node kinds
+
+- repository;
+- directory;
+- file;
+- package or module;
+- namespace;
+- function;
+- method;
+- class;
+- interface;
+- struct;
+- enum;
+- trait or protocol;
+- type alias;
+- variable or constant when public or structurally relevant;
+- route;
+- configuration resource;
+- framework component;
+- execution process;
+- community.
+
+Language-specific constructs map to the closest stable kind and retain a `languageKind` field. The public identifier must not depend on a Tree-sitter node name.
+
+### Edge kinds
+
+- contains;
+- defines;
+- imports;
+- exports;
+- re_exports;
+- references;
+- calls;
+- constructs;
+- inherits;
+- implements;
+- extends;
+- handles_route;
+- reads;
+- writes;
+- emits;
+- listens;
+- depends_on;
+- member_of;
+- process_step;
+- cross_repo_depends_on.
+
+Every resolved edge includes:
+
+- source and target IDs;
+- source locator and evidence span;
+- resolver name and version;
+- confidence score;
+- resolution class: exact, typed, inferred, lexical, or unresolved;
+- language;
+- index generation;
+- stale state.
+
+An unresolved relationship remains an explicit unresolved record. It must not be converted into a confident edge for graph density.
+
+### Identity
+
+Canonical structural IDs use repository identity, normalized workspace locator, stable kind, qualified name, and declaration span. Rename detection may preserve continuity through a separate lineage relation, but a guessed rename must not silently reuse an old identity.
+
+Absolute paths, user names, credentials, source bodies, and volatile parser object IDs are excluded from public identifiers.
+
+## Persistent index
+
+The production index is an embedded SQLite database under `.local/source-index/`. The exact filename is versioned by the storage ADR.
+
+The index contains:
+
+- repository identity and schema version;
+- file manifest with content hash, size, language, parse status, and ignore fingerprint;
+- normalized nodes and edges;
+- evidence spans without raw source bodies;
+- unresolved relationships;
+- package and framework metadata;
+- lexical search tables;
+- local semantic search state when enabled;
+- community and process projections;
+- benchmark-safe measurements;
+- migration and health records.
+
+### Incremental refresh
+
+Refresh performs these steps:
+
+1. Load and validate the current index identity.
+2. Discover files using the current ignore and workspace rules.
+3. Compare content hashes, not modification time alone.
+4. Remove deleted files and their owned records.
+5. Parse added and changed files.
+6. Re-resolve directly affected imports, calls, heritage, routes, processes, and communities.
+7. Commit the next generation atomically.
+8. Leave the previous valid generation available until commit succeeds.
+
+A no-change refresh writes nothing. A parser failure for one supported file records partial coverage and preserves the rest of the valid generation. Database corruption never triggers silent deletion; doctor reports it and offers an explicit rebuild plan.
+
+### Watch mode
+
+Watch mode is opt-in, local, debounced, bounded, and stoppable. It schedules refresh work but does not modify canonical memory. It must handle editor temporary files, rename storms, branch changes, and directory replacement without unbounded queues.
+
+### Large-repository behavior
+
+The engine never materializes the entire graph in an MCP response or browser payload. Queries use indexes and bounded traversals. The Map receives grouped summaries first, then focused neighborhoods.
+
+Million-node support requires a benchmark that records build time, refresh time, query latency, peak RSS, index size, file count, node count, edge count, platform, and failure behavior. Until that gate passes, the public scale boundary remains smaller and explicit.
+
+## Language support contract
+
+### Capability columns
+
+The public support matrix uses these columns:
+
+| Capability | Meaning |
+| --- | --- |
+| Parse | Supported files produce syntax-backed declarations without crashing the repository scan. |
+| Structure | Language-relevant functions, methods, types, packages, and modules are represented. |
+| Imports | Imports, includes, uses, aliases, and package dependencies are extracted. |
+| Exports | Public/exported bindings and re-exports are represented where the language exposes them. |
+| Heritage | Inheritance, interfaces, traits, protocols, mixins, or equivalent relationships are resolved. |
+| Types | Type annotations and receiver information contribute to resolution. |
+| Calls | Calls resolve across files with a confidence class and no module-as-function targets. |
+| Config | Toolchain and package configuration contributes to module resolution. |
+| Frameworks | Named supported frameworks produce routes, handlers, components, or entry points. |
+| Impact | Changed-file impact follows verified incoming relationships and reports omissions. |
+| Processes | Entry-point-to-sink execution processes are detected with evidence. |
+
+Values are `full`, `partial`, `parse-only`, or `unsupported`. A row cannot say `full` based only on synthetic fixtures.
+
+### Tier 1 release batches
+
+| Batch | Languages | Main resolution work |
+| --- | --- | --- |
+| A | JavaScript, TypeScript | Preserve current behavior, add typed parity, unified schema, and regression corpus. |
+| B | Python, Go, Rust | Module systems, receiver resolution, traits/interfaces, common service frameworks. |
+| C | Java, Kotlin, C# | Package and namespace resolution, overload handling, heritage, annotations, application frameworks. |
+| D | C, C++, Swift, Dart | Header/module relationships, type receivers, protocols, framework entry points, bounded ambiguity. |
+| E | PHP, Ruby | Dynamic dispatch confidence, package conventions, Rails/Laravel/Symfony structure. |
+
+The batch order does not permit a partial release to claim all fourteen languages. Preview releases may name exactly which rows passed.
+
+### Initial framework targets
+
+| Ecosystem | Required first targets |
+| --- | --- |
+| JavaScript and TypeScript | Node HTTP, Express, Fastify, NestJS, Next.js server routes |
+| Python | Flask, FastAPI, Django URL configuration |
+| Go | `net/http`, Gin, Echo, Chi |
+| Rust | Axum, Actix Web, Rocket |
+| Java and Kotlin | Spring MVC, Spring Boot, Ktor |
+| C# | ASP.NET Core controllers and minimal APIs |
+| PHP | Laravel and Symfony routing |
+| Ruby | Rails routes and controllers |
+| Swift | Vapor routes |
+| Dart | Shelf routes and Flutter application entry points |
+| C and C++ | executable/library entry points and build-target relationships; no invented HTTP framework support |
+
+Framework detection must be syntax-backed or configuration-backed. String matching alone may create candidates but cannot create a high-confidence route.
+
+## Resolution pipeline
+
+The engine executes a deterministic pipeline:
+
+1. discover files and configuration;
+2. parse syntax trees;
+3. extract declarations and lexical relationships;
+4. build package, namespace, and module maps;
+5. resolve imports, exports, aliases, and re-exports;
+6. resolve heritage and explicit types;
+7. infer receiver and constructor types where bounded rules exist;
+8. resolve calls with confidence classes;
+9. detect framework routes and entry points;
+10. build dependency and impact projections;
+11. detect communities and execution processes;
+12. build lexical and optional local semantic search indexes;
+13. validate invariants and commit the generation.
+
+Language adapters provide queries and normalization rules. Shared resolution logic consumes the normalized declarations. This avoids one large switch statement that mixes every language's syntax, package rules, and framework rules.
+
+## Search and structural intelligence
+
+### Search
+
+`code.search` combines:
+
+- exact qualified-name lookup;
+- identifier and path matching;
+- SQLite FTS ranking;
+- graph-neighbor evidence;
+- optional model-free local semantic ranking;
+- optional local embedding ranking only when explicitly installed and enabled.
+
+The default path makes no network call. Every result exposes the signals that affected rank. The benchmark compares keyword, hybrid, and file-search baselines separately.
+
+### Context
+
+`code.context` returns one selected declaration or file with bounded containing, incoming, outgoing, heritage, route, process, and community context. Ambiguous matches return ranked candidates instead of selecting silently.
+
+### Trace and dependencies
+
+Traversals require edge filters, direction, depth, result limit, and time budget. Cycles are reported and bounded. The result includes omitted counts and truncation reasons.
+
+### Impact
+
+Impact starts from a git diff, explicit locators, or a symbol. It distinguishes:
+
+- directly changed declarations;
+- exact dependants;
+- high-confidence typed dependants;
+- lower-confidence inferred dependants;
+- unresolved risk;
+- files omitted by language, ignore, size, or index bounds.
+
+An impact result never states that a file will break unless the evidence class supports that wording.
+
+### Communities
+
+Community detection groups structural nodes using a deterministic versioned algorithm. A community label comes from repository names and paths by default. Model-generated labels are optional interpretations and never replace the stable community identity.
+
+### Processes
+
+Execution processes begin at detected entry points and follow bounded high-confidence paths toward routes, handlers, storage, queues, emitted events, or other sinks. Each step retains its underlying edges. A process is a projection, not a new source fact.
+
+### Safe graph query
+
+`code.query` accepts a constrained structured query object. It does not execute arbitrary SQL, Cypher, JavaScript, shell, or downloaded code. The schema limits node kinds, edge kinds, filters, direction, depth, sort, offset, limit, and deadline.
+
+## MCP contract
+
+The existing tools remain compatible:
+
+- `memory.recall`;
+- `context.profile`;
+- `context.pack`;
+- `repo.map`;
+- `repo.architecture`;
+- `repo.index_status`;
+- `code.search`;
+- `code.context`;
+- `code.trace`;
+- `code.dependencies`;
+- `code.routes`;
+- `code.impact`.
+
+Four task-distinct additions are permitted after their primitives pass:
+
+- `repo.list` for local indexed repositories and freshness;
+- `repo.communities` for functional areas and evidence;
+- `code.processes` for entry-to-sink flows;
+- `code.query` for constrained structural queries.
+
+All tools include schema version, repository identity, index generation, freshness, coverage, provenance, truncation, and token-delivery measurements. MCP calls do not build, refresh, migrate, repair, or delete indexes.
+
+## Multi-repository design
+
+The local registry contains repository IDs, display names, workspace-contained index locations, root identity hashes, last-seen state, and freshness. It stores no source bodies.
+
+One MCP server may read multiple registered indexes. Connections open lazily and use a strict pool bound. Repository selection is explicit when more than one repository can answer a query.
+
+Cross-repository edges require evidence from:
+
+- workspace and package manifests;
+- import paths and package coordinates;
+- Go modules and Cargo dependencies;
+- Maven, Gradle, NuGet, Composer, and Ruby package metadata;
+- protobuf or gRPC definitions;
+- GraphQL schemas and generated client bindings;
+- explicitly configured repository relationships.
+
+Name similarity alone never creates a cross-repository edge. Registry changes, index writes, and relationship refresh are CLI operations, not MCP operations.
+
+## npm distribution
+
+The public package remains `memory-recall`. Platform binaries ship through optional platform packages selected by npm.
+
+Initial supported targets:
+
+- macOS arm64;
+- macOS x64;
+- Linux x64 GNU;
+- Linux arm64 GNU;
+- Windows x64.
+
+Linux musl and Windows arm64 become supported only after their consumer gates pass.
+
+The Node wrapper verifies the selected binary version and checksum before use. It never downloads an executable from an arbitrary runtime URL. Missing or invalid native packages produce an actionable doctor result.
+
+The JS/TS provider may remain as reduced mode during migration. Reduced mode must say that polyglot, multi-repository, semantic, and large-index behavior is unavailable. It cannot present Tier 1 coverage.
+
+Release artifacts include:
+
+- checksums;
+- software bill of materials;
+- dependency and grammar license inventory;
+- build provenance;
+- macOS signing and notarization evidence;
+- Windows signing evidence when Windows is called supported;
+- isolated packed-package installation results.
+
+## Workbench and Map
+
+The workbench keeps the task-based navigation: Start, Explore code, Review memory, Prepare handoff, and Settings.
+
+### Start
+
+The first screen shows:
+
+- repository and active branch;
+- language coverage with full, partial, and unsupported counts;
+- index freshness;
+- important subsystems;
+- entry points and hotspots;
+- changed-file impact summary;
+- governed-memory proposal and current-fact counts;
+- handoff readiness;
+- one recommended next action.
+
+It does not use competitive claims, decorative metrics, or graph terminology as onboarding copy.
+
+### Explore code
+
+Map uses progressive disclosure:
+
+1. repository groups and languages;
+2. functional communities;
+3. execution processes;
+4. focused symbol or file neighborhood;
+5. exact relationship evidence.
+
+The canvas is never the only representation. A synchronized outline provides the same selected structure for keyboard and assistive-technology users. Labels use collision-aware placement, focus priority, controlled wrapping, and zoom thresholds.
+
+Large graphs are summarized by the engine. The browser does not receive a million-node payload. Layout work stays off the main thread, and every request has a visible loading, empty, partial, error, or ready state.
+
+### Settings
+
+Settings exposes real paths, engine version, supported languages, reduced-mode state, index bounds, registry state, watcher state, privacy rules, and rebuild or repair commands. It does not expose design tokens or internal component examples.
+
+## Security and failure behavior
+
+The implementation must test:
+
+- symlinks that escape the workspace;
+- case-sensitive and case-insensitive path collisions;
+- invalid UTF-8 and malformed syntax;
+- oversized and generated files;
+- parser panics and timeouts;
+- poisoned or incompatible index files;
+- interrupted migrations;
+- watcher storms;
+- branch switches and repository replacement;
+- path and user-name leakage;
+- crafted repository text that resembles instructions;
+- decompression and allocation bombs in supported formats;
+- traversal queries intended to exhaust CPU or memory;
+- registry entries that point outside allowed roots;
+- version mismatch between Node wrapper and native binary.
+
+The engine returns stable failure codes. Partial coverage remains usable and visible. A failed file or query cannot silently broaden filesystem or network access.
+
+## Benchmark design
+
+The benchmark runs Memory Recall, GitNexus, Codebase Memory MCP where it supports the tested capability, and a file-by-file baseline against the same pinned repository commits. Each product keeps its documented configuration. The report separates vendor claims from measurements produced by this corpus.
+
+### Corpus
+
+The public corpus contains:
+
+- at least three pinned real repositories for each Tier 1 language;
+- small gold fixtures for exact declarations, imports, calls, heritage, routes, and impact;
+- mixed-language monorepositories;
+- two-repository and multi-repository dependency fixtures;
+- malformed-source and unsupported-language fixtures;
+- generated large repositories for controlled scale;
+- at least one large real repository that fits the machine budget.
+
+Repository licenses must permit benchmark use and redistribution of derived gold metadata. Commit hashes, acquisition commands, exclusions, and expected facts are recorded.
+
+### Metrics
+
+Correctness:
+
+- symbol precision and recall;
+- import/export resolution precision and recall;
+- call-edge precision and recall by confidence class;
+- heritage precision and recall;
+- route and handler precision and recall;
+- changed-file impact precision and recall;
+- process-step precision and recall;
+- duplicate canonical identity count;
+- unsupported and partial-coverage honesty.
+
+Retrieval:
+
+- Recall@5 and Recall@10;
+- MRR and NDCG@10;
+- task-answer sufficiency;
+- tool calls per task;
+- delivered tokens per task;
+- omitted relevant evidence.
+
+Performance:
+
+- cold index wall time and peak RSS;
+- warm open latency;
+- no-change refresh;
+- one-file and one-package refresh;
+- query p50, p95, and p99;
+- on-disk size;
+- watcher convergence and backlog;
+- browser payload size and interaction latency.
+
+### Minimum floors
+
+Before a language is `full`:
+
+- symbol recall is at least 95 percent;
+- resolved-call precision is at least 90 percent;
+- no duplicate canonical symbol IDs exist in the gold corpus;
+- deterministic reruns produce the same structural fingerprint;
+- malformed files do not fail the repository scan;
+- partial and unsupported cases emit explicit diagnostics;
+- all real-repository language gates pass.
+
+These are minimum floors, not automatic leadership claims. The head-to-head report publishes both products' results and limitations without rewriting vendor claims as independent facts.
+
+## Verification layers
+
+### Focused tests
+
+- language adapter unit tests;
+- per-language gold fixtures;
+- resolver property tests;
+- index migration and corruption tests;
+- watcher and cancellation tests;
+- registry isolation tests;
+- MCP schema, bound, and zero-write tests;
+- Node/native protocol compatibility tests;
+- UI model and rendering tests.
+
+### Integration tests
+
+- fresh index, process restart, refresh, and query;
+- branch switch and rename handling;
+- mixed-language cross-file calls;
+- framework route-to-handler-to-storage flow;
+- multi-repository dependency and impact;
+- reduced-mode behavior;
+- current and previous schema migration;
+- interrupted process and index recovery.
+
+### Release tests
+
+- `cargo test --manifest-path rust/Cargo.toml`;
+- all Rust quality harnesses relevant to the changed milestone;
+- `npm run ci`;
+- `npm run protocol:validate`;
+- `npm run consumer:smoke` against the packed artifact;
+- browser smoke and manual route audit;
+- release-readiness and handoff verification;
+- platform package installation in isolated homes;
+- head-to-head benchmark reproduction.
+
+## Migration and compatibility
+
+The migration proceeds behind the existing public tools.
+
+1. Introduce the native-engine protocol and schema without changing the default provider.
+2. Run JS/TS parity tests against both engines.
+3. Enable the Rust engine by explicit preview flag.
+4. Build indexes in a new path. Do not mutate the existing JSON index in place.
+5. Promote the Rust engine to default only after JS/TS compatibility and packed-consumer gates pass.
+6. Keep the reduced JS/TS provider for one documented compatibility window.
+7. Remove the old primary index only after migration, rollback, and uninstall paths are verified.
+
+Existing MCP names and core response fields remain compatible. New coverage, confidence, repository, and process fields are additive. Breaking schema changes require a versioned endpoint or major protocol version.
+
+## Execution phases and gates
+
+### Phase 0: contract and baseline
+
+Deliver the storage ADR, native protocol schema, code-intelligence schema, support matrix, benchmark manifest, and baseline measurements. Stop if licenses, platform packaging, or current Rust quality invalidate the proposed direction.
+
+### Phase 1: unified provider
+
+Connect Node to Rust behind a provider port. Prove JS/TS result compatibility, zero-write MCP reads, process bounds, cancellation, error codes, and isolated packed-product behavior.
+
+### Phase 2: fourteen-language Tier 1
+
+Complete language batches A through E. Each batch lands only with fixture and real-repository evidence. Public docs name exact per-language capability values.
+
+### Phase 3: production index
+
+Land SQLite storage, incremental refresh, dependency invalidation, watcher behavior, migrations, recovery, and large-repository query bounds.
+
+### Phase 4: intelligence parity
+
+Complete hybrid search, communities, processes, routes, impact, confidence, and constrained graph queries. Add the four MCP tools only after their primitives pass.
+
+### Phase 5: multi-repository
+
+Land the registry, bounded connection pool, repository selection, evidence-backed cross-repository edges, cross-repository search, trace, and impact.
+
+### Phase 6: distribution
+
+Ship signed platform packages, wrapper selection, version and checksum verification, setup, doctor, update, uninstall, provenance, and isolated platform consumer tests.
+
+### Phase 7: workbench
+
+Move Start, Map, Settings, memory context, and handoff context to the unified engine. Complete browser, accessibility, responsive, performance, and anti-slop review.
+
+### Phase 8: benchmark and gap closure
+
+Run the pinned head-to-head corpus. Fix measured correctness, retrieval, performance, installation, and usability gaps. Publish only claims that survive reproduction.
+
+### Phase 9: broader formats
+
+Promote the eight existing experimental languages under the Tier 1 gates. Then add high-value structural formats such as GraphQL, Protocol Buffers, Terraform/HCL, Dockerfiles, YAML/Kubernetes, Vue, and Svelte through separate capability rows.
+
+## Risks and controls
+
+| Risk | Control |
+| --- | --- |
+| Native distribution makes install fragile | Optional platform packages, isolated consumer tests, checksum/version validation, explicit reduced mode. |
+| Parser count is mistaken for quality | Capability matrix, real repositories, precision and recall floors, explicit partial states. |
+| Rust and Node produce conflicting truth | One provider-neutral schema and one production index; parity tests before default switch. |
+| Dynamic languages create false call edges | Confidence classes, unresolved records, precision floors, no density-driven guessing. |
+| Large graphs overwhelm UI or MCP | Query-time bounds, grouped summaries, pagination, progressive disclosure, payload budgets. |
+| Multi-repo analysis crosses privacy boundaries | Local registry, explicit repository selection, workspace containment, no source bodies in registry. |
+| Watcher corrupts or churns the index | Debounce, bounded queue, atomic generations, interruption tests, explicit repair. |
+| Competitive work causes copied architecture or claims | Independent implementation, license review, pinned benchmark inputs, direct evidence. |
+| Broader code intelligence weakens memory governance | Derived graph remains separate from canonical memory; interpretations stay proposal-gated. |
+
+## Acceptance criteria
+
+- The production package supports all fourteen Tier 1 languages at documented capability levels.
+- Every `full` capability is backed by fixtures, real repositories, and published metrics.
+- The public package installs without a compiler on supported targets.
+- Node, MCP, API, and web workbench use one versioned production index.
+- No-change refresh writes nothing; changed refresh reparses and re-resolves only affected scope.
+- Corrupt, stale, partial, unsupported, reduced-mode, and version-mismatch states are explicit and recoverable.
+- The twelve existing MCP tools remain compatible and make zero index or memory writes.
+- New MCP tools are bounded, source-backed, and added only after their underlying operations pass.
+- Multi-repository results name the repository and evidence for every relationship.
+- Map remains readable and operable without receiving the entire graph.
+- All existing verification remains green and the new native, language, scale, platform, browser, and security gates pass.
+- The head-to-head report supports every parity or leadership statement made in README or release material.
+- Push, merge, npm publish, deployment, and public release remain separate user-authorized actions.
+
+## References
+
+- GitNexus README, supported language matrix and indexing pipeline:
+- Codebase Memory MCP README, broad-language and large-index reference:
+- Existing Memory Recall task-first code-intelligence design in the same specs directory.
+- Existing Rust runtime: `rust/README.md`
+- Existing Rust parser: `rust/oaf-ingest/src/lib.rs`
+- Current Node JS/TS provider: `providers/native/context-candidate-ast-code/src/index.mjs`
diff --git a/docs/superpowers/specs/2026-07-16-memory-recall-task-first-code-intelligence-design.md b/docs/superpowers/specs/2026-07-16-memory-recall-task-first-code-intelligence-design.md
new file mode 100644
index 00000000..8b5a499f
--- /dev/null
+++ b/docs/superpowers/specs/2026-07-16-memory-recall-task-first-code-intelligence-design.md
@@ -0,0 +1,109 @@
+# Memory Recall Task-First Code Intelligence Design
+
+**Date:** 2026-07-16
+**Status:** Approved for implementation
+
+## Product decision
+
+Memory Recall is a local developer workbench for two connected jobs:
+
+1. understand a repository before changing it;
+2. preserve and deliver trustworthy context after the work.
+
+The first screen must answer three questions without teaching product vocabulary:
+
+- Where should I start?
+- What changed or needs attention?
+- What context can I trust?
+
+The UI remains a restrained workbench. It does not imitate a generic analytics dashboard, a graph demo, or an AI assistant. Existing native typography, off-white and graphite surfaces, cobalt interaction color, flat geometry, spacing, and accessible controls remain the design system.
+
+## Navigation and information architecture
+
+Use task labels in the persistent navigation while keeping short page titles:
+
+| Navigation | Page title | Job |
+| --- | --- | --- |
+| Start | Overview | Orient in ten seconds |
+| Explore code | Map | Find a file or symbol, inspect dependencies, and trace impact |
+| Review memory | Memory | Review proposals and current governed facts |
+| Prepare handoff | Handoffs | Build, pin, verify, and receive compact context |
+| Settings | Settings | Inspect local paths, scan limits, privacy, and read-only guarantees |
+
+The Overview presents a small set of direct next actions. It does not repeat the same repository status in multiple cards.
+
+## Map behavior
+
+The current empty-query failure is removed. Map has two valid states:
+
+- **Repository architecture:** the default and empty-query result renders the bounded repository group graph and a group outline.
+- **Focused code view:** a query, changed file, or selected group renders a smaller node graph and a matching accessible outline.
+
+The submit label is **Search code**, because submitting a query searches the current scan. **Refresh scan** remains the explicit operation that re-reads local files.
+
+Graph labels use progressive disclosure:
+
+- always show the selected node;
+- show immediate neighbors when space permits;
+- show a bounded set of high-value labels at the default zoom;
+- reveal additional labels on hover and zoom;
+- never render every label merely because the graph contains fewer than an arbitrary threshold.
+
+The outline is the legible equivalent of the canvas. Each row uses a stacked label and locator, both with controlled wrapping or ellipsis. Selection remains synchronized between canvas, outline, and inspector.
+
+## Honest measurements
+
+No reduction percentage is shown when the baseline is zero, absent, or not comparable. The UI says **Not measured** and explains what action produces a measurement. Local token estimates remain explicitly separate from provider billing.
+
+## Read-only MCP surface
+
+Expand from five to twelve focused read-only tools. Every tool returns bounded, locator-safe metadata and excludes raw source bodies.
+
+| Tool | Purpose |
+| --- | --- |
+| `repo.map` | Combined bounded repository, memory, and handoff orientation |
+| `repo.architecture` | Repository groups, entry points, hotspots, and coverage |
+| `repo.index_status` | Persistent-index availability, freshness, limits, and coverage |
+| `code.search` | Structural and lexical search across files, symbols, and relationships |
+| `code.context` | One symbol or file with incoming, outgoing, containing, and related context |
+| `code.trace` | Bounded inbound, outbound, or bidirectional relationship paths |
+| `code.dependencies` | Direct and transitive module or file dependencies and dependants |
+| `code.routes` | Route and handler entry points with connected symbols and files |
+| `code.impact` | Changed-file coverage, affected symbols, and relationship evidence |
+| `memory.recall` | Governed current and temporal memory facts |
+| `context.profile` | Budgeted memory profile for an objective |
+| `context.pack` | Sanitized handoff context |
+
+Tool count is not the success metric. Each added tool must reuse verified source-graph primitives, provide bounded pagination or depth, retain workspace locators, and include freshness and coverage truth.
+
+## Persistent local index
+
+The persistent index is derived local state, never canonical memory.
+
+- The explicit `recall graph index --write` command creates or refreshes it.
+- MCP tools may read a valid index but never create, refresh, or mutate it.
+- The default location is `.local/source-graph/index.v1.json`; callers may supply another workspace-contained path.
+- The file contains schema/version metadata, workspace identity, scan settings, a content manifest, per-file metadata shards, and a sanitized graph. It contains no raw source bodies.
+- Refresh compares content hashes and ignore-rule identity. Unchanged shards are reused; changed and added JS/TS files are rescanned; deleted shards are removed; the global symbol graph is rebuilt from the merged metadata.
+- Unsupported languages and configured bounds remain visible as partial coverage. Million-node claims are prohibited until a benchmark proves them.
+- Watch mode only invalidates and schedules explicit local refresh behavior. It must be bounded, debounced, and stoppable.
+
+## Competitive boundary
+
+GitNexus and Codebase Memory MCP remain current references for breadth, persistent indexing, and route/call-graph ergonomics. Memory Recall will not claim parity with their language counts, semantic search, cross-repository analysis, or index scale until those behaviors exist and are benchmarked here.
+
+Memory Recall's product-owned advantage is the connection between code structure and governed temporal context: proposals, review, current truth, source evidence, cursor deltas, compact delivery, and verified handoffs.
+
+## Acceptance criteria
+
+- A first-time developer can identify the three main jobs from the first screen and navigation.
+- Empty Map submission produces a visible repository graph, not a canvas-free state.
+- A 50-100 node focused graph remains readable; outline text does not collide.
+- Settings contains real runtime and privacy information, not design swatches.
+- Handoffs leads with one recommended flow and public `recall` commands.
+- Unmeasured savings never render as 100% reduction.
+- MCP inspection lists twelve read-only tools and each new tool has focused contract tests.
+- Read-only MCP calls make zero local writes.
+- Explicit index creation survives process restart and refreshes changed shards without retaining raw source.
+- README and reference docs state verified capabilities and explicit gaps.
+- Focused tests, the full suite, browser interaction QA, and a large-repository benchmark pass before release claims.
diff --git a/docs/usage/code-intelligence-support.md b/docs/usage/code-intelligence-support.md
new file mode 100644
index 00000000..3e7d8ee8
--- /dev/null
+++ b/docs/usage/code-intelligence-support.md
@@ -0,0 +1,334 @@
+# Code-intelligence language support
+
+The authoritative support record is
+[`evals/code-intelligence/capability-matrix.v1.json`](../../evals/code-intelligence/capability-matrix.v1.json).
+It records product status, benchmark status, evidence, and limitations for every
+language and capability. This page explains how to read it; it does not repeat
+the matrix cells.
+
+## Language tiers
+
+Tier 1 is the release target: TypeScript, JavaScript, Python, Java, Kotlin, C#,
+Go, Rust, PHP, Ruby, Swift, C, C++, and Dart. All fourteen must meet the
+published quality floors before Memory Recall can claim Tier 1 parity.
+
+Tier 2 contains Lua, Bash, SQL, Objective-C, Scala, R, Julia, and Zig. Their
+parsers remain experimental until each language passes the same evidence gates.
+Parser availability alone is not product support.
+
+## Status meanings
+
+Product status and benchmark status answer different questions:
+
+- `implemented`: behavior is available through the current public product path;
+- `experimental`: behavior exists only on an unbundled or manual path;
+- `specified`: the target contract exists, but qualifying behavior does not;
+- `unsupported`: no implementation is present;
+- `unmeasured`: the published accuracy benchmark has not evaluated the claim;
+- `does-not-meet-floor`: measured evidence missed at least one required floor;
+- `meets-floor`: measured evidence passed every required floor.
+
+A `meets-floor` capability requires both a deterministic fixture and evidence
+from a pinned real repository. The audit rejects absolute paths, repository
+escapes, missing evidence files, duplicate languages, incomplete capability
+rows, and full claims without both evidence classes.
+
+## Current boundary
+
+Node.js remains the production CLI and transport layer. Packaged Rust owns the
+production code-intelligence path. Graph commands, MCP, Control API, and web
+default to a healthy current SQLite index and fail closed with the exact build,
+refresh, repair, schema, target, or package action when native state is not
+usable. `auto` and `native-preview` remain strict native aliases; no JavaScript
+intelligence path is available.
+
+The current registry release does not ship the new binary. This source checkout
+contains five optional platform-package templates and a resolver that verifies
+package identity, target, path containment, SHA-256, executable availability,
+and exact binary version before use. The macOS arm64 package path passes an
+isolated local packed-install gate, including explicit first-run indexing and
+all twelve MCP tools while installed-package checks prove the retired JS graph
+paths are absent. The other targets, signing, stable publication, and
+published-package proof remain open.
+Unsupported or unmeasured language capabilities remain labeled as such.
+
+This boundary changes only when implementation, fixtures, pinned repository
+results, package verification, and public documentation land together.
+
+## Phase 2 Tier 1 evidence
+
+The Phase 2 receipt is
+[`phase2-tier1-summary.json`](../../evals/code-intelligence/results/phase2-tier1-summary.json).
+It aggregates 14 deterministic fixtures and all 43 pinned repositories. Every
+case passes its reviewed truth, determinism, duplicate-symbol, parse-failure,
+and safety gates. The summary does not average failures away: any failed case
+would block the affected capability row.
+
+The ratios below are reviewed samples, not whole-repository recall. A
+capability moves to `meets-floor` only when the fixture and at least three distinct
+pinned repositories contain qualifying reviewed evidence. An applicable capability
+with narrower evidence stays `unmeasured`, even when every sampled item passes.
+
+| Language | Declarations | Relationships | Reviewed calls | Capability rows at floor | Applicable rows still unmeasured | Overall |
+| --- | ---: | ---: | ---: | --- | --- | --- |
+| TypeScript | 6/6 | 10/10 | 6/6 | parse, structure, imports, exports, types, calls | heritage, config, frameworks, impact, processes | unmeasured |
+| JavaScript | 8/8 | 8/8 | 4/4 | parse, structure, imports, exports, types, calls | heritage, config, frameworks, impact, processes | unmeasured |
+| Python | 20/20 | 22/22 | 4/4 | parse, structure, imports, heritage, types, calls, config, frameworks | exports, impact, processes | unmeasured |
+| Java | 21/21 | 10/10 | 5/5 | parse, structure, imports, calls | exports, heritage, types, config, frameworks, impact, processes | unmeasured |
+| Kotlin | 20/20 | 13/13 | 5/5 | parse, structure, imports, types, calls | exports, heritage, config, frameworks, impact, processes | unmeasured |
+| C# | 23/23 | 10/10 | 5/5 | parse, structure, imports, calls | exports, heritage, types, config, frameworks, impact, processes | unmeasured |
+| Go | 19/19 | 12/12 | 4/4 | parse, structure, imports, exports, calls | heritage, types, config, frameworks, impact, processes | unmeasured |
+| Rust | 23/23 | 18/18 | 4/4 | parse, structure, imports, exports, types, calls | heritage, config, frameworks, impact, processes | unmeasured |
+| PHP | 18/18 | 12/12 | 4/4 | parse, structure, imports, heritage, calls | exports, types, config, frameworks, impact, processes | unmeasured |
+| Ruby | 17/17 | 11/11 | 4/4 | parse, structure, imports, calls | exports, heritage, types, config, frameworks, impact, processes | unmeasured |
+| Swift | 16/16 | 10/10 | 1/1 | parse, structure, imports, heritage, types | exports, calls, config, frameworks, impact, processes | unmeasured |
+| C | 14/14 | 6/6 | 4/4 | parse, structure, imports, calls | exports, types, config, frameworks, impact, processes | unmeasured |
+| C++ | 16/16 | 12/12 | 4/4 | parse, structure, imports, heritage, types, calls | exports, config, frameworks, impact, processes | unmeasured |
+| Dart | 17/17 | 21/21 | 4/4 | parse, structure, imports, exports, heritage, types, calls | config, frameworks, impact, processes | unmeasured |
+
+Across the 154 Tier 1 capability cells, 75 meet the Phase 2 floor, none has a
+recorded floor failure, 78 applicable rows remain unmeasured, and C heritage is
+the sole explicit not-applicable row. Every language remains overall
+`unmeasured`.
+Five repository scopes hit the configured node or edge budget and report the
+exact omitted counts; their available reviewed evidence remains usable and partial.
+
+TypeScript's `imports` row is backed by an exact internal module edge in its
+fixture and each pinned repository. Its `types` row is backed by a resolved
+construction or typed-receiver edge in the same four cases. This Phase 2 status
+does not measure TypeScript heritage, configuration, frameworks, impact, or
+processes and is not a full-language or competitor-parity claim.
+
+Python's `imports`, `heritage`, `types`, and `config` rows are backed by exact reviewed
+edges in its fixture and each pinned repository. The native resolver handles
+dotted relative imports, absolute self-package submodules, sampled same-file
+inheritance, and sampled construction edges within the existing bounded package
+scopes. Python configuration evidence consists of package-keyed configuration
+resources derived from `pyproject.toml` project metadata or root package markers,
+plus exact `depends_on` edges to package nodes. Project metadata also participates
+in absolute self-package resolution and freshness checks. Imported-name expansion,
+impact, and processes remain unevaluated.
+
+Python framework extraction has exact route evidence in the fixture and three
+distinct pinned application sources: FastAPI's application-testing example,
+Flask's tutorial application, and Django's djangoproject.com accounts URLconf.
+
+Java imports are backed by exact reviewed import edges in the fixture and the
+pinned Gson, Guava, and Spring Petclinic scopes. Regular and static imports
+retain the full imported coordinate; the `static` keyword is not part of the
+target.
+
+Go, Rust, Kotlin, and C# imports are also backed by one fixture and three pinned
+repositories per language. External module or namespace coordinates remain
+complete, internal Go imports resolve to canonical modules, and reviewed
+same-source decoys prevent first-segment namespace truncation from passing.
+
+Go and Rust exports now have the same fixture-plus-three-repository coverage.
+Go evidence covers capitalized package types, functions, and sampled concrete
+methods. Exported fields and interface methods are omitted and are not part of
+the passing sample. Rust evidence covers unrestricted top-level `pub` items and
+simple-symbol `pub use` re-exports. Grouped and glob `pub use` forms are not part
+of the passing sample.
+
+Dart exports also meet the fixture-plus-three-repository floor for exact
+URI-level module re-exports. Local relative exports and self-package
+`package:` URIs resolve to workspace modules when the scan root is a Dart
+package root or its `lib` directory. `show` and `hide` symbol filtering remain
+unmeasured and are not part of this passing claim.
+
+Dart calls meet the same fixture-plus-three-repository floor for the sampled
+resolved calls. The Flutter sample binds `BookstoreAuth.of(context)` to the
+workspace method while a same-name `GoRouter.of(context)` decoy remains
+unresolved. This is sampled call evidence, not general framework or monorepo
+support.
+
+Dart heritage meets the sampled fixture-plus-three-repository floor. Flutter
+binds `_BookstoreState` only to its direct outer superclass `State`, does not
+emit the generic argument `Bookstore` as a superclass, and retains the reviewed
+`SingleTickerProviderStateMixin` edge. Shelf records `RouterParams on Request`
+as an unresolved external extension-type edge, while HTTP resolves
+`BaseClient implements Client` exactly. Generic substitution, compiler-level
+inference, and broader framework heritage remain unmeasured.
+
+Kotlin calls meet the fixture-plus-three-repository floor for sampled callsite
+owner attribution. In Now in Android, the `UserNewsResource` constructor owns
+the `map` call at line 45; the line-57 `map` call belongs to another function and
+is not attributed to that constructor. The sampled target remains unresolved,
+so this is not evidence of general typed, framework, or monorepo call resolution.
+
+Kotlin types meet the fixture-plus-three-repository floor for sampled
+constructor and type-use resolution. Coroutines binds `InlineList(element)` to
+`InlineList` without assigning the line-24 `ArrayList(4)` expression to that
+type. Ktor binds `RoutingResolveTraceEntry(...)` without confusing it with the
+enclosing `RoutingResolveTrace`. Generic constructor calls and property
+initializer constructions remain missed, and the Kotlin `List(size) { ... }`
+factory can appear as an unresolved construction. This does not establish full
+type inference, generic substitution, nullability flow, overload resolution, or
+compiler-equivalent semantic analysis.
+
+C++ types meet the fixture-plus-three-repository floor for the reviewed sample.
+In fmt, `utf8_system_category` remains a class while the macro-shaped
+`FMT_STRING(...)` call does not become a construction edge. This does not prove
+general preprocessor expansion, template analysis, or C++ type resolution.
+
+C++ heritage meets the sampled fixture-plus-three-repository floor for direct
+base specifiers. Generic arguments are excluded: `ItemService` binds only to
+`ItemLoader`, Catch2's `ApproxMatcher` binds only to `MatcherBase`, and
+nlohmann's `lexer` binds only to `lexer_base`. The fmt sample records
+`utf8_system_category` to external `error_category` as unresolved and rejects a
+class used in the body as heritage. Template substitution, alias expansion,
+dependent names, and compiler-equivalent inheritance analysis remain unmeasured.
+
+PHP, Ruby, Swift, C, and C++ imports have the same fixture-plus-three-repository
+coverage. The reviewed evidence preserves dotted PHP namespace coordinates and
+exact local PHP module resolution, full Ruby `require` paths, scoped Swift
+coordinates, and C/C++ angle-bracket header paths. Grouped PHP imports such as
+`use Foo\{Bar, Baz};` remain unsupported and unmeasured; they are not part of
+the passing PHP import sample.
+Decorators must be bound to imported and constructed FastAPI, APIRouter, Flask,
+or Blueprint receivers. Conventional Django `path` and `re_path` registrations
+use their first two positional arguments; `include(...)` remains explicit
+unsupported composition. Route-like text inside docstrings and arbitrary
+objects with HTTP-named methods do not count toward the framework floor.
+
+Reproduce the stored batch receipts and aggregate from a source checkout with a
+local release binary:
+
+```bash
+node scripts/code-intelligence-batch-a.mjs --check
+node scripts/code-intelligence-batch-b.mjs --check
+node scripts/code-intelligence-batch-c.mjs --check
+node scripts/code-intelligence-batch-d.mjs --check
+node scripts/code-intelligence-batch-e.mjs --check
+node scripts/code-intelligence-phase2-tier1.mjs --check
+```
+
+The Phase 2 receipt itself did not bundle a native binary, move MCP or web to
+Rust, prove multi-repository or million-node behavior, compare a competitor, or
+justify parity or leadership language. Later runtime-default work does not
+retroactively strengthen that evidence.
+
+## Phase 3 source-index evidence
+
+The native source index stores derived structure in
+`.local/source-index/index.v1.sqlite`. Builds and refreshes are explicit writer
+operations. Status, doctor, bounded queries, and the explicit MCP preview are
+read-only. Repair requires the fingerprint returned by doctor. Immediate no-op
+refresh is covered across reviewed fixtures for all fourteen Tier 1 languages:
+it parses and writes zero files, preserves the active generation, and leaves the
+database bytes and modification time unchanged.
+
+The Phase 3 receipt is
+[`phase3-source-index.json`](../../evals/code-intelligence/results/phase3-source-index.json).
+It measures one 600-file dependency fixture and three exact-commit repository
+scopes. The run covers 781 files, 6,646 nodes, and 15,540 edges with no recorded
+omissions. On the dependency fixture, one sampled file change reparsed 11 files
+and the sampled dependency-impact change reparsed 5, instead of reparsing all
+600. Timings and RSS are machine-specific evidence, not performance promises.
+
+This evidence proves the local lifecycle and language integration boundary. It
+does not prove full language support, packaged native distribution,
+multi-repository indexing, million-node scale, or competitor parity.
+
+## Phase 4 structural-intelligence evidence
+
+The explicit native preview now derives deterministic bounded exact, lexical,
+and one-hop structural search, communities, entry-to-sink processes, and
+constrained dependency traversal from the persistent index. Search and filtered
+traversal return source-backed relationship evidence only
+when both endpoints are in the bounded result. Process results retain the
+entry relationship and every traversed source relationship. They exclude stale,
+unresolved, and sub-0.75-confidence steps. `repo.architecture` exposes these
+projections through the existing twelve read-only MCP tools.
+
+The local Phase 4 receipt is
+[`phase4-intelligence.json`](../../evals/code-intelligence/results/phase4-intelligence.json).
+It proves deterministic search ranking and output, complete returned evidence,
+an outbound depth-two calls-only traversal, unchanged SQLite bytes and
+modification time, and the two-second query deadline on its fixture.
+It does not promote any language's process capability to `meets-floor`: that
+still requires applicable deterministic and pinned real-repository evidence.
+It also does not change the JS default or prove packaged binaries, competitors,
+multi-repository behavior, or million-node scale.
+
+## Bounded cross-repository Go evidence
+
+The experimental Rust registry can read up to eight explicitly registered
+repository indexes for search. Its stronger relationship path is intentionally
+narrow: two ordered repositories, an exact Go module requirement and import,
+one selected client entry, and one selected service target. It returns the
+import plus call or construction evidence, one bounded trace path, and reverse
+impact to the client entry. A same-name service in a wrong Go module is rejected.
+
+The existing twelve-tool MCP server exposes repository listing through
+`repo.index_status`, selected-repository search through `code.search`, and the
+exact Go operations through `code.dependencies`, `code.trace`, and
+`code.impact`. The server remains read-only, returns workspace locators rather
+than source bodies or absolute paths, and does not fall back to JS after a
+cross-repository request starts. This is not general multi-repository,
+cross-language, semantic, cross-service, or million-node support.
+
+## Native source-freshness gate
+
+Native `index.status` is now a real source check, not only a SQLite integrity
+check. It walks the persisted language scope, hashes a bounded selected file
+set, compares it with the active generation through the existing refresh
+planner, and reports changed, added, deleted, or unverified state as stale. The
+check is read-only and preserves the SQLite file, WAL, SHM, and active
+generation. Persisted file, node, or edge omissions continue to report partial
+coverage rather than current coverage.
+
+Normal `index.query` calls remain SQLite-only and do not rescan the workspace.
+The automatic native selector runs one status check and reuses a generation only
+when it is current, healthy, committed, read-only, and requires no repair or
+local write. Indexes written before the scan-scope marker was added report
+unverified until rebuilt. A historical custom `maxFileBytes` value is not yet
+persisted, so status uses the protocol's 10 MiB maximum and may conservatively
+report stale for a file that an earlier lower limit excluded. It cannot turn
+that ambiguity into a false current result.
+
+Native `index.refresh` also requires a complete source snapshot. If `maxFiles`,
+the hash-byte budget, or the request deadline stops discovery early, refresh
+returns partial, reports zero parsed, changed, deleted, and written files, and
+preserves the active generation plus its SQLite, WAL, and SHM files. Increase
+`maxFiles` and retry to refresh a larger workspace. The index store separately
+rejects an incremental commit when any invalidated live file is missing from
+the replacement, before the transaction can write.
+
+## Phase 6 local distribution gate
+
+The checkout-only `scripts/native-code-intelligence-consumer-smoke.mjs` builds
+the current release binary, produces the matching optional platform tarball,
+packs the root package, and installs both into an isolated prefix with install
+scripts disabled and no registry access. The installed provider discovers the
+platform package without `MEMORY_RECALL_NATIVE_BINARY`, validates its manifest,
+checksum, target, contained path, executable, and version, then parses all
+fourteen Tier 1 fixture languages. It also builds, reads, and queries the
+workspace-local SQLite source index while preserving source files, governed
+memory, home configuration, and installed package bytes. Cargo and rustc are
+absent from the runtime path. The gate then removes both installed npm packages,
+proves the executable is gone while the workspace-local SQLite bundle and
+governed memory remain byte-identical, installs the exact same tarballs into a
+fresh prefix, and reopens the same generation for TypeScript, Python, and Go
+queries without building or refreshing.
+
+The recorded local pass is macOS arm64 only. It does not prove macOS x64,
+Linux GNU arm64/x64, or Windows x64 artifacts, signing/notarization,
+trusted-publisher ownership for the scoped packages, public installation, or a
+cross-platform native release. It proves same-version removal/reinstall
+survivability, not downgrade compatibility with an older release. The duplicate
+JavaScript intelligence path is removed from the source and packed root package.
+
+The Rust CI workflow defines native-runner packaging lanes for those five
+targets. Each lane checks the runner architecture, builds the locked release
+binary, packages and structurally verifies one unsigned tarball, then passes
+that exact tarball into the installed root-plus-native consumer gate. The
+workflow definition is not cross-platform proof by itself: the four non-local
+lanes remain pending until their hosted runs complete successfully.
+
+## Retired JavaScript comparison receipts
+
+The former Phase 0 baseline and Phase 1 JavaScript-versus-Rust comparison were
+removed with the duplicate JavaScript intelligence implementation. They are not
+current evidence. Tier 1 support, cross-repository behavior, and competitor
+parity remain explicitly unmeasured where their active gates are incomplete.
diff --git a/docs/usage/local-agent-handoff.md b/docs/usage/local-agent-handoff.md
index 9cc585a2..fb29f2ac 100644
--- a/docs/usage/local-agent-handoff.md
+++ b/docs/usage/local-agent-handoff.md
@@ -33,7 +33,7 @@ Run this in the repository you want to understand:
recall map --root . --sqlite .local/memory.sqlite --format summary
```
-It reports bounded JS/TS static coverage, top entry points, changed-file impact,
+It reports bounded native index coverage, top entry points, changed-file impact,
and the separate status of ACTIVE facts and PENDING proposals. It does not write
files, call a model, use network access, enable adapters, or print raw source or
memory bodies. Add `--changed path/to/file.ts` repeatedly for reviewed files, or
diff --git a/docs/usage/mcp-server-reference.md b/docs/usage/mcp-server-reference.md
index 6153a289..9813726e 100644
--- a/docs/usage/mcp-server-reference.md
+++ b/docs/usage/mcp-server-reference.md
@@ -22,11 +22,23 @@ npm run recall -- mcp server --read-only --root . --sqlite .local/memory.sqlite
| `context.profile` | Return a compact profile selected under a context budget. | No |
| `context.pack` | Return a safe locator handoff for the current task. | No |
| `repo.map` | Return a bounded Recall Map of local source coverage, governed memory, and handoff readiness. | No |
-| `code.impact` | Return bounded locator-safe impact for changed local source files. | No |
+| `repo.architecture` | Return bounded architecture groups, entry points, processes, structural hotspots, and evidence. | No |
+| `repo.index_status` | Report local index status or list explicitly registered repositories. | No |
+| `code.search` | Search local metadata or selected registered repository indexes. | No |
+| `code.context` | Return one symbol with bounded, optionally filtered structural relationships. | No |
+| `code.trace` | Trace bounded local call paths or one exact Go path across two repositories. | No |
+| `code.dependencies` | Walk local dependencies or resolve one exact Go module boundary across two repositories. | No |
+| `code.routes` | Discover HTTP method exports in route-like JS/TS files. | No |
+| `code.impact` | Return local changed-file impact or reverse impact for one exact Go repository boundary. | No |
The server does not expose memory approval, config mutation, shell, or external
write tools.
+All structural tools return safe labels, relationship metadata, and
+`workspace://` locators. They do not return source bodies or absolute local
+paths. Results are bounded to at most 50 requested rows and trace or dependency
+depth is capped at 3.
+
`repo.map` accepts optional `changed`, `query`, and `limit` inputs. `changed`
uses safe workspace-relative source locators and `limit` is bounded to `1..50`.
`code.impact` requires a non-empty `changed` list and accepts `depth` `1`, `2`,
@@ -35,6 +47,97 @@ or `3` plus a `limit` of `1..50`. Both return safe labels and
graph state, or memory state. The established Recall Map v1 response envelope
remains capped at 20 listed architecture, search, and impact items.
+`code.search` accepts a query plus optional node kinds, edge kinds, locator
+prefix, limit, and offset. `code.context` selects a symbol and reports its direct
+incoming and outgoing relationships. With a current native index, it also
+accepts `direction`, depth `1..3`, and 1..16 unique canonical `edgeKinds` for a
+filtered traversal. Supplying any constraint never falls back to the JS scanner;
+a missing or stale native index returns a refresh instruction. `code.trace`
+follows call edges.
+`code.dependencies` walks imports and related structural edges. `code.routes`
+uses static route evidence from the native index; it does not execute a
+framework or claim runtime route coverage.
+
+### Registered repository mode
+
+Registered repository reads require the Rust engine and prebuilt indexes. Use
+`repo.index_status` with `scope: "repositories"` to list repository IDs, and
+pass `repositoryIds` to `code.search`. For `code.dependencies`, `code.trace`,
+or `code.impact`, pass `crossRepository` with ordered client and service
+repository IDs plus the selected client-entry and service-target native node
+IDs. Local and cross-repository selectors cannot be mixed. Trace and impact are
+capped at 25 results and the native request and subprocess share a two-second
+deadline. This path currently supports exact Go module evidence only.
+
+Register repositories from their shared fleet root after building each native
+index:
+
+```bash
+recall graph repositories register --write --root . --repository repositories/client --name Client --format json
+recall graph repositories list --read-only --root . --limit 10 --format json
+recall graph repositories search --read-only --root . --query Service --repository-ids --per-repository-limit 10 --limit 20 --format json
+```
+
+## Persistent Source Index
+
+The source index is local and production code-intelligence reads require it:
+
+```bash
+recall graph index --status --root . --format summary
+recall graph index --write --root . --format json
+recall graph index --refresh --root . --format json
+recall graph index --refresh --watch --root . --format summary
+```
+
+The native file is `.local/source-index/index.v1.sqlite`. It contains hashes,
+locators, normalized structural metadata, evidence, and bounded indexes. It does
+not contain source bodies or absolute paths. Writes are atomic and require an
+explicit CLI command. Refresh reparses invalidated scope and reuses unchanged
+files.
+
+MCP checks index freshness but never writes the index. A current index is reused
+across processes. A stale index returns the explicit refresh command.
+
+### Native index
+
+The packaged Rust engine is the default. Source checkouts may select an explicit
+local release binary for development:
+
+```bash
+recall graph index --write --engine native --root . --format summary
+recall graph index --query main --kind exact --engine native --root . --format json
+recall graph index --doctor --engine native --root . --format summary
+recall mcp server --read-only --engine native --root . --stdio
+```
+
+Its fixed path is `.local/source-index/index.v1.sqlite`. Native MCP
+queries that prebuilt index and fails clearly if it is unavailable; it never
+builds, refreshes, repairs, or falls back to the JS engine. Direct `mcp server`
+commands without `--engine` use native selection.
+
+The former `auto` spelling remains a strict native alias:
+
+```bash
+recall mcp server --read-only --engine auto --root . --stdio
+```
+
+Before each structural tool call, native mode checks the packaged binary and the
+prebuilt index. It reads results only when the index is healthy, ready, current,
+and has a committed generation. Absent, stale, invalid, or unavailable state
+returns an actionable error. It never builds, refreshes, repairs, or silently
+switches engines.
+
+In native mode, `repo.architecture` derives groups with
+`label-propagation-v1` and entry-to-sink paths with `entry-path-v1`. Each
+process references returned node and relationship IDs. Reads remain capped,
+report truncation, and preserve the index bytes and modification time. These
+projections are available through the existing twelve-tool MCP surface; no new
+write or query-execution tool is exposed.
+
+Constrained `code.context` reads use the same surface. Edge-kind filtering is
+performed inside each SQLite traversal step, and returned relationships retain
+source locators with both endpoints present in the bounded result.
+
## Resource Catalog
```bash
@@ -54,12 +157,26 @@ recall mcp install --client cursor --dry-run --format json
recall mcp install --client codex --dry-run --format json
```
+The installer-generated server uses `--engine native`. Install preview and apply
+never build or refresh a graph index. The report prints `indexBuildCommand` as
+the separate explicit write needed to create the native index. Until that
+command is run successfully, structural tools return the build instruction.
+A healthy, current native index is then read without MCP writes.
+
Apply only after reviewing the dry-run fingerprint:
```bash
recall mcp install --client claude-code --apply --confirm sha256: --format json
```
+Remove only an exact package-owned entry with the same preview and confirmation
+boundary:
+
+```bash
+recall mcp uninstall --client claude-code --dry-run --format json
+recall mcp uninstall --client claude-code --apply --confirm sha256: --format json
+```
+
## Safety Boundaries
- Local stdio only.
@@ -68,8 +185,10 @@ recall mcp install --client claude-code --apply --confirm sha256: Memory Recall provides an implemented JS/TS static graph. Experimental Rust
-> acceleration is opt-in and requires a local build; the npm package includes
-> Rust source, not a built binary.
+> Memory Recall uses verified packaged Rust for production code intelligence,
+> never builds the index from a read path, and keeps JS/TS analysis behind the
+> explicit `compatibility` option during the migration window.
-## What Rust Does After A Local Build
+## What Rust Does
- local ingest over repository source;
- governed File, Module, Function, Class, Method facts;
- graph and search surfaces;
- wiki and local UI surfaces in the Rust runtime;
- MCP and benchmark entrypoints for Rust quality gates.
+- a versioned JSON Lines code-intelligence engine used by explicit Node graph
+ previews.
+- an isolated SQLite source index with generation commits, incremental refresh,
+ bounded queries, diagnosis, and confirm-gated repair.
## What Node.js Does
@@ -26,10 +31,11 @@ Use this wording publicly:
- memory governance workflows;
- release readiness, protocol validation, and consumer smoke tests.
-## Build
+## Optional local build
-The npm tarball includes Rust source but no built Rust binary. No Rust command
-runs as part of `npm install`, `recall setup`, or `recall handoff`.
+The root npm tarball excludes Rust source and build output. Matching optional
+platform packages carry verified binaries. No compiler runs as part of
+`npm install`, `recall setup`, or `recall handoff`.
```bash
cargo build --release --manifest-path rust/Cargo.toml
@@ -41,18 +47,75 @@ The release binary is:
rust/target/release/oaf
```
-Build output is intentionally excluded from the npm tarball. The Rust source is
-included so users can inspect and build it locally when they choose the
-experimental acceleration path.
+Build output remains excluded from the root npm tarball. A source checkout can
+still build the engine explicitly for development.
-## Verify
+## Run the graph preview
+
+Point Memory Recall at a local release binary when testing a source checkout:
+
+```bash
+MEMORY_RECALL_NATIVE_BINARY="$PWD/rust/target/release/oaf" \
+ npm run recall -- graph stats --root . --engine native --format summary
+```
+
+A missing or invalid native binary fails clearly. Commands without `--engine`
+select native. `native-preview` and `auto` remain strict native aliases; neither
+alias enables a fallback engine.
+
+## Build and query the native index
+
+Writer operations stay explicit:
+
+```bash
+MEMORY_RECALL_NATIVE_BINARY="$PWD/rust/target/release/oaf" \
+ npm run recall -- graph index --write --engine native --root . --format summary
+
+MEMORY_RECALL_NATIVE_BINARY="$PWD/rust/target/release/oaf" \
+ npm run recall -- graph index --query main --kind exact --engine native --root . --format json
+
+MEMORY_RECALL_NATIVE_BINARY="$PWD/rust/target/release/oaf" \
+ npm run recall -- graph index --doctor --engine native --root . --format summary
+```
+
+If doctor returns a repair plan, review it and pass its fingerprint to
+`--repair --confirm `. Native MCP reads only a
+prebuilt index:
+
+```bash
+MEMORY_RECALL_NATIVE_BINARY="$PWD/rust/target/release/oaf" \
+ npm run recall -- mcp server --read-only --engine native --root . --stdio
+```
+
+Native MCP never builds, refreshes, repairs, or writes governed memory. Normal
+MCP startup uses the same strict native selection.
+
+The former `auto` spelling remains a strict native alias:
+
+```bash
+MEMORY_RECALL_NATIVE_BINARY="$PWD/rust/target/release/oaf" \
+ npm run recall -- mcp server --read-only --engine auto --root . --stdio
+```
+
+Native reads require a healthy, ready, current committed index. Every other
+status returns an actionable error. Reads do not build, refresh, or repair the
+index.
+
+## Verify from a source checkout
```bash
cargo test --manifest-path rust/Cargo.toml
node scripts/rust-eval.mjs
node scripts/rust-ingest-quality.mjs
node scripts/rust-realworld-bench.mjs
+node scripts/rust-code-intelligence-protocol-quality.mjs
+node scripts/native-code-intelligence-consumer-smoke.mjs
+node scripts/code-intelligence-phase3-index.mjs --check
```
Some Rust benchmark scripts clone public repositories before running local
commands. Treat those as optional evidence gates, not install-time behavior.
+The Phase 1 compatibility runner fetches exact commits from the pinned corpus.
+Its passing gate proves deterministic bounded execution, not the published
+accuracy floor. The stored results still contain unmeasured language rows, so
+auto selection is not a parity or leadership claim.
diff --git a/docs/usage/support-matrix.md b/docs/usage/support-matrix.md
index 94059907..4e674aec 100644
--- a/docs/usage/support-matrix.md
+++ b/docs/usage/support-matrix.md
@@ -6,13 +6,18 @@ This matrix separates what works today from what requires a manual experiment.
an installer-backed client promise. `Unsupported` means Memory Recall does not
provide that surface.
+For per-language code-intelligence evidence and benchmark status, see
+[Code-intelligence language support](code-intelligence-support.md).
+
## Choose the MCP path deliberately
There are two different local MCP paths:
-- `recall mcp install` installs `recall mcp server --read-only` for Codex,
- Claude Code, or Cursor. It exposes five tools: `memory.recall`,
- `context.profile`, `context.pack`, `repo.map`, and `code.impact`.
+- `recall mcp install` installs `recall mcp server --read-only --engine native` for Codex,
+ Claude Code, or Cursor. It exposes twelve tools: `memory.recall`,
+ `context.profile`, `context.pack`, `repo.map`, `repo.architecture`,
+ `repo.index_status`, `code.search`, `code.context`, `code.trace`,
+ `code.dependencies`, `code.routes`, and `code.impact`.
- `recall connect` is only for Codex and Claude Code. It writes a separate
`mcp resources --read-only --stdio` resource bridge plus optional hooks. Its
MCP `tools/list` is empty, so it does not expose Recall Map tools.
@@ -25,31 +30,69 @@ reversal path.
| Client or surface | Install mode | Config write behavior | Hook behavior | Graph coverage | Status |
| --- | --- | --- | --- | --- | --- |
-| Codex tool server | `recall mcp install --client codex --dry-run --format json`, then the printed `--apply --confirm` command | Writes only `$HOME/.codex/config.toml` (or an explicit safe `--home`/`--config`) after the matching confirmation fingerprint | None from this install | `repo.map` and `code.impact` expose the bounded JS/TS static graph | Implemented |
-| Claude Code tool server | `recall mcp install --client claude-code --dry-run --format json`, then confirmed apply | Writes only `$HOME/.claude/mcp.json` after matching confirmation | None from this install | Same bounded JS/TS graph tools | Implemented |
-| Cursor tool server | `recall mcp install --client cursor --dry-run --format json`, then confirmed apply | Writes only `$HOME/.cursor/mcp.json` after matching confirmation | No hook writer | Same bounded JS/TS graph tools | Implemented |
+| Codex tool server | `recall mcp install --client codex --dry-run --format json`, then the printed `--apply --confirm` command; reverse with `mcp uninstall` | Writes or removes only the exact entry in `$HOME/.codex/config.toml` after matching confirmation; backs up existing config | None from this install | Twelve read-only tools; installed native mode requires a verified platform package and a current local index, and returns the matching recovery command otherwise | Implemented |
+| Claude Code tool server | `recall mcp install --client claude-code --dry-run --format json`, then confirmed apply; reverse with `mcp uninstall` | Same exact-entry confirmation and backup boundary for `$HOME/.claude/mcp.json` | None from this install | Same strict native selection; no silent JS fallback | Implemented |
+| Cursor tool server | `recall mcp install --client cursor --dry-run --format json`, then confirmed apply; reverse with `mcp uninstall` | Same exact-entry confirmation and backup boundary for `$HOME/.cursor/mcp.json` | No hook writer | Same strict native selection; no silent JS fallback | Implemented |
| Codex resource bridge | `recall connect codex --dry-run --format json`, then `--yes` | `connect --yes` writes only matching resource-bridge entries and creates backups when it changes existing home config | Connect-owned `SessionStart`, `UserPromptSubmit`, and `PreCompact` hook entries | Resources only; no MCP graph tools | Implemented |
| Claude Code resource bridge | `recall connect claude-code --dry-run --format json`, then `--yes` | Same narrow connect-owned writer and backup behavior | Same three connect-owned hook events | Resources only; no MCP graph tools | Implemented |
| OpenCode, OpenClaw, Gemini CLI, Zed, Aider, Goose, VS Code, Cline, Roo, Windsurf, Generic MCP | `recall harness setup plan --client --server oaf --dry-run --format json`, then copy the shown snippet yourself | Preview and manual snippet only; `harness setup` never writes config | No writer; use the read-only MCP server manually if the client supports it | No installer-backed graph-tool proof for each client | Experimental |
| Other clients or marketplaces | None | No installer or runtime proof | None | None | Unsupported |
-| Local Rust acceleration | Build locally, then explicitly invoke the Rust path | No client config writer | None | Rust ingest/graph/search are opt-in; npm ships source, not a binary | Experimental |
-| Non-JS/TS source graph analysis | None | None | None | No static graph coverage beyond `.js`, `.jsx`, `.mjs`, `.cjs`, `.ts`, and `.tsx` | Unsupported |
+| Packaged Rust graph reads | Install a matching optional platform package or set `MEMORY_RECALL_NATIVE_BINARY`; omit `--engine` or use `--engine native` | No client config writer | None | A healthy current native index uses verified Rust by default; the compiler-free installed path represents all 14 Tier 1 fixtures, while full capability and cross-platform release gates remain open | Experimental |
+| Local Rust persistent index | Build locally, set `MEMORY_RECALL_NATIVE_BINARY`, then use `graph index` with `--engine native`; writer modes remain explicit | Writes only `.local/source-index/index.v1.sqlite` for explicit build, refresh, or confirm-gated repair | None | SQLite generations, bounded invalidation refresh, doctor, repair, bounded query, exact no-op refresh across 14 reviewed fixtures, and a clean Phase 3 receipt | Experimental |
+| Local Rust MCP | Start `recall mcp server --read-only --engine native` after building the indexes and registering repositories explicitly | No client config writer and no index or memory writes | None | Twelve-tool server; structural tools read prebuilt native indexes and expose bounded repository listing/search plus exact two-repository Go dependencies, trace, and reverse impact; governed memory tools keep their existing read-only behavior | Experimental |
+| Tier 2 and other source graph analysis | None | None | None | Lua, Bash, SQL, Objective-C, Scala, R, Julia, Zig, and languages outside Tier 1 have no promoted static graph support | Unsupported |
| Automatic transcript capture, write-capable MCP, hosted sync | None | None | None | None | Unsupported |
## Graph boundary
-The implemented graph is static and bounded: it scans supported JS/TS-family
-files only, up to 1,000 files and 512 KiB per file, and reports skipped or
-partial coverage. It is not a language server, semantic graph database, or
-universal code index.
+Both graph engines are static and bounded. The compatibility engine scans
+supported JS/TS-family files only; the Rust engine has fixture-backed parsing
+across 14 Tier 1 languages but still carries unmeasured capability rows. Both
+report skipped or partial coverage. Neither is a language server, semantic
+graph database, or universal code index.
+
+`recall graph index --write` creates an optional JS/TS structural index under
+`.local/source-graph/`. `--refresh` reparses changed and added files, reuses
+unchanged shards, and removes deleted files. `--refresh --watch` keeps it
+current while the process runs. Graph reads, direct MCP startup, and installed
+MCP servers default to `native`: they require a verified Rust engine and a
+healthy current SQLite index. Missing, unavailable, absent, stale, corrupt, or
+incompatible state returns a specific recovery action and never selects JS.
+`auto` and `native-preview` remain strict native aliases. Every
+build, refresh, and repair remains explicit.
+
+`recall graph stats`, `recall graph search`, `recall graph trace`, and
+`recall graph impact` accept `--engine native` or `--engine
+compatibility` after a local Rust build. Dependency and route reads are exposed
+through MCP as `code.dependencies` and `code.routes`; there are no `recall graph
+dependencies` or `recall graph routes` CLI subcommands.
+
+Native code intelligence can parse the 14 Tier 1 languages. The Phase 2 audit covers one
+fixture and three pinned repositories per language, but it promotes only the 46
+capability rows with qualifying evidence. Every language still has applicable
+unmeasured rows. These modes are read-only. Production-default native selection
+does not establish full language parity or a cross-platform published promise.
+
+The experimental repository registry is explicit. Build each repository index,
+then use `recall graph repositories register --write` from their shared fleet
+root. `list` and `search` require `--read-only`. The existing MCP tools expose
+repository discovery and bounded search; `code.dependencies`, `code.trace`, and
+`code.impact` accept an exact two-repository Go selector. This does not claim
+general cross-repository or cross-language resolution.
## Config and data boundary
`mcp install` is dry-run by default and requires `--apply --confirm
-sha256:` before it changes a home config file. `harness
+sha256:` before it changes a home config file. `mcp uninstall`
+uses the same exact-preimage confirmation, backs up the config, and removes only
+an exact Memory Recall-owned entry. Drifted entries are left unchanged. `harness
setup` and `hook install` are previews/manual snippets only. Normal
`memory.recall` and `context.profile` calls can persist local cursor and
-delivery telemetry; `repo.map` and `code.impact` do not record that telemetry.
+delivery telemetry; structural map, search, trace, route, dependency, impact,
+architecture, and index-status tools do not record that telemetry.
+Here, read-only means no canonical-memory, source-index, client-config, network,
+or external writes; it does not mean that optional local cursor and statistics
+files are disabled.
For current commands and limitations, see the [MCP server reference](mcp-server-reference.md)
and [developer-first contract](../product/memory-recall-developer-first.md).
diff --git a/docs/usage/troubleshooting.md b/docs/usage/troubleshooting.md
index 7c40f806..524ea266 100644
--- a/docs/usage/troubleshooting.md
+++ b/docs/usage/troubleshooting.md
@@ -38,7 +38,7 @@ version, or missing global install issues.
## MCP Tools Are Missing
`recall mcp install` and `recall connect` install different MCP paths. The
-confirmed `mcp install` path exposes five read-only tools, including `repo.map`
+confirmed `mcp install` path exposes twelve read-only tools, including `repo.map`
and `code.impact`. The Codex/Claude Code `connect` path installs a resource
bridge and hooks; its MCP `tools/list` is intentionally empty.
diff --git a/docs/usage/uninstall.md b/docs/usage/uninstall.md
index a638c5cf..11b0ef04 100644
--- a/docs/usage/uninstall.md
+++ b/docs/usage/uninstall.md
@@ -23,14 +23,17 @@ recall disconnect codex --dry-run --format json
# Tool-server install preview (Codex, Claude Code, or Cursor).
recall mcp install --client codex --dry-run --format json
+# Tool-server removal preview (Codex, Claude Code, or Cursor).
+recall mcp uninstall --client codex --dry-run --format json
+
# Manual-only previews; these do not remove anything.
recall harness setup uninstall --client codex --server oaf --dry-run --format json
recall hook uninstall --agent codex --dry-run --format json
```
Replace `codex` with `claude-code` where appropriate. Use `cursor` only with
-the tool-server preview. The last two commands are reports for manual removal,
-not uninstall writers.
+the tool-server commands. Harness and hook uninstall commands are reports for
+manual removal, not uninstall writers.
## 2. Remove a connect-owned resource bridge
@@ -48,16 +51,18 @@ does not remove a tool-server entry installed by `recall mcp install`.
## 3. Remove a tool-server install
-`recall mcp install --apply` has no automatic uninstall command and does not
-create a backup. Review a fresh dry-run report, then remove only its named
-server entry from the displayed config:
+Preview removal, then run the exact confirmed command printed by the preview:
-- Codex: remove `[mcp_servers.oaf]` from `$HOME/.codex/config.toml`.
-- Claude Code and Cursor: remove `mcpServers.oaf` from the displayed JSON
- config only.
+```bash
+recall mcp uninstall --client codex --dry-run --format json
+recall mcp uninstall --client codex --apply --confirm sha256: --format json
+```
-Do not remove neighboring MCP servers, and do not use `recall disconnect` for
-this path: the tool server is intentionally different from the resource bridge.
+The confirmation is bound to the exact config bytes reviewed. Memory Recall
+removes only an exact entry installed by this package, preserves neighboring
+servers and `.local`, and writes a private `*.oaf-backup-*` before changing an
+existing config. Drifted or unowned entries are never replaced or removed.
+Use `recall disconnect` only for the separate resource-bridge path.
## 4. Remove the package
@@ -72,6 +77,12 @@ This removes the installed package and executable. It does not touch any
repository's `.local` directory, home-config backups, or manually created
context packs.
+The checkout-only native consumer gate verifies this boundary on the current
+platform: removing both exact root and native packages leaves source, governed
+memory, home configuration, and the SQLite index bundle byte-identical. A fresh
+same-version install reopens that generation without rebuilding it. This is not
+evidence that an older release can read state written by a newer release.
+
## 5. Preserve or intentionally manage `.local`
Before any manual cleanup, inspect and back up the directory outside the
diff --git a/evals/code-intelligence/benchmark-gates.v1.json b/evals/code-intelligence/benchmark-gates.v1.json
new file mode 100644
index 00000000..20b5f81d
--- /dev/null
+++ b/evals/code-intelligence/benchmark-gates.v1.json
@@ -0,0 +1,19 @@
+{
+ "schemaVersion": "1.0.0",
+ "gateVersion": "memory-recall-code-intelligence-gates-1",
+ "languageFull": {
+ "symbolRecallMinimum": 0.95,
+ "resolvedCallPrecisionMinimum": 0.9,
+ "duplicateCanonicalSymbolMaximum": 0,
+ "deterministicStructuralFingerprintRequired": true,
+ "malformedFileRepositoryFailureMaximum": 0,
+ "explicitPartialAndUnsupportedDiagnosticsRequired": true,
+ "realRepositoryGatesRequired": true
+ },
+ "claims": {
+ "parityRequiresAllTier1Languages": true,
+ "leadershipRequiresRelevantCompetitorWin": true,
+ "parserAvailabilityIsProductSupport": false,
+ "fixtureOnlyEvidenceMayMeetFloor": false
+ }
+}
diff --git a/evals/code-intelligence/capability-matrix.v1.json b/evals/code-intelligence/capability-matrix.v1.json
new file mode 100644
index 00000000..76793d97
--- /dev/null
+++ b/evals/code-intelligence/capability-matrix.v1.json
@@ -0,0 +1,5667 @@
+{
+ "schemaVersion": "1.0.0",
+ "matrixVersion": "memory-recall-code-intelligence-capabilities-1",
+ "generatedAt": "2026-07-18T18:35:40.367Z",
+ "languages": [
+ {
+ "id": "typescript",
+ "displayName": "TypeScript",
+ "tier": 1,
+ "benchmarkStatus": "unmeasured",
+ "capabilities": {
+ "parse": {
+ "productStatus": "implemented",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/typescript.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/typescript/cirepo_typescript_microsoft_typescript.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/typescript/cirepo_typescript_microsoft_vscode.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/typescript/cirepo_typescript_vercel_next_js.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "structure": {
+ "productStatus": "implemented",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/typescript.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/typescript/cirepo_typescript_microsoft_typescript.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/typescript/cirepo_typescript_microsoft_vscode.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/typescript/cirepo_typescript_vercel_next_js.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "imports": {
+ "productStatus": "implemented",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/typescript.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/typescript/cirepo_typescript_microsoft_typescript.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/typescript/cirepo_typescript_microsoft_vscode.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/typescript/cirepo_typescript_vercel_next_js.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "exports": {
+ "productStatus": "implemented",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/typescript.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/typescript/cirepo_typescript_microsoft_typescript.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/typescript/cirepo_typescript_microsoft_vscode.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/typescript/cirepo_typescript_vercel_next_js.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "heritage": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "types": {
+ "productStatus": "implemented",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/typescript.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/typescript/cirepo_typescript_microsoft_typescript.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/typescript/cirepo_typescript_microsoft_vscode.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/typescript/cirepo_typescript_vercel_next_js.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "calls": {
+ "productStatus": "implemented",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/typescript.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/typescript/cirepo_typescript_microsoft_typescript.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/typescript/cirepo_typescript_microsoft_vscode.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/typescript/cirepo_typescript_vercel_next_js.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "config": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "frameworks": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "impact": {
+ "productStatus": "implemented",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "processes": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ }
+ },
+ "limitations": [
+ "Phase 2 native-preview evidence meets 6 capability floors; 5 applicable rows remain unmeasured; 0 rows are not applicable. Native is unbundled and JS remains the public default."
+ ]
+ },
+ {
+ "id": "javascript",
+ "displayName": "JavaScript",
+ "tier": 1,
+ "benchmarkStatus": "unmeasured",
+ "capabilities": {
+ "parse": {
+ "productStatus": "implemented",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/javascript.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/javascript/cirepo_javascript_axios_axios.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/javascript/cirepo_javascript_expressjs_express.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/javascript/cirepo_javascript_lodash_lodash.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "structure": {
+ "productStatus": "implemented",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/javascript.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/javascript/cirepo_javascript_axios_axios.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/javascript/cirepo_javascript_expressjs_express.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/javascript/cirepo_javascript_lodash_lodash.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "imports": {
+ "productStatus": "implemented",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/javascript.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/javascript/cirepo_javascript_axios_axios.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/javascript/cirepo_javascript_expressjs_express.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/javascript/cirepo_javascript_lodash_lodash.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "exports": {
+ "productStatus": "implemented",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/javascript.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/javascript/cirepo_javascript_axios_axios.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/javascript/cirepo_javascript_expressjs_express.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/javascript/cirepo_javascript_lodash_lodash.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "heritage": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "types": {
+ "productStatus": "implemented",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/javascript.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/javascript/cirepo_javascript_axios_axios.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/javascript/cirepo_javascript_expressjs_express.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/javascript/cirepo_javascript_lodash_lodash.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "calls": {
+ "productStatus": "implemented",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/javascript.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/javascript/cirepo_javascript_axios_axios.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/javascript/cirepo_javascript_expressjs_express.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/javascript/cirepo_javascript_lodash_lodash.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "config": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "frameworks": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "impact": {
+ "productStatus": "implemented",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "processes": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ }
+ },
+ "limitations": [
+ "Phase 2 native-preview evidence meets 6 capability floors; 5 applicable rows remain unmeasured; 0 rows are not applicable. Native is unbundled and JS remains the public default."
+ ]
+ },
+ {
+ "id": "python",
+ "displayName": "Python",
+ "tier": 1,
+ "benchmarkStatus": "unmeasured",
+ "capabilities": {
+ "parse": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/python.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/python/cirepo_python_fastapi_fastapi.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/python/cirepo_python_pallets_flask.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/python/cirepo_python_psf_requests.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/python/cicase_python_fastapi_app_testing.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/python/cicase_python_flask_tutorial.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/python/cicase_python_djangoproject_accounts.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "structure": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/python.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/python/cirepo_python_fastapi_fastapi.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/python/cirepo_python_pallets_flask.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/python/cirepo_python_psf_requests.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "imports": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/python.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/python/cirepo_python_fastapi_fastapi.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/python/cirepo_python_pallets_flask.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/python/cirepo_python_psf_requests.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "exports": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "heritage": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/python.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/python/cirepo_python_fastapi_fastapi.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/python/cirepo_python_pallets_flask.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/python/cirepo_python_psf_requests.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "types": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/python.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/python/cirepo_python_fastapi_fastapi.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/python/cirepo_python_pallets_flask.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/python/cirepo_python_psf_requests.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "calls": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/python.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/python/cirepo_python_fastapi_fastapi.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/python/cirepo_python_pallets_flask.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/python/cirepo_python_psf_requests.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "config": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/python.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/python/cirepo_python_fastapi_fastapi.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/python/cirepo_python_pallets_flask.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/python/cirepo_python_psf_requests.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "frameworks": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/python.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/python/cicase_python_fastapi_app_testing.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/python/cicase_python_flask_tutorial.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/python/cicase_python_djangoproject_accounts.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "impact": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf/src/main.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "processes": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ }
+ },
+ "limitations": [
+ "Phase 2 native-preview evidence meets 8 capability floors; 3 applicable rows remain unmeasured; 0 rows are not applicable. Native is unbundled and JS remains the public default."
+ ]
+ },
+ {
+ "id": "java",
+ "displayName": "Java",
+ "tier": 1,
+ "benchmarkStatus": "unmeasured",
+ "capabilities": {
+ "parse": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/java.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/java/cirepo_java_google_gson.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/java/cirepo_java_google_guava.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/java/cirepo_java_spring_projects_spring_petclinic.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "structure": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/java.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/java/cirepo_java_google_gson.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/java/cirepo_java_google_guava.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/java/cirepo_java_spring_projects_spring_petclinic.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "imports": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/java.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/java/cirepo_java_google_gson.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/java/cirepo_java_google_guava.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/java/cirepo_java_spring_projects_spring_petclinic.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "exports": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "heritage": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/java.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "types": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/java.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "calls": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/java.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/java/cirepo_java_google_gson.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/java/cirepo_java_google_guava.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/java/cirepo_java_spring_projects_spring_petclinic.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "config": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "frameworks": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/java.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/java/cirepo_java_spring_projects_spring_petclinic.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "impact": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf/src/main.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "processes": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ }
+ },
+ "limitations": [
+ "Phase 2 native-preview evidence meets 4 capability floors; 7 applicable rows remain unmeasured; 0 rows are not applicable. Native is unbundled and JS remains the public default."
+ ]
+ },
+ {
+ "id": "kotlin",
+ "displayName": "Kotlin",
+ "tier": 1,
+ "benchmarkStatus": "unmeasured",
+ "capabilities": {
+ "parse": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/kotlin.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/kotlin/cirepo_kotlin_android_nowinandroid.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/kotlin/cirepo_kotlin_kotlin_kotlinx_coroutines.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/kotlin/cirepo_kotlin_ktorio_ktor.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "structure": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/kotlin.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/kotlin/cirepo_kotlin_android_nowinandroid.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/kotlin/cirepo_kotlin_kotlin_kotlinx_coroutines.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/kotlin/cirepo_kotlin_ktorio_ktor.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "imports": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/kotlin.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/kotlin/cirepo_kotlin_android_nowinandroid.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/kotlin/cirepo_kotlin_kotlin_kotlinx_coroutines.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/kotlin/cirepo_kotlin_ktorio_ktor.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "exports": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "heritage": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/kotlin.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "types": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/kotlin.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/kotlin/cirepo_kotlin_android_nowinandroid.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/kotlin/cirepo_kotlin_kotlin_kotlinx_coroutines.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/kotlin/cirepo_kotlin_ktorio_ktor.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "calls": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/kotlin.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/kotlin/cirepo_kotlin_android_nowinandroid.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/kotlin/cirepo_kotlin_kotlin_kotlinx_coroutines.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/kotlin/cirepo_kotlin_ktorio_ktor.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "config": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "frameworks": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/kotlin.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "impact": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf/src/main.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "processes": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ }
+ },
+ "limitations": [
+ "Phase 2 native-preview evidence meets 5 capability floors; 6 applicable rows remain unmeasured; 0 rows are not applicable. Native is unbundled and JS remains the public default."
+ ]
+ },
+ {
+ "id": "csharp",
+ "displayName": "C#",
+ "tier": 1,
+ "benchmarkStatus": "unmeasured",
+ "capabilities": {
+ "parse": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/csharp.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/csharp/cirepo_csharp_dotnet_aspnetcore.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/csharp/cirepo_csharp_dotnet_runtime.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/csharp/cirepo_csharp_jamesnk_newtonsoft_json.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "structure": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/csharp.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/csharp/cirepo_csharp_dotnet_aspnetcore.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/csharp/cirepo_csharp_dotnet_runtime.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/csharp/cirepo_csharp_jamesnk_newtonsoft_json.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "imports": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/csharp.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/csharp/cirepo_csharp_dotnet_aspnetcore.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/csharp/cirepo_csharp_dotnet_runtime.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/csharp/cirepo_csharp_jamesnk_newtonsoft_json.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "exports": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "heritage": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/csharp.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "types": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "calls": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/csharp.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/csharp/cirepo_csharp_dotnet_aspnetcore.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/csharp/cirepo_csharp_dotnet_runtime.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/csharp/cirepo_csharp_jamesnk_newtonsoft_json.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "config": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "frameworks": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/csharp.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "impact": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf/src/main.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "processes": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ }
+ },
+ "limitations": [
+ "Phase 2 native-preview evidence meets 4 capability floors; 7 applicable rows remain unmeasured; 0 rows are not applicable. Native is unbundled and JS remains the public default."
+ ]
+ },
+ {
+ "id": "go",
+ "displayName": "Go",
+ "tier": 1,
+ "benchmarkStatus": "unmeasured",
+ "capabilities": {
+ "parse": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/go.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/go/cirepo_go_gin_gonic_gin.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/go/cirepo_go_go_chi_chi.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/go/cirepo_go_hashicorp_go_multierror.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "structure": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/go.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/go/cirepo_go_gin_gonic_gin.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/go/cirepo_go_go_chi_chi.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/go/cirepo_go_hashicorp_go_multierror.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "imports": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/go.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/go/cirepo_go_gin_gonic_gin.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/go/cirepo_go_go_chi_chi.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/go/cirepo_go_hashicorp_go_multierror.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "exports": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/go.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/go/cirepo_go_gin_gonic_gin.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/go/cirepo_go_go_chi_chi.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/go/cirepo_go_hashicorp_go_multierror.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "heritage": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "types": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/go.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/go/cirepo_go_gin_gonic_gin.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/go/cirepo_go_go_chi_chi.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/go/cirepo_go_hashicorp_go_multierror.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "calls": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/go.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/go/cirepo_go_gin_gonic_gin.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/go/cirepo_go_go_chi_chi.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/go/cirepo_go_hashicorp_go_multierror.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "config": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "frameworks": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/go.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/go/cirepo_go_go_chi_chi.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "impact": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf/src/main.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "processes": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ }
+ },
+ "limitations": [
+ "Phase 2 native-preview evidence meets 6 capability floors; 5 applicable rows remain unmeasured; 0 rows are not applicable. Native is unbundled and JS remains the public default."
+ ]
+ },
+ {
+ "id": "rust",
+ "displayName": "Rust",
+ "tier": 1,
+ "benchmarkStatus": "unmeasured",
+ "capabilities": {
+ "parse": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/rust.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/rust/cirepo_rust_dtolnay_itoa.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/rust/cirepo_rust_serde_rs_json.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/rust/cirepo_rust_tokio_rs_axum.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "structure": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/rust.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/rust/cirepo_rust_dtolnay_itoa.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/rust/cirepo_rust_serde_rs_json.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/rust/cirepo_rust_tokio_rs_axum.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "imports": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/rust.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/rust/cirepo_rust_dtolnay_itoa.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/rust/cirepo_rust_serde_rs_json.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/rust/cirepo_rust_tokio_rs_axum.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "exports": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/rust.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/rust/cirepo_rust_dtolnay_itoa.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/rust/cirepo_rust_serde_rs_json.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/rust/cirepo_rust_tokio_rs_axum.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "heritage": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/rust.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/rust/cirepo_rust_dtolnay_itoa.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "types": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/rust.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/rust/cirepo_rust_dtolnay_itoa.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/rust/cirepo_rust_serde_rs_json.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/rust/cirepo_rust_tokio_rs_axum.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "calls": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/rust.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/rust/cirepo_rust_dtolnay_itoa.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/rust/cirepo_rust_serde_rs_json.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/rust/cirepo_rust_tokio_rs_axum.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "config": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "frameworks": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/rust.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "impact": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf/src/main.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "processes": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ }
+ },
+ "limitations": [
+ "Phase 2 native-preview evidence meets 6 capability floors; 5 applicable rows remain unmeasured; 0 rows are not applicable. Native is unbundled and JS remains the public default."
+ ]
+ },
+ {
+ "id": "php",
+ "displayName": "PHP",
+ "tier": 1,
+ "benchmarkStatus": "unmeasured",
+ "capabilities": {
+ "parse": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/php.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/php/cirepo_php_laravel_framework.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/php/cirepo_php_slimphp_slim.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/php/cirepo_php_symfony_symfony.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "structure": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/php.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/php/cirepo_php_laravel_framework.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/php/cirepo_php_slimphp_slim.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/php/cirepo_php_symfony_symfony.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "imports": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/php.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/php/cirepo_php_laravel_framework.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/php/cirepo_php_slimphp_slim.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/php/cirepo_php_symfony_symfony.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "exports": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "heritage": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/php.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/php/cirepo_php_laravel_framework.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/php/cirepo_php_slimphp_slim.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/php/cirepo_php_symfony_symfony.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "types": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/php.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/php/cirepo_php_laravel_framework.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/php/cirepo_php_slimphp_slim.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/php/cirepo_php_symfony_symfony.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "calls": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/php.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/php/cirepo_php_laravel_framework.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/php/cirepo_php_slimphp_slim.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/php/cirepo_php_symfony_symfony.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "config": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "frameworks": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/php.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "impact": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf/src/main.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "processes": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ }
+ },
+ "limitations": [
+ "Phase 2 native-preview evidence meets 6 capability floors; 5 applicable rows remain unmeasured; 0 rows are not applicable. Native is unbundled and JS remains the public default."
+ ]
+ },
+ {
+ "id": "ruby",
+ "displayName": "Ruby",
+ "tier": 1,
+ "benchmarkStatus": "unmeasured",
+ "capabilities": {
+ "parse": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/ruby.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/ruby/cirepo_ruby_rails_rails.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/ruby/cirepo_ruby_ruby_rake.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/ruby/cirepo_ruby_sinatra_sinatra.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "structure": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/ruby.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/ruby/cirepo_ruby_rails_rails.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/ruby/cirepo_ruby_ruby_rake.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/ruby/cirepo_ruby_sinatra_sinatra.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "imports": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/ruby.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/ruby/cirepo_ruby_rails_rails.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/ruby/cirepo_ruby_ruby_rake.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/ruby/cirepo_ruby_sinatra_sinatra.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "exports": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "heritage": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/ruby.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/ruby/cirepo_ruby_sinatra_sinatra.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "types": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/ruby.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/ruby/cirepo_ruby_ruby_rake.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "calls": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/ruby.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/ruby/cirepo_ruby_rails_rails.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/ruby/cirepo_ruby_ruby_rake.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/ruby/cirepo_ruby_sinatra_sinatra.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "config": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "frameworks": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/ruby.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "impact": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf/src/main.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "processes": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ }
+ },
+ "limitations": [
+ "Phase 2 native-preview evidence meets 4 capability floors; 7 applicable rows remain unmeasured; 0 rows are not applicable. Native is unbundled and JS remains the public default."
+ ]
+ },
+ {
+ "id": "swift",
+ "displayName": "Swift",
+ "tier": 1,
+ "benchmarkStatus": "unmeasured",
+ "capabilities": {
+ "parse": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/swift.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/swift/cirepo_swift_alamofire_alamofire.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/swift/cirepo_swift_apple_swift_nio.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/swift/cirepo_swift_vapor_vapor.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "structure": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/swift.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/swift/cirepo_swift_alamofire_alamofire.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/swift/cirepo_swift_apple_swift_nio.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/swift/cirepo_swift_vapor_vapor.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "imports": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/swift.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/swift/cirepo_swift_alamofire_alamofire.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/swift/cirepo_swift_apple_swift_nio.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/swift/cirepo_swift_vapor_vapor.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "exports": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "heritage": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/swift.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/swift/cirepo_swift_alamofire_alamofire.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/swift/cirepo_swift_apple_swift_nio.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/swift/cirepo_swift_vapor_vapor.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "types": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/swift.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/swift/cirepo_swift_alamofire_alamofire.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/swift/cirepo_swift_apple_swift_nio.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/swift/cirepo_swift_vapor_vapor.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "calls": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/swift.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "config": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "frameworks": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/swift.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "impact": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf/src/main.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "processes": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ }
+ },
+ "limitations": [
+ "Phase 2 native-preview evidence meets 5 capability floors; 6 applicable rows remain unmeasured; 0 rows are not applicable. Native is unbundled and JS remains the public default."
+ ]
+ },
+ {
+ "id": "c",
+ "displayName": "C",
+ "tier": 1,
+ "benchmarkStatus": "unmeasured",
+ "capabilities": {
+ "parse": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/c.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/c/cirepo_c_antirez_kilo.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/c/cirepo_c_curl_curl.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/c/cirepo_c_libuv_libuv.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "structure": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/c.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/c/cirepo_c_antirez_kilo.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/c/cirepo_c_curl_curl.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/c/cirepo_c_libuv_libuv.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "imports": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/c.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/c/cirepo_c_antirez_kilo.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/c/cirepo_c_curl_curl.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/c/cirepo_c_libuv_libuv.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "exports": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "heritage": {
+ "productStatus": "unsupported",
+ "benchmarkStatus": "not-applicable",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "C has no language-level inheritance, interface, trait, protocol, or mixin relationship."
+ ],
+ "applicability": "not-applicable",
+ "applicabilityRationale": "C has no language-level inheritance, interface, trait, protocol, or mixin relationship."
+ },
+ "types": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/c/cirepo_c_libuv_libuv.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "calls": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/c.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/c/cirepo_c_antirez_kilo.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/c/cirepo_c_curl_curl.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/c/cirepo_c_libuv_libuv.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "config": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/c.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "frameworks": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "impact": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf/src/main.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "processes": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ }
+ },
+ "limitations": [
+ "Phase 2 native-preview evidence meets 4 capability floors; 6 applicable rows remain unmeasured; 1 rows are not applicable. Native is unbundled and JS remains the public default."
+ ]
+ },
+ {
+ "id": "cpp",
+ "displayName": "C++",
+ "tier": 1,
+ "benchmarkStatus": "unmeasured",
+ "capabilities": {
+ "parse": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/cpp.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/cpp/cirepo_cpp_catchorg_catch2.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/cpp/cirepo_cpp_fmtlib_fmt.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/cpp/cirepo_cpp_nlohmann_json.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "structure": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/cpp.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/cpp/cirepo_cpp_catchorg_catch2.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/cpp/cirepo_cpp_fmtlib_fmt.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/cpp/cirepo_cpp_nlohmann_json.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "imports": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/cpp.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/cpp/cirepo_cpp_catchorg_catch2.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/cpp/cirepo_cpp_fmtlib_fmt.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/cpp/cirepo_cpp_nlohmann_json.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "exports": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "heritage": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/cpp.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/cpp/cirepo_cpp_catchorg_catch2.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/cpp/cirepo_cpp_fmtlib_fmt.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/cpp/cirepo_cpp_nlohmann_json.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "types": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/cpp.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/cpp/cirepo_cpp_catchorg_catch2.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/cpp/cirepo_cpp_fmtlib_fmt.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/cpp/cirepo_cpp_nlohmann_json.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "calls": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/cpp.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/cpp/cirepo_cpp_catchorg_catch2.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/cpp/cirepo_cpp_fmtlib_fmt.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/cpp/cirepo_cpp_nlohmann_json.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "config": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/cpp.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "frameworks": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "impact": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf/src/main.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "processes": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ }
+ },
+ "limitations": [
+ "Phase 2 native-preview evidence meets 6 capability floors; 5 applicable rows remain unmeasured; 0 rows are not applicable. Native is unbundled and JS remains the public default."
+ ]
+ },
+ {
+ "id": "dart",
+ "displayName": "Dart",
+ "tier": 1,
+ "benchmarkStatus": "unmeasured",
+ "capabilities": {
+ "parse": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/dart.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/dart/cirepo_dart_dart_lang_http.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/dart/cirepo_dart_dart_lang_shelf.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/dart/cirepo_dart_flutter_samples.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "structure": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/dart.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/dart/cirepo_dart_dart_lang_http.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/dart/cirepo_dart_dart_lang_shelf.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/dart/cirepo_dart_flutter_samples.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "imports": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/dart.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/dart/cirepo_dart_dart_lang_http.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/dart/cirepo_dart_dart_lang_shelf.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/dart/cirepo_dart_flutter_samples.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "exports": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/dart.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/dart/cirepo_dart_dart_lang_http.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/dart/cirepo_dart_dart_lang_shelf.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/dart/cirepo_dart_flutter_samples.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "heritage": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/dart.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/dart/cirepo_dart_dart_lang_http.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/dart/cirepo_dart_dart_lang_shelf.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/dart/cirepo_dart_flutter_samples.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "types": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/dart.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/dart/cirepo_dart_dart_lang_http.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/dart/cirepo_dart_dart_lang_shelf.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/dart/cirepo_dart_flutter_samples.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "calls": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/dart.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/dart/cirepo_dart_dart_lang_http.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/dart/cirepo_dart_dart_lang_shelf.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/dart/cirepo_dart_flutter_samples.json"
+ }
+ ],
+ "limitations": [
+ "Sampled native-preview evidence from the fixture and at least three pinned repositories meets the Phase 2 floor; public defaults are unchanged."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "config": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/dart.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "frameworks": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ },
+ {
+ "class": "fixture",
+ "path": "evals/code-intelligence/truth/fixtures/dart.json"
+ },
+ {
+ "class": "real-repo",
+ "path": "evals/code-intelligence/truth/repositories/dart/cirepo_dart_flutter_samples.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "impact": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf/src/main.rs"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ },
+ "processes": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ },
+ {
+ "class": "benchmark",
+ "path": "evals/code-intelligence/results/phase2-tier1-summary.json"
+ }
+ ],
+ "limitations": [
+ "Phase 2 has reviewed native-preview evidence, but not qualifying coverage from the fixture and at least three pinned repositories for this capability."
+ ],
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract."
+ }
+ },
+ "limitations": [
+ "Phase 2 native-preview evidence meets 7 capability floors; 4 applicable rows remain unmeasured; 0 rows are not applicable. Native is unbundled and JS remains the public default."
+ ]
+ },
+ {
+ "id": "lua",
+ "displayName": "Lua",
+ "tier": 2,
+ "benchmarkStatus": "unmeasured",
+ "capabilities": {
+ "parse": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ }
+ ],
+ "limitations": [
+ "Behavior exists only on the unbundled Rust path and is not a public package promise."
+ ]
+ },
+ "structure": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ }
+ ],
+ "limitations": [
+ "Behavior exists only on the unbundled Rust path and is not a public package promise."
+ ]
+ },
+ "imports": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "exports": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "heritage": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "types": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "calls": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "config": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "frameworks": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "impact": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "processes": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ }
+ },
+ "limitations": [
+ "This parser remains experimental and outside the Tier 1 release scope."
+ ]
+ },
+ {
+ "id": "bash",
+ "displayName": "Bash",
+ "tier": 2,
+ "benchmarkStatus": "unmeasured",
+ "capabilities": {
+ "parse": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ }
+ ],
+ "limitations": [
+ "Behavior exists only on the unbundled Rust path and is not a public package promise."
+ ]
+ },
+ "structure": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ }
+ ],
+ "limitations": [
+ "Behavior exists only on the unbundled Rust path and is not a public package promise."
+ ]
+ },
+ "imports": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "exports": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "heritage": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "types": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "calls": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "config": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "frameworks": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "impact": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "processes": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ }
+ },
+ "limitations": [
+ "This parser remains experimental and outside the Tier 1 release scope."
+ ]
+ },
+ {
+ "id": "sql",
+ "displayName": "SQL",
+ "tier": 2,
+ "benchmarkStatus": "unmeasured",
+ "capabilities": {
+ "parse": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ }
+ ],
+ "limitations": [
+ "Behavior exists only on the unbundled Rust path and is not a public package promise."
+ ]
+ },
+ "structure": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ }
+ ],
+ "limitations": [
+ "Behavior exists only on the unbundled Rust path and is not a public package promise."
+ ]
+ },
+ "imports": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "exports": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "heritage": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "types": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "calls": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "config": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "frameworks": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "impact": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "processes": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ }
+ },
+ "limitations": [
+ "This parser remains experimental and outside the Tier 1 release scope."
+ ]
+ },
+ {
+ "id": "objective-c",
+ "displayName": "Objective-C",
+ "tier": 2,
+ "benchmarkStatus": "unmeasured",
+ "capabilities": {
+ "parse": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ }
+ ],
+ "limitations": [
+ "Behavior exists only on the unbundled Rust path and is not a public package promise."
+ ]
+ },
+ "structure": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ }
+ ],
+ "limitations": [
+ "Behavior exists only on the unbundled Rust path and is not a public package promise."
+ ]
+ },
+ "imports": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "exports": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "heritage": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "types": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "calls": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "config": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "frameworks": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "impact": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "processes": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ }
+ },
+ "limitations": [
+ "This parser remains experimental and outside the Tier 1 release scope."
+ ]
+ },
+ {
+ "id": "scala",
+ "displayName": "Scala",
+ "tier": 2,
+ "benchmarkStatus": "unmeasured",
+ "capabilities": {
+ "parse": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ }
+ ],
+ "limitations": [
+ "Behavior exists only on the unbundled Rust path and is not a public package promise."
+ ]
+ },
+ "structure": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ }
+ ],
+ "limitations": [
+ "Behavior exists only on the unbundled Rust path and is not a public package promise."
+ ]
+ },
+ "imports": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "exports": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "heritage": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "types": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "calls": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "config": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "frameworks": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "impact": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "processes": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ }
+ },
+ "limitations": [
+ "This parser remains experimental and outside the Tier 1 release scope."
+ ]
+ },
+ {
+ "id": "r",
+ "displayName": "R",
+ "tier": 2,
+ "benchmarkStatus": "unmeasured",
+ "capabilities": {
+ "parse": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ }
+ ],
+ "limitations": [
+ "Behavior exists only on the unbundled Rust path and is not a public package promise."
+ ]
+ },
+ "structure": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ }
+ ],
+ "limitations": [
+ "Behavior exists only on the unbundled Rust path and is not a public package promise."
+ ]
+ },
+ "imports": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "exports": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "heritage": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "types": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "calls": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "config": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "frameworks": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "impact": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "processes": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ }
+ },
+ "limitations": [
+ "This parser remains experimental and outside the Tier 1 release scope."
+ ]
+ },
+ {
+ "id": "julia",
+ "displayName": "Julia",
+ "tier": 2,
+ "benchmarkStatus": "unmeasured",
+ "capabilities": {
+ "parse": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ }
+ ],
+ "limitations": [
+ "Behavior exists only on the unbundled Rust path and is not a public package promise."
+ ]
+ },
+ "structure": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ }
+ ],
+ "limitations": [
+ "Behavior exists only on the unbundled Rust path and is not a public package promise."
+ ]
+ },
+ "imports": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "exports": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "heritage": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "types": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "calls": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "config": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "frameworks": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "impact": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "processes": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ }
+ },
+ "limitations": [
+ "This parser remains experimental and outside the Tier 1 release scope."
+ ]
+ },
+ {
+ "id": "zig",
+ "displayName": "Zig",
+ "tier": 2,
+ "benchmarkStatus": "unmeasured",
+ "capabilities": {
+ "parse": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ }
+ ],
+ "limitations": [
+ "Behavior exists only on the unbundled Rust path and is not a public package promise."
+ ]
+ },
+ "structure": {
+ "productStatus": "experimental",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "rust/oaf-ingest/src/lib.rs"
+ }
+ ],
+ "limitations": [
+ "Behavior exists only on the unbundled Rust path and is not a public package promise."
+ ]
+ },
+ "imports": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "exports": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "heritage": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "types": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "calls": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "config": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "frameworks": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "impact": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ },
+ "processes": {
+ "productStatus": "specified",
+ "benchmarkStatus": "unmeasured",
+ "evidence": [
+ {
+ "class": "documentation",
+ "path": "docs/superpowers/specs/2026-07-16-memory-recall-polyglot-leadership-design.md"
+ }
+ ],
+ "limitations": [
+ "The target contract is written, but no qualifying production implementation is claimed."
+ ]
+ }
+ },
+ "limitations": [
+ "This parser remains experimental and outside the Tier 1 release scope."
+ ]
+ }
+ ]
+}
diff --git a/evals/code-intelligence/corpus-candidates.v1.json b/evals/code-intelligence/corpus-candidates.v1.json
new file mode 100644
index 00000000..79dfa60a
--- /dev/null
+++ b/evals/code-intelligence/corpus-candidates.v1.json
@@ -0,0 +1,393 @@
+{
+ "schemaVersion": "1.0.0",
+ "candidateVersion": "memory-recall-code-intelligence-candidates-1",
+ "repositories": [
+ {
+ "id": "cirepo_typescript_microsoft_typescript",
+ "url": "https://github.com/microsoft/TypeScript.git",
+ "primaryLanguage": "typescript",
+ "sizeClass": "large",
+ "role": "compiler",
+ "licenseExpression": "Apache-2.0",
+ "licenseUrl": "https://github.com/microsoft/TypeScript/blob/HEAD/LICENSE.txt"
+ },
+ {
+ "id": "cirepo_typescript_microsoft_vscode",
+ "url": "https://github.com/microsoft/vscode.git",
+ "primaryLanguage": "typescript",
+ "sizeClass": "large",
+ "role": "application",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/microsoft/vscode/blob/HEAD/LICENSE.txt"
+ },
+ {
+ "id": "cirepo_typescript_vercel_next_js",
+ "url": "https://github.com/vercel/next.js.git",
+ "primaryLanguage": "typescript",
+ "sizeClass": "large",
+ "role": "framework",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/vercel/next.js/blob/HEAD/license.md"
+ },
+ {
+ "id": "cirepo_javascript_expressjs_express",
+ "url": "https://github.com/expressjs/express.git",
+ "primaryLanguage": "javascript",
+ "sizeClass": "medium",
+ "role": "framework",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/expressjs/express/blob/HEAD/LICENSE"
+ },
+ {
+ "id": "cirepo_javascript_lodash_lodash",
+ "url": "https://github.com/lodash/lodash.git",
+ "primaryLanguage": "javascript",
+ "sizeClass": "medium",
+ "role": "library",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/lodash/lodash/blob/HEAD/LICENSE"
+ },
+ {
+ "id": "cirepo_javascript_axios_axios",
+ "url": "https://github.com/axios/axios.git",
+ "primaryLanguage": "javascript",
+ "sizeClass": "medium",
+ "role": "library",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/axios/axios/blob/HEAD/LICENSE"
+ },
+ {
+ "id": "cirepo_python_pallets_flask",
+ "url": "https://github.com/pallets/flask.git",
+ "primaryLanguage": "python",
+ "sizeClass": "medium",
+ "role": "framework",
+ "licenseExpression": "BSD-3-Clause",
+ "licenseUrl": "https://github.com/pallets/flask/blob/HEAD/LICENSE.txt"
+ },
+ {
+ "id": "cirepo_python_psf_requests",
+ "url": "https://github.com/psf/requests.git",
+ "primaryLanguage": "python",
+ "sizeClass": "medium",
+ "role": "library",
+ "licenseExpression": "Apache-2.0",
+ "licenseUrl": "https://github.com/psf/requests/blob/HEAD/LICENSE"
+ },
+ {
+ "id": "cirepo_python_fastapi_fastapi",
+ "url": "https://github.com/fastapi/fastapi.git",
+ "primaryLanguage": "python",
+ "sizeClass": "large",
+ "role": "framework",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/fastapi/fastapi/blob/HEAD/LICENSE"
+ },
+ {
+ "id": "cirepo_python_django_djangoproject_com",
+ "url": "https://github.com/django/djangoproject.com.git",
+ "primaryLanguage": "python",
+ "sizeClass": "medium",
+ "role": "application",
+ "licenseExpression": "BSD-3-Clause",
+ "licenseUrl": "https://github.com/django/djangoproject.com/blob/HEAD/LICENSE"
+ },
+ {
+ "id": "cirepo_java_spring_projects_spring_petclinic",
+ "url": "https://github.com/spring-projects/spring-petclinic.git",
+ "primaryLanguage": "java",
+ "sizeClass": "medium",
+ "role": "application",
+ "licenseExpression": "Apache-2.0",
+ "licenseUrl": "https://github.com/spring-projects/spring-petclinic/blob/HEAD/LICENSE.txt"
+ },
+ {
+ "id": "cirepo_java_google_gson",
+ "url": "https://github.com/google/gson.git",
+ "primaryLanguage": "java",
+ "sizeClass": "medium",
+ "role": "library",
+ "licenseExpression": "Apache-2.0",
+ "licenseUrl": "https://github.com/google/gson/blob/HEAD/LICENSE"
+ },
+ {
+ "id": "cirepo_java_google_guava",
+ "url": "https://github.com/google/guava.git",
+ "primaryLanguage": "java",
+ "sizeClass": "large",
+ "role": "library",
+ "licenseExpression": "Apache-2.0",
+ "licenseUrl": "https://github.com/google/guava/blob/HEAD/LICENSE"
+ },
+ {
+ "id": "cirepo_kotlin_ktorio_ktor",
+ "url": "https://github.com/ktorio/ktor.git",
+ "primaryLanguage": "kotlin",
+ "sizeClass": "large",
+ "role": "framework",
+ "licenseExpression": "Apache-2.0",
+ "licenseUrl": "https://github.com/ktorio/ktor/blob/HEAD/LICENSE"
+ },
+ {
+ "id": "cirepo_kotlin_kotlin_kotlinx_coroutines",
+ "url": "https://github.com/Kotlin/kotlinx.coroutines.git",
+ "primaryLanguage": "kotlin",
+ "sizeClass": "large",
+ "role": "library",
+ "licenseExpression": "Apache-2.0",
+ "licenseUrl": "https://github.com/Kotlin/kotlinx.coroutines/blob/HEAD/LICENSE.txt"
+ },
+ {
+ "id": "cirepo_kotlin_android_nowinandroid",
+ "url": "https://github.com/android/nowinandroid.git",
+ "primaryLanguage": "kotlin",
+ "sizeClass": "large",
+ "role": "application",
+ "licenseExpression": "Apache-2.0",
+ "licenseUrl": "https://github.com/android/nowinandroid/blob/HEAD/LICENSE"
+ },
+ {
+ "id": "cirepo_csharp_dotnet_aspnetcore",
+ "url": "https://github.com/dotnet/aspnetcore.git",
+ "primaryLanguage": "csharp",
+ "sizeClass": "large",
+ "role": "framework",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/dotnet/aspnetcore/blob/HEAD/LICENSE.txt"
+ },
+ {
+ "id": "cirepo_csharp_dotnet_runtime",
+ "url": "https://github.com/dotnet/runtime.git",
+ "primaryLanguage": "csharp",
+ "sizeClass": "large",
+ "role": "runtime",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/dotnet/runtime/blob/HEAD/LICENSE.TXT"
+ },
+ {
+ "id": "cirepo_csharp_jamesnk_newtonsoft_json",
+ "url": "https://github.com/JamesNK/Newtonsoft.Json.git",
+ "primaryLanguage": "csharp",
+ "sizeClass": "medium",
+ "role": "library",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/JamesNK/Newtonsoft.Json/blob/HEAD/LICENSE.md"
+ },
+ {
+ "id": "cirepo_go_gin_gonic_gin",
+ "url": "https://github.com/gin-gonic/gin.git",
+ "primaryLanguage": "go",
+ "sizeClass": "medium",
+ "role": "framework",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/gin-gonic/gin/blob/HEAD/LICENSE"
+ },
+ {
+ "id": "cirepo_go_go_chi_chi",
+ "url": "https://github.com/go-chi/chi.git",
+ "primaryLanguage": "go",
+ "sizeClass": "medium",
+ "role": "framework",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/go-chi/chi/blob/HEAD/LICENSE"
+ },
+ {
+ "id": "cirepo_go_hashicorp_go_multierror",
+ "url": "https://github.com/hashicorp/go-multierror.git",
+ "primaryLanguage": "go",
+ "sizeClass": "small",
+ "role": "library",
+ "licenseExpression": "MPL-2.0",
+ "licenseUrl": "https://github.com/hashicorp/go-multierror/blob/HEAD/LICENSE"
+ },
+ {
+ "id": "cirepo_rust_dtolnay_itoa",
+ "url": "https://github.com/dtolnay/itoa.git",
+ "primaryLanguage": "rust",
+ "sizeClass": "small",
+ "role": "library",
+ "licenseExpression": "Apache-2.0",
+ "licenseUrl": "https://github.com/dtolnay/itoa/blob/HEAD/LICENSE-APACHE"
+ },
+ {
+ "id": "cirepo_rust_tokio_rs_axum",
+ "url": "https://github.com/tokio-rs/axum.git",
+ "primaryLanguage": "rust",
+ "sizeClass": "medium",
+ "role": "framework",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/tokio-rs/axum/blob/HEAD/LICENSE"
+ },
+ {
+ "id": "cirepo_rust_serde_rs_json",
+ "url": "https://github.com/serde-rs/json.git",
+ "primaryLanguage": "rust",
+ "sizeClass": "medium",
+ "role": "library",
+ "licenseExpression": "Apache-2.0",
+ "licenseUrl": "https://github.com/serde-rs/json/blob/HEAD/LICENSE-APACHE"
+ },
+ {
+ "id": "cirepo_php_laravel_framework",
+ "url": "https://github.com/laravel/framework.git",
+ "primaryLanguage": "php",
+ "sizeClass": "large",
+ "role": "framework",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/laravel/framework/blob/HEAD/LICENSE.md"
+ },
+ {
+ "id": "cirepo_php_symfony_symfony",
+ "url": "https://github.com/symfony/symfony.git",
+ "primaryLanguage": "php",
+ "sizeClass": "large",
+ "role": "framework",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/symfony/symfony/blob/HEAD/LICENSE"
+ },
+ {
+ "id": "cirepo_php_slimphp_slim",
+ "url": "https://github.com/slimphp/Slim.git",
+ "primaryLanguage": "php",
+ "sizeClass": "medium",
+ "role": "framework",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/slimphp/Slim/blob/HEAD/LICENSE.md"
+ },
+ {
+ "id": "cirepo_ruby_rails_rails",
+ "url": "https://github.com/rails/rails.git",
+ "primaryLanguage": "ruby",
+ "sizeClass": "large",
+ "role": "framework",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/rails/rails/blob/HEAD/MIT-LICENSE"
+ },
+ {
+ "id": "cirepo_ruby_sinatra_sinatra",
+ "url": "https://github.com/sinatra/sinatra.git",
+ "primaryLanguage": "ruby",
+ "sizeClass": "medium",
+ "role": "framework",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/sinatra/sinatra/blob/HEAD/LICENSE"
+ },
+ {
+ "id": "cirepo_ruby_ruby_rake",
+ "url": "https://github.com/ruby/rake.git",
+ "primaryLanguage": "ruby",
+ "sizeClass": "medium",
+ "role": "tool",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/ruby/rake/blob/HEAD/MIT-LICENSE"
+ },
+ {
+ "id": "cirepo_swift_vapor_vapor",
+ "url": "https://github.com/vapor/vapor.git",
+ "primaryLanguage": "swift",
+ "sizeClass": "medium",
+ "role": "framework",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/vapor/vapor/blob/HEAD/LICENSE"
+ },
+ {
+ "id": "cirepo_swift_alamofire_alamofire",
+ "url": "https://github.com/Alamofire/Alamofire.git",
+ "primaryLanguage": "swift",
+ "sizeClass": "medium",
+ "role": "library",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/Alamofire/Alamofire/blob/HEAD/LICENSE"
+ },
+ {
+ "id": "cirepo_swift_apple_swift_nio",
+ "url": "https://github.com/apple/swift-nio.git",
+ "primaryLanguage": "swift",
+ "sizeClass": "large",
+ "role": "runtime",
+ "licenseExpression": "Apache-2.0",
+ "licenseUrl": "https://github.com/apple/swift-nio/blob/HEAD/LICENSE.txt"
+ },
+ {
+ "id": "cirepo_c_antirez_kilo",
+ "url": "https://github.com/antirez/kilo.git",
+ "primaryLanguage": "c",
+ "sizeClass": "small",
+ "role": "application",
+ "licenseExpression": "BSD-2-Clause",
+ "licenseUrl": "https://github.com/antirez/kilo/blob/HEAD/LICENSE"
+ },
+ {
+ "id": "cirepo_c_libuv_libuv",
+ "url": "https://github.com/libuv/libuv.git",
+ "primaryLanguage": "c",
+ "sizeClass": "large",
+ "role": "runtime",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/libuv/libuv/blob/HEAD/LICENSE"
+ },
+ {
+ "id": "cirepo_c_curl_curl",
+ "url": "https://github.com/curl/curl.git",
+ "primaryLanguage": "c",
+ "sizeClass": "large",
+ "role": "library",
+ "licenseExpression": "curl",
+ "licenseUrl": "https://github.com/curl/curl/blob/HEAD/COPYING"
+ },
+ {
+ "id": "cirepo_cpp_fmtlib_fmt",
+ "url": "https://github.com/fmtlib/fmt.git",
+ "primaryLanguage": "cpp",
+ "sizeClass": "medium",
+ "role": "library",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/fmtlib/fmt/blob/HEAD/LICENSE"
+ },
+ {
+ "id": "cirepo_cpp_catchorg_catch2",
+ "url": "https://github.com/catchorg/Catch2.git",
+ "primaryLanguage": "cpp",
+ "sizeClass": "large",
+ "role": "test-framework",
+ "licenseExpression": "BSL-1.0",
+ "licenseUrl": "https://github.com/catchorg/Catch2/blob/HEAD/LICENSE.txt"
+ },
+ {
+ "id": "cirepo_cpp_nlohmann_json",
+ "url": "https://github.com/nlohmann/json.git",
+ "primaryLanguage": "cpp",
+ "sizeClass": "large",
+ "role": "library",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/nlohmann/json/blob/HEAD/LICENSE.MIT"
+ },
+ {
+ "id": "cirepo_dart_dart_lang_http",
+ "url": "https://github.com/dart-lang/http.git",
+ "primaryLanguage": "dart",
+ "sizeClass": "medium",
+ "role": "library",
+ "licenseExpression": "BSD-3-Clause",
+ "licenseUrl": "https://github.com/dart-lang/http/blob/HEAD/LICENSE"
+ },
+ {
+ "id": "cirepo_dart_dart_lang_shelf",
+ "url": "https://github.com/dart-lang/shelf.git",
+ "primaryLanguage": "dart",
+ "sizeClass": "medium",
+ "role": "framework",
+ "licenseExpression": "BSD-3-Clause",
+ "licenseUrl": "https://github.com/dart-lang/shelf/blob/HEAD/LICENSE"
+ },
+ {
+ "id": "cirepo_dart_flutter_samples",
+ "url": "https://github.com/flutter/samples.git",
+ "primaryLanguage": "dart",
+ "sizeClass": "large",
+ "role": "application",
+ "licenseExpression": "BSD-3-Clause",
+ "licenseUrl": "https://github.com/flutter/samples/blob/HEAD/LICENSE"
+ }
+ ]
+}
diff --git a/evals/code-intelligence/corpus.v1.json b/evals/code-intelligence/corpus.v1.json
new file mode 100644
index 00000000..4423e662
--- /dev/null
+++ b/evals/code-intelligence/corpus.v1.json
@@ -0,0 +1,439 @@
+{
+ "schemaVersion": "1.0.0",
+ "corpusVersion": "memory-recall-code-intelligence-corpus-1",
+ "generatedAt": "2026-07-17T20:01:19.082Z",
+ "sourceCandidatesFingerprint": "sha256:372c4321cc10ccea8995f1f1bf69ca8edb247e3357bf09598aab3b749104e16a",
+ "repositories": [
+ {
+ "id": "cirepo_typescript_microsoft_typescript",
+ "url": "https://github.com/microsoft/TypeScript.git",
+ "primaryLanguage": "typescript",
+ "sizeClass": "large",
+ "role": "compiler",
+ "licenseExpression": "Apache-2.0",
+ "licenseUrl": "https://github.com/microsoft/TypeScript/blob/HEAD/LICENSE.txt",
+ "commit": "637d5746b70257028fb95aad32ddec6b26ab0a14"
+ },
+ {
+ "id": "cirepo_typescript_microsoft_vscode",
+ "url": "https://github.com/microsoft/vscode.git",
+ "primaryLanguage": "typescript",
+ "sizeClass": "large",
+ "role": "application",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/microsoft/vscode/blob/HEAD/LICENSE.txt",
+ "commit": "53e335d0387969ba6b6bd68f2481be89252089ca"
+ },
+ {
+ "id": "cirepo_typescript_vercel_next_js",
+ "url": "https://github.com/vercel/next.js.git",
+ "primaryLanguage": "typescript",
+ "sizeClass": "large",
+ "role": "framework",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/vercel/next.js/blob/HEAD/license.md",
+ "commit": "153bf8ac5fa00888ef5fbb2b65cac12f0942a44f"
+ },
+ {
+ "id": "cirepo_javascript_axios_axios",
+ "url": "https://github.com/axios/axios.git",
+ "primaryLanguage": "javascript",
+ "sizeClass": "medium",
+ "role": "library",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/axios/axios/blob/HEAD/LICENSE",
+ "commit": "3041b8fd1daf17404d1bad1f9d94026ea5ab400b"
+ },
+ {
+ "id": "cirepo_javascript_expressjs_express",
+ "url": "https://github.com/expressjs/express.git",
+ "primaryLanguage": "javascript",
+ "sizeClass": "medium",
+ "role": "framework",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/expressjs/express/blob/HEAD/LICENSE",
+ "commit": "ae6dd37680e3a00618d6c8a3e522f0ee4eeba1a4"
+ },
+ {
+ "id": "cirepo_javascript_lodash_lodash",
+ "url": "https://github.com/lodash/lodash.git",
+ "primaryLanguage": "javascript",
+ "sizeClass": "medium",
+ "role": "library",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/lodash/lodash/blob/HEAD/LICENSE",
+ "commit": "a666ba591064c8011988275790ad7d625279f09c"
+ },
+ {
+ "id": "cirepo_python_django_djangoproject_com",
+ "url": "https://github.com/django/djangoproject.com.git",
+ "primaryLanguage": "python",
+ "sizeClass": "medium",
+ "role": "application",
+ "licenseExpression": "BSD-3-Clause",
+ "licenseUrl": "https://github.com/django/djangoproject.com/blob/HEAD/LICENSE",
+ "commit": "7a19ab3bce8f62fed03bb3eef2c19f2d0af15470"
+ },
+ {
+ "id": "cirepo_python_fastapi_fastapi",
+ "url": "https://github.com/fastapi/fastapi.git",
+ "primaryLanguage": "python",
+ "sizeClass": "large",
+ "role": "framework",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/fastapi/fastapi/blob/HEAD/LICENSE",
+ "commit": "9b8410bdc9fa1fd679ea7e65b926535c7045ab87"
+ },
+ {
+ "id": "cirepo_python_pallets_flask",
+ "url": "https://github.com/pallets/flask.git",
+ "primaryLanguage": "python",
+ "sizeClass": "medium",
+ "role": "framework",
+ "licenseExpression": "BSD-3-Clause",
+ "licenseUrl": "https://github.com/pallets/flask/blob/HEAD/LICENSE.txt",
+ "commit": "36e4a824f340fdee7ed50937ba8e7f6bc7d17f81"
+ },
+ {
+ "id": "cirepo_python_psf_requests",
+ "url": "https://github.com/psf/requests.git",
+ "primaryLanguage": "python",
+ "sizeClass": "medium",
+ "role": "library",
+ "licenseExpression": "Apache-2.0",
+ "licenseUrl": "https://github.com/psf/requests/blob/HEAD/LICENSE",
+ "commit": "f361ead047be5cb873174218582f7d8b9fcd9f49"
+ },
+ {
+ "id": "cirepo_java_google_gson",
+ "url": "https://github.com/google/gson.git",
+ "primaryLanguage": "java",
+ "sizeClass": "medium",
+ "role": "library",
+ "licenseExpression": "Apache-2.0",
+ "licenseUrl": "https://github.com/google/gson/blob/HEAD/LICENSE",
+ "commit": "c9f3fd55854a743b66f857ace3c7b268ea3e2ef7"
+ },
+ {
+ "id": "cirepo_java_google_guava",
+ "url": "https://github.com/google/guava.git",
+ "primaryLanguage": "java",
+ "sizeClass": "large",
+ "role": "library",
+ "licenseExpression": "Apache-2.0",
+ "licenseUrl": "https://github.com/google/guava/blob/HEAD/LICENSE",
+ "commit": "5143dbe06b8a1632b50c8fe19b2870fe135e46e2"
+ },
+ {
+ "id": "cirepo_java_spring_projects_spring_petclinic",
+ "url": "https://github.com/spring-projects/spring-petclinic.git",
+ "primaryLanguage": "java",
+ "sizeClass": "medium",
+ "role": "application",
+ "licenseExpression": "Apache-2.0",
+ "licenseUrl": "https://github.com/spring-projects/spring-petclinic/blob/HEAD/LICENSE.txt",
+ "commit": "51045d1648dad955df586150c1a1a6e22ef400c2"
+ },
+ {
+ "id": "cirepo_kotlin_android_nowinandroid",
+ "url": "https://github.com/android/nowinandroid.git",
+ "primaryLanguage": "kotlin",
+ "sizeClass": "large",
+ "role": "application",
+ "licenseExpression": "Apache-2.0",
+ "licenseUrl": "https://github.com/android/nowinandroid/blob/HEAD/LICENSE",
+ "commit": "7d45eae4f8720a0c77f507712ba2437ff974b6ed"
+ },
+ {
+ "id": "cirepo_kotlin_kotlin_kotlinx_coroutines",
+ "url": "https://github.com/Kotlin/kotlinx.coroutines.git",
+ "primaryLanguage": "kotlin",
+ "sizeClass": "large",
+ "role": "library",
+ "licenseExpression": "Apache-2.0",
+ "licenseUrl": "https://github.com/Kotlin/kotlinx.coroutines/blob/HEAD/LICENSE.txt",
+ "commit": "165c6cb5859b5365dec193abc75dee9f49ce1389"
+ },
+ {
+ "id": "cirepo_kotlin_ktorio_ktor",
+ "url": "https://github.com/ktorio/ktor.git",
+ "primaryLanguage": "kotlin",
+ "sizeClass": "large",
+ "role": "framework",
+ "licenseExpression": "Apache-2.0",
+ "licenseUrl": "https://github.com/ktorio/ktor/blob/HEAD/LICENSE",
+ "commit": "fc6595632e7412abb98b941f926d0ea13c7647d1"
+ },
+ {
+ "id": "cirepo_csharp_dotnet_aspnetcore",
+ "url": "https://github.com/dotnet/aspnetcore.git",
+ "primaryLanguage": "csharp",
+ "sizeClass": "large",
+ "role": "framework",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/dotnet/aspnetcore/blob/HEAD/LICENSE.txt",
+ "commit": "d89ecc425733c5439096864cb9f7f97cab5416a0"
+ },
+ {
+ "id": "cirepo_csharp_dotnet_runtime",
+ "url": "https://github.com/dotnet/runtime.git",
+ "primaryLanguage": "csharp",
+ "sizeClass": "large",
+ "role": "runtime",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/dotnet/runtime/blob/HEAD/LICENSE.TXT",
+ "commit": "e487c08fc5e689918da3e7fbb2747ca8b02c260d"
+ },
+ {
+ "id": "cirepo_csharp_jamesnk_newtonsoft_json",
+ "url": "https://github.com/JamesNK/Newtonsoft.Json.git",
+ "primaryLanguage": "csharp",
+ "sizeClass": "medium",
+ "role": "library",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/JamesNK/Newtonsoft.Json/blob/HEAD/LICENSE.md",
+ "commit": "4f73e74372445108d2c1bda37b36e6f5e43402e0"
+ },
+ {
+ "id": "cirepo_go_gin_gonic_gin",
+ "url": "https://github.com/gin-gonic/gin.git",
+ "primaryLanguage": "go",
+ "sizeClass": "medium",
+ "role": "framework",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/gin-gonic/gin/blob/HEAD/LICENSE",
+ "commit": "34dac209ffb6ef85cc78c5d217bbb7ad001d68fd"
+ },
+ {
+ "id": "cirepo_go_go_chi_chi",
+ "url": "https://github.com/go-chi/chi.git",
+ "primaryLanguage": "go",
+ "sizeClass": "medium",
+ "role": "framework",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/go-chi/chi/blob/HEAD/LICENSE",
+ "commit": "8b258c7bb28f97a5f2a856ff7ef962578fec9215"
+ },
+ {
+ "id": "cirepo_go_hashicorp_go_multierror",
+ "url": "https://github.com/hashicorp/go-multierror.git",
+ "primaryLanguage": "go",
+ "sizeClass": "small",
+ "role": "library",
+ "licenseExpression": "MPL-2.0",
+ "licenseUrl": "https://github.com/hashicorp/go-multierror/blob/HEAD/LICENSE",
+ "commit": "6d4d48630db25c3c83fa83ecd41dd8438b82963c"
+ },
+ {
+ "id": "cirepo_rust_dtolnay_itoa",
+ "url": "https://github.com/dtolnay/itoa.git",
+ "primaryLanguage": "rust",
+ "sizeClass": "small",
+ "role": "library",
+ "licenseExpression": "Apache-2.0",
+ "licenseUrl": "https://github.com/dtolnay/itoa/blob/HEAD/LICENSE-APACHE",
+ "commit": "1577ed901354d0d7448ac162328f9dbf5183124c"
+ },
+ {
+ "id": "cirepo_rust_serde_rs_json",
+ "url": "https://github.com/serde-rs/json.git",
+ "primaryLanguage": "rust",
+ "sizeClass": "medium",
+ "role": "library",
+ "licenseExpression": "Apache-2.0",
+ "licenseUrl": "https://github.com/serde-rs/json/blob/HEAD/LICENSE-APACHE",
+ "commit": "827a315bf2198558f0325b07bcc1e2cd973aba2f"
+ },
+ {
+ "id": "cirepo_rust_tokio_rs_axum",
+ "url": "https://github.com/tokio-rs/axum.git",
+ "primaryLanguage": "rust",
+ "sizeClass": "medium",
+ "role": "framework",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/tokio-rs/axum/blob/HEAD/LICENSE",
+ "commit": "98aea470f9190fad1915897166ac0f149522011a"
+ },
+ {
+ "id": "cirepo_php_laravel_framework",
+ "url": "https://github.com/laravel/framework.git",
+ "primaryLanguage": "php",
+ "sizeClass": "large",
+ "role": "framework",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/laravel/framework/blob/HEAD/LICENSE.md",
+ "commit": "ee0296f03a02b8f890c6323f18bdf4669468c0c2"
+ },
+ {
+ "id": "cirepo_php_slimphp_slim",
+ "url": "https://github.com/slimphp/Slim.git",
+ "primaryLanguage": "php",
+ "sizeClass": "medium",
+ "role": "framework",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/slimphp/Slim/blob/HEAD/LICENSE.md",
+ "commit": "80900fb39cafce3ae53b18a2c4f642a122f03095"
+ },
+ {
+ "id": "cirepo_php_symfony_symfony",
+ "url": "https://github.com/symfony/symfony.git",
+ "primaryLanguage": "php",
+ "sizeClass": "large",
+ "role": "framework",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/symfony/symfony/blob/HEAD/LICENSE",
+ "commit": "7dbebd843d25b2f72e2f7dfbe044c632941ea924"
+ },
+ {
+ "id": "cirepo_ruby_rails_rails",
+ "url": "https://github.com/rails/rails.git",
+ "primaryLanguage": "ruby",
+ "sizeClass": "large",
+ "role": "framework",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/rails/rails/blob/HEAD/MIT-LICENSE",
+ "commit": "f011d1218bdd77857f30ce3964eef186f0f14de5"
+ },
+ {
+ "id": "cirepo_ruby_ruby_rake",
+ "url": "https://github.com/ruby/rake.git",
+ "primaryLanguage": "ruby",
+ "sizeClass": "medium",
+ "role": "tool",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/ruby/rake/blob/HEAD/MIT-LICENSE",
+ "commit": "162f9f80cad8121c6427d3031a2a85e62e2d570d"
+ },
+ {
+ "id": "cirepo_ruby_sinatra_sinatra",
+ "url": "https://github.com/sinatra/sinatra.git",
+ "primaryLanguage": "ruby",
+ "sizeClass": "medium",
+ "role": "framework",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/sinatra/sinatra/blob/HEAD/LICENSE",
+ "commit": "0c88089be7668326ec5ed52671732f8565a16353"
+ },
+ {
+ "id": "cirepo_swift_alamofire_alamofire",
+ "url": "https://github.com/Alamofire/Alamofire.git",
+ "primaryLanguage": "swift",
+ "sizeClass": "medium",
+ "role": "library",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/Alamofire/Alamofire/blob/HEAD/LICENSE",
+ "commit": "903c53c710d1cbbac0b4b9c2527aefb791e1fee3"
+ },
+ {
+ "id": "cirepo_swift_apple_swift_nio",
+ "url": "https://github.com/apple/swift-nio.git",
+ "primaryLanguage": "swift",
+ "sizeClass": "large",
+ "role": "runtime",
+ "licenseExpression": "Apache-2.0",
+ "licenseUrl": "https://github.com/apple/swift-nio/blob/HEAD/LICENSE.txt",
+ "commit": "0b18836bd8b0162e7e17a995a3fbee20ed8f3b2b"
+ },
+ {
+ "id": "cirepo_swift_vapor_vapor",
+ "url": "https://github.com/vapor/vapor.git",
+ "primaryLanguage": "swift",
+ "sizeClass": "medium",
+ "role": "framework",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/vapor/vapor/blob/HEAD/LICENSE",
+ "commit": "059b578bde8a037a42543914b8e14041fbec01e7"
+ },
+ {
+ "id": "cirepo_c_antirez_kilo",
+ "url": "https://github.com/antirez/kilo.git",
+ "primaryLanguage": "c",
+ "sizeClass": "small",
+ "role": "application",
+ "licenseExpression": "BSD-2-Clause",
+ "licenseUrl": "https://github.com/antirez/kilo/blob/HEAD/LICENSE",
+ "commit": "323d93b29bd89a2cb446de90c4ed4fea1764176e"
+ },
+ {
+ "id": "cirepo_c_curl_curl",
+ "url": "https://github.com/curl/curl.git",
+ "primaryLanguage": "c",
+ "sizeClass": "large",
+ "role": "library",
+ "licenseExpression": "curl",
+ "licenseUrl": "https://github.com/curl/curl/blob/HEAD/COPYING",
+ "commit": "4176aba5e4871a2f1c7c120dd76568f80f5d5ddc"
+ },
+ {
+ "id": "cirepo_c_libuv_libuv",
+ "url": "https://github.com/libuv/libuv.git",
+ "primaryLanguage": "c",
+ "sizeClass": "large",
+ "role": "runtime",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/libuv/libuv/blob/HEAD/LICENSE",
+ "commit": "2cadaa40167050baf7c6905ac897e6fb57afb2c6"
+ },
+ {
+ "id": "cirepo_cpp_catchorg_catch2",
+ "url": "https://github.com/catchorg/Catch2.git",
+ "primaryLanguage": "cpp",
+ "sizeClass": "large",
+ "role": "test-framework",
+ "licenseExpression": "BSL-1.0",
+ "licenseUrl": "https://github.com/catchorg/Catch2/blob/HEAD/LICENSE.txt",
+ "commit": "ae5d271da2c88b859d6365281ac075112115d4b1"
+ },
+ {
+ "id": "cirepo_cpp_fmtlib_fmt",
+ "url": "https://github.com/fmtlib/fmt.git",
+ "primaryLanguage": "cpp",
+ "sizeClass": "medium",
+ "role": "library",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/fmtlib/fmt/blob/HEAD/LICENSE",
+ "commit": "a79df4504cd4e42ed004b1113fb82171e62ed822"
+ },
+ {
+ "id": "cirepo_cpp_nlohmann_json",
+ "url": "https://github.com/nlohmann/json.git",
+ "primaryLanguage": "cpp",
+ "sizeClass": "large",
+ "role": "library",
+ "licenseExpression": "MIT",
+ "licenseUrl": "https://github.com/nlohmann/json/blob/HEAD/LICENSE.MIT",
+ "commit": "722c03495f9978eb727f480b6ea0742f652e06a9"
+ },
+ {
+ "id": "cirepo_dart_dart_lang_http",
+ "url": "https://github.com/dart-lang/http.git",
+ "primaryLanguage": "dart",
+ "sizeClass": "medium",
+ "role": "library",
+ "licenseExpression": "BSD-3-Clause",
+ "licenseUrl": "https://github.com/dart-lang/http/blob/HEAD/LICENSE",
+ "commit": "fe4aaa900d50f0423200dd333314729d2c0650b9"
+ },
+ {
+ "id": "cirepo_dart_dart_lang_shelf",
+ "url": "https://github.com/dart-lang/shelf.git",
+ "primaryLanguage": "dart",
+ "sizeClass": "medium",
+ "role": "framework",
+ "licenseExpression": "BSD-3-Clause",
+ "licenseUrl": "https://github.com/dart-lang/shelf/blob/HEAD/LICENSE",
+ "commit": "833433edf813df24e9a48e01fc38647d53b979f8"
+ },
+ {
+ "id": "cirepo_dart_flutter_samples",
+ "url": "https://github.com/flutter/samples.git",
+ "primaryLanguage": "dart",
+ "sizeClass": "large",
+ "role": "application",
+ "licenseExpression": "BSD-3-Clause",
+ "licenseUrl": "https://github.com/flutter/samples/blob/HEAD/LICENSE",
+ "commit": "09335b0c7a84ae29bf5454bd54f4e15c2cdd79a1"
+ }
+ ],
+ "corpusFingerprint": "sha256:7e0544963c5b00e0b6d55830e1251262e6f132d4b0e28bfd4c36b64587b26c96"
+}
diff --git a/evals/code-intelligence/fixtures/batch-b/go/api/routes.go b/evals/code-intelligence/fixtures/batch-b/go/api/routes.go
new file mode 100644
index 00000000..a04ed373
--- /dev/null
+++ b/evals/code-intelligence/fixtures/batch-b/go/api/routes.go
@@ -0,0 +1,18 @@
+package api
+
+import (
+ "net/http"
+
+ "example.com/demo/service"
+)
+
+func Item() {}
+
+func Register(router *Router) {
+ router.GET("/items/:item_id", Item)
+ http.HandleFunc("POST /legacy/{item_id}", Item)
+}
+
+func Build() *service.Service {
+ return &service.Service{}
+}
diff --git a/evals/code-intelligence/fixtures/batch-b/go/go.mod b/evals/code-intelligence/fixtures/batch-b/go/go.mod
new file mode 100644
index 00000000..007be7e4
--- /dev/null
+++ b/evals/code-intelligence/fixtures/batch-b/go/go.mod
@@ -0,0 +1,3 @@
+module example.com/demo
+
+go 1.22
diff --git a/evals/code-intelligence/fixtures/batch-b/go/service/service.go b/evals/code-intelligence/fixtures/batch-b/go/service/service.go
new file mode 100644
index 00000000..0804a1c8
--- /dev/null
+++ b/evals/code-intelligence/fixtures/batch-b/go/service/service.go
@@ -0,0 +1,15 @@
+package service
+
+type Runner interface {
+ Run() string
+}
+
+type Service struct{}
+
+func (s *Service) Run() string {
+ return "service"
+}
+
+func Use(service *Service) string {
+ return service.Run()
+}
diff --git a/evals/code-intelligence/fixtures/batch-b/python/pyproject.toml b/evals/code-intelligence/fixtures/batch-b/python/pyproject.toml
new file mode 100644
index 00000000..2ec71bb0
--- /dev/null
+++ b/evals/code-intelligence/fixtures/batch-b/python/pyproject.toml
@@ -0,0 +1,3 @@
+[project]
+name = "demo-app"
+version = "0.1.0"
diff --git a/evals/code-intelligence/fixtures/batch-b/python/src/demo_app/api.py b/evals/code-intelligence/fixtures/batch-b/python/src/demo_app/api.py
new file mode 100644
index 00000000..901e58f6
--- /dev/null
+++ b/evals/code-intelligence/fixtures/batch-b/python/src/demo_app/api.py
@@ -0,0 +1,19 @@
+from django.urls import path
+from demo_app.service import Service
+from fastapi import FastAPI
+
+
+app = FastAPI()
+
+
+@app.get("/items/{item_id}")
+def read_item(item_id):
+ service = Service()
+ return service.run()
+
+
+def legacy_item(request, item_id):
+ return item_id
+
+
+urlpatterns = [path("/legacy/", legacy_item)]
diff --git a/evals/code-intelligence/fixtures/batch-b/python/src/demo_app/base.py b/evals/code-intelligence/fixtures/batch-b/python/src/demo_app/base.py
new file mode 100644
index 00000000..d18b4dbf
--- /dev/null
+++ b/evals/code-intelligence/fixtures/batch-b/python/src/demo_app/base.py
@@ -0,0 +1,3 @@
+class BaseService:
+ def run(self):
+ return "base"
diff --git a/evals/code-intelligence/fixtures/batch-b/python/src/demo_app/service.py b/evals/code-intelligence/fixtures/batch-b/python/src/demo_app/service.py
new file mode 100644
index 00000000..3fef9036
--- /dev/null
+++ b/evals/code-intelligence/fixtures/batch-b/python/src/demo_app/service.py
@@ -0,0 +1,6 @@
+from demo_app.base import BaseService
+
+
+class Service(BaseService):
+ def run(self):
+ return "service"
diff --git a/evals/code-intelligence/fixtures/batch-b/rust/Cargo.toml b/evals/code-intelligence/fixtures/batch-b/rust/Cargo.toml
new file mode 100644
index 00000000..d233fd61
--- /dev/null
+++ b/evals/code-intelligence/fixtures/batch-b/rust/Cargo.toml
@@ -0,0 +1,4 @@
+[package]
+name = "demo-crate"
+version = "0.1.0"
+edition = "2021"
diff --git a/evals/code-intelligence/fixtures/batch-b/rust/src/lib.rs b/evals/code-intelligence/fixtures/batch-b/rust/src/lib.rs
new file mode 100644
index 00000000..2d9b4711
--- /dev/null
+++ b/evals/code-intelligence/fixtures/batch-b/rust/src/lib.rs
@@ -0,0 +1,22 @@
+mod service;
+
+use crate::service::Service;
+
+fn item() {}
+
+#[get("/rocket/")]
+fn rocket_item(item_id: u64) {}
+
+fn router() {
+ Router::new().route("/items/{item_id}", get(item));
+}
+
+fn actix_item() {}
+
+fn app() {
+ App::new().route("/legacy/{item_id}", web::post().to(actix_item));
+}
+
+fn build() -> Service {
+ Service::new()
+}
diff --git a/evals/code-intelligence/fixtures/batch-b/rust/src/service.rs b/evals/code-intelligence/fixtures/batch-b/rust/src/service.rs
new file mode 100644
index 00000000..0a13f1eb
--- /dev/null
+++ b/evals/code-intelligence/fixtures/batch-b/rust/src/service.rs
@@ -0,0 +1,21 @@
+pub trait Runner {
+ fn run(&self) -> &'static str;
+}
+
+pub struct Service;
+
+impl Service {
+ pub fn new() -> Self {
+ Self
+ }
+}
+
+impl Runner for Service {
+ fn run(&self) -> &'static str {
+ "service"
+ }
+}
+
+pub fn use_service(service: &Service) -> &'static str {
+ service.run()
+}
diff --git a/evals/code-intelligence/fixtures/batch-c/csharp/src/Demo/Api.cs b/evals/code-intelligence/fixtures/batch-c/csharp/src/Demo/Api.cs
new file mode 100644
index 00000000..cd422e23
--- /dev/null
+++ b/evals/code-intelligence/fixtures/batch-c/csharp/src/Demo/Api.cs
@@ -0,0 +1,34 @@
+namespace Demo.Api;
+
+using Demo.Models;
+using Demo.Services;
+using Microsoft.AspNetCore.Mvc;
+
+[ApiController]
+[Route("items")]
+public sealed class ItemsController : ControllerBase
+{
+ private readonly ItemService service;
+
+ public ItemsController(ItemService service)
+ {
+ this.service = service;
+ }
+
+ [HttpGet("{id}")]
+ public Item Get(string id) => service.Find(id);
+
+ public Item Ambiguous(string id) => service.Load(id);
+
+ public string Describe(Item item) => item.Summary();
+}
+
+public static class Routes
+{
+ public static void Map(WebApplication app)
+ {
+ app.MapGet("/health", Health);
+ }
+
+ private static string Health() => "ok";
+}
diff --git a/evals/code-intelligence/fixtures/batch-c/csharp/src/Demo/Models.cs b/evals/code-intelligence/fixtures/batch-c/csharp/src/Demo/Models.cs
new file mode 100644
index 00000000..f8a13640
--- /dev/null
+++ b/evals/code-intelligence/fixtures/batch-c/csharp/src/Demo/Models.cs
@@ -0,0 +1,3 @@
+namespace Demo.Models;
+
+public sealed record Item(string Id);
diff --git a/evals/code-intelligence/fixtures/batch-c/csharp/src/Demo/Services.cs b/evals/code-intelligence/fixtures/batch-c/csharp/src/Demo/Services.cs
new file mode 100644
index 00000000..e96eda96
--- /dev/null
+++ b/evals/code-intelligence/fixtures/batch-c/csharp/src/Demo/Services.cs
@@ -0,0 +1,22 @@
+namespace Demo.Services;
+
+using Demo.Models;
+
+public interface IItemLoader
+{
+ Item Find(string id);
+}
+
+public sealed class ItemService : IItemLoader
+{
+ public Item Find(string id) => new(id);
+
+ public Item Load(string id) => Find(id);
+
+ public Item Load(long id) => Find(id.ToString());
+}
+
+public static class ItemExtensions
+{
+ public static string Summary(this Item item) => item.Id;
+}
diff --git a/evals/code-intelligence/fixtures/batch-c/java/src/main/java/com/acme/api/ItemController.java b/evals/code-intelligence/fixtures/batch-c/java/src/main/java/com/acme/api/ItemController.java
new file mode 100644
index 00000000..ed2f2144
--- /dev/null
+++ b/evals/code-intelligence/fixtures/batch-c/java/src/main/java/com/acme/api/ItemController.java
@@ -0,0 +1,26 @@
+package com.acme.api;
+
+import com.acme.model.Item;
+import com.acme.service.ItemService;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/items")
+public final class ItemController {
+ private final ItemService service;
+
+ public ItemController(ItemService service) {
+ this.service = service;
+ }
+
+ @GetMapping("/{id}")
+ public Item get(String id) {
+ return service.find(id);
+ }
+
+ public Item ambiguous(String id) {
+ return service.load(id);
+ }
+}
diff --git a/evals/code-intelligence/fixtures/batch-c/java/src/main/java/com/acme/model/Item.java b/evals/code-intelligence/fixtures/batch-c/java/src/main/java/com/acme/model/Item.java
new file mode 100644
index 00000000..3bb2c5f7
--- /dev/null
+++ b/evals/code-intelligence/fixtures/batch-c/java/src/main/java/com/acme/model/Item.java
@@ -0,0 +1,3 @@
+package com.acme.model;
+
+public record Item(String id) {}
diff --git a/evals/code-intelligence/fixtures/batch-c/java/src/main/java/com/acme/service/ItemService.java b/evals/code-intelligence/fixtures/batch-c/java/src/main/java/com/acme/service/ItemService.java
new file mode 100644
index 00000000..77242b56
--- /dev/null
+++ b/evals/code-intelligence/fixtures/batch-c/java/src/main/java/com/acme/service/ItemService.java
@@ -0,0 +1,21 @@
+package com.acme.service;
+
+import com.acme.model.Item;
+
+interface ItemLoader {
+ Item find(String id);
+}
+
+public final class ItemService implements ItemLoader {
+ public Item find(String id) {
+ return new Item(id);
+ }
+
+ public Item load(String id) {
+ return find(id);
+ }
+
+ public Item load(long id) {
+ return find(Long.toString(id));
+ }
+}
diff --git a/evals/code-intelligence/fixtures/batch-c/kotlin/src/main/kotlin/com/acme/api/Routes.kt b/evals/code-intelligence/fixtures/batch-c/kotlin/src/main/kotlin/com/acme/api/Routes.kt
new file mode 100644
index 00000000..543aa9c8
--- /dev/null
+++ b/evals/code-intelligence/fixtures/batch-c/kotlin/src/main/kotlin/com/acme/api/Routes.kt
@@ -0,0 +1,15 @@
+package com.acme.api
+
+import com.acme.service.ItemService
+import io.ktor.server.application.Application
+import io.ktor.server.response.respond
+import io.ktor.server.routing.get
+import io.ktor.server.routing.routing
+
+fun Application.itemRoutes(service: ItemService) {
+ routing {
+ get("/items/{id}") {
+ service.find("demo")
+ }
+ }
+}
diff --git a/evals/code-intelligence/fixtures/batch-c/kotlin/src/main/kotlin/com/acme/model/Item.kt b/evals/code-intelligence/fixtures/batch-c/kotlin/src/main/kotlin/com/acme/model/Item.kt
new file mode 100644
index 00000000..3d01ae55
--- /dev/null
+++ b/evals/code-intelligence/fixtures/batch-c/kotlin/src/main/kotlin/com/acme/model/Item.kt
@@ -0,0 +1,3 @@
+package com.acme.model
+
+data class Item(val id: String)
diff --git a/evals/code-intelligence/fixtures/batch-c/kotlin/src/main/kotlin/com/acme/service/ItemService.kt b/evals/code-intelligence/fixtures/batch-c/kotlin/src/main/kotlin/com/acme/service/ItemService.kt
new file mode 100644
index 00000000..4797c7e0
--- /dev/null
+++ b/evals/code-intelligence/fixtures/batch-c/kotlin/src/main/kotlin/com/acme/service/ItemService.kt
@@ -0,0 +1,19 @@
+package com.acme.service
+
+import com.acme.model.Item
+
+interface ItemLoader {
+ fun find(id: String): Item
+}
+
+class ItemService : ItemLoader {
+ override fun find(id: String): Item = Item(id)
+
+ fun load(id: String): Item = find(id)
+
+ fun load(id: Long): Item = find(id.toString())
+}
+
+fun Item.summary(): String = id
+
+fun describe(item: Item): String = item.summary()
diff --git a/evals/code-intelligence/fixtures/batch-d/c/CMakeLists.txt b/evals/code-intelligence/fixtures/batch-d/c/CMakeLists.txt
new file mode 100644
index 00000000..8fec25f0
--- /dev/null
+++ b/evals/code-intelligence/fixtures/batch-d/c/CMakeLists.txt
@@ -0,0 +1,3 @@
+cmake_minimum_required(VERSION 3.20)
+project(items C)
+add_executable(items src/main.c src/item.c)
diff --git a/evals/code-intelligence/fixtures/batch-d/c/include/item.h b/evals/code-intelligence/fixtures/batch-d/c/include/item.h
new file mode 100644
index 00000000..10a8cc4e
--- /dev/null
+++ b/evals/code-intelligence/fixtures/batch-d/c/include/item.h
@@ -0,0 +1,10 @@
+#ifndef ITEM_H
+#define ITEM_H
+
+typedef struct Item {
+ const char *id;
+} Item;
+
+Item item_find(const char *id);
+
+#endif
diff --git a/evals/code-intelligence/fixtures/batch-d/c/src/item.c b/evals/code-intelligence/fixtures/batch-d/c/src/item.c
new file mode 100644
index 00000000..d999587b
--- /dev/null
+++ b/evals/code-intelligence/fixtures/batch-d/c/src/item.c
@@ -0,0 +1,6 @@
+#include "../include/item.h"
+
+Item item_find(const char *id) {
+ Item item = {id};
+ return item;
+}
diff --git a/evals/code-intelligence/fixtures/batch-d/c/src/main.c b/evals/code-intelligence/fixtures/batch-d/c/src/main.c
new file mode 100644
index 00000000..d62318e5
--- /dev/null
+++ b/evals/code-intelligence/fixtures/batch-d/c/src/main.c
@@ -0,0 +1,6 @@
+#include "../include/item.h"
+
+int main(void) {
+ Item item = item_find("one");
+ return item.id == 0;
+}
diff --git a/evals/code-intelligence/fixtures/batch-d/cpp/CMakeLists.txt b/evals/code-intelligence/fixtures/batch-d/cpp/CMakeLists.txt
new file mode 100644
index 00000000..30f801ac
--- /dev/null
+++ b/evals/code-intelligence/fixtures/batch-d/cpp/CMakeLists.txt
@@ -0,0 +1,3 @@
+cmake_minimum_required(VERSION 3.20)
+project(items_cpp CXX)
+add_executable(items_cpp src/main.cpp src/item_service.cpp)
diff --git a/evals/code-intelligence/fixtures/batch-d/cpp/include/item_service.hpp b/evals/code-intelligence/fixtures/batch-d/cpp/include/item_service.hpp
new file mode 100644
index 00000000..691a73ad
--- /dev/null
+++ b/evals/code-intelligence/fixtures/batch-d/cpp/include/item_service.hpp
@@ -0,0 +1,22 @@
+#pragma once
+
+#include
+
+namespace demo {
+struct Item {
+ std::string id;
+};
+
+template class ItemLoader {
+ public:
+ virtual ItemType find(const std::string &id) const = 0;
+};
+
+class ItemService final : public ItemLoader- {
+ public:
+ ItemService() = default;
+ Item lookup(const std::string &id) const;
+ Item find(const std::string &id) const override;
+ Item find(long id) const;
+};
+}
diff --git a/evals/code-intelligence/fixtures/batch-d/cpp/src/item_service.cpp b/evals/code-intelligence/fixtures/batch-d/cpp/src/item_service.cpp
new file mode 100644
index 00000000..a52cc997
--- /dev/null
+++ b/evals/code-intelligence/fixtures/batch-d/cpp/src/item_service.cpp
@@ -0,0 +1,13 @@
+#include "../include/item_service.hpp"
+
+namespace demo {
+Item ItemService::lookup(const std::string &id) const { return Item{id}; }
+Item ItemService::find(const std::string &id) const { return Item{id}; }
+Item ItemService::find(long id) const { return Item{std::to_string(id)}; }
+
+Item load_item(const ItemService &service, const std::string &id) {
+ return service.lookup(id);
+}
+
+Item ambiguous(const std::string &id) { return find(id); }
+}
diff --git a/evals/code-intelligence/fixtures/batch-d/cpp/src/main.cpp b/evals/code-intelligence/fixtures/batch-d/cpp/src/main.cpp
new file mode 100644
index 00000000..24368d1e
--- /dev/null
+++ b/evals/code-intelligence/fixtures/batch-d/cpp/src/main.cpp
@@ -0,0 +1,6 @@
+#include "../include/item_service.hpp"
+
+int main() {
+ demo::ItemService service;
+ return service.find("one").id.empty();
+}
diff --git a/evals/code-intelligence/fixtures/batch-d/dart/lib/item.dart b/evals/code-intelligence/fixtures/batch-d/dart/lib/item.dart
new file mode 100644
index 00000000..ce4fa448
--- /dev/null
+++ b/evals/code-intelligence/fixtures/batch-d/dart/lib/item.dart
@@ -0,0 +1,25 @@
+library demo.item;
+
+class Item {
+ const Item(this.id);
+ final String id;
+}
+
+abstract interface class ItemLoader {
+ Item find(String id);
+}
+
+mixin ItemLogging {
+ String label(Item item) => item.id;
+}
+
+class ItemService with ItemLogging implements ItemLoader {
+ @override
+ Item find(String id) => Item(id);
+}
+
+extension ItemSummary on Item {
+ String summary() => id;
+}
+
+String describe(Item item) => item.summary();
diff --git a/evals/code-intelligence/fixtures/batch-d/dart/lib/main.dart b/evals/code-intelligence/fixtures/batch-d/dart/lib/main.dart
new file mode 100644
index 00000000..c19754ba
--- /dev/null
+++ b/evals/code-intelligence/fixtures/batch-d/dart/lib/main.dart
@@ -0,0 +1,7 @@
+import 'package:flutter/widgets.dart';
+import 'routes.dart';
+
+void main() {
+ buildRouter(ItemService());
+ runApp(const Placeholder());
+}
diff --git a/evals/code-intelligence/fixtures/batch-d/dart/lib/routes.dart b/evals/code-intelligence/fixtures/batch-d/dart/lib/routes.dart
new file mode 100644
index 00000000..fe6b0c16
--- /dev/null
+++ b/evals/code-intelligence/fixtures/batch-d/dart/lib/routes.dart
@@ -0,0 +1,12 @@
+library demo.routes;
+
+import 'package:shelf_router/shelf_router.dart';
+import 'item.dart';
+export 'item.dart' show Item;
+part 'routes_part.dart';
+
+Router buildRouter(ItemService service) {
+ final router = Router();
+ router.get('/items/
', (request, String id) => service.find(id).id);
+ return router;
+}
diff --git a/evals/code-intelligence/fixtures/batch-d/dart/lib/routes_part.dart b/evals/code-intelligence/fixtures/batch-d/dart/lib/routes_part.dart
new file mode 100644
index 00000000..5defb440
--- /dev/null
+++ b/evals/code-intelligence/fixtures/batch-d/dart/lib/routes_part.dart
@@ -0,0 +1,3 @@
+part of 'routes.dart';
+
+String routeName() => 'items';
diff --git a/evals/code-intelligence/fixtures/batch-d/dart/pubspec.yaml b/evals/code-intelligence/fixtures/batch-d/dart/pubspec.yaml
new file mode 100644
index 00000000..adef787f
--- /dev/null
+++ b/evals/code-intelligence/fixtures/batch-d/dart/pubspec.yaml
@@ -0,0 +1,7 @@
+name: item_app
+environment:
+ sdk: ^3.8.0
+dependencies:
+ flutter:
+ sdk: flutter
+ shelf_router: ^1.1.4
diff --git a/evals/code-intelligence/fixtures/batch-d/swift/Package.swift b/evals/code-intelligence/fixtures/batch-d/swift/Package.swift
new file mode 100644
index 00000000..4653f6f9
--- /dev/null
+++ b/evals/code-intelligence/fixtures/batch-d/swift/Package.swift
@@ -0,0 +1,8 @@
+// swift-tools-version: 5.9
+import PackageDescription
+
+let package = Package(
+ name: "ItemApp",
+ products: [.executable(name: "ItemApp", targets: ["App"])],
+ targets: [.executableTarget(name: "App", dependencies: [.product(name: "Vapor", package: "vapor")])]
+)
diff --git a/evals/code-intelligence/fixtures/batch-d/swift/Sources/App/Item.swift b/evals/code-intelligence/fixtures/batch-d/swift/Sources/App/Item.swift
new file mode 100644
index 00000000..cf274927
--- /dev/null
+++ b/evals/code-intelligence/fixtures/batch-d/swift/Sources/App/Item.swift
@@ -0,0 +1,7 @@
+struct Item {
+ let id: String
+}
+
+protocol ItemLoading {
+ func find(id: String) -> Item
+}
diff --git a/evals/code-intelligence/fixtures/batch-d/swift/Sources/App/ItemService.swift b/evals/code-intelligence/fixtures/batch-d/swift/Sources/App/ItemService.swift
new file mode 100644
index 00000000..61abef63
--- /dev/null
+++ b/evals/code-intelligence/fixtures/batch-d/swift/Sources/App/ItemService.swift
@@ -0,0 +1,15 @@
+final class ItemService: ItemLoading {
+ func find(id: String) -> Item {
+ Item(id: id)
+ }
+}
+
+extension ItemService {
+ func summary(item: Item) -> String {
+ item.id
+ }
+}
+
+func describe(service: ItemService, item: Item) -> String {
+ service.summary(item: item)
+}
diff --git a/evals/code-intelligence/fixtures/batch-d/swift/Sources/App/routes.swift b/evals/code-intelligence/fixtures/batch-d/swift/Sources/App/routes.swift
new file mode 100644
index 00000000..62e15ddb
--- /dev/null
+++ b/evals/code-intelligence/fixtures/batch-d/swift/Sources/App/routes.swift
@@ -0,0 +1,7 @@
+import Vapor
+
+func routes(_ app: Application, service: ItemService) {
+ app.get("items", ":id") { request in
+ service.find(id: request.parameters.get("id") ?? "")
+ }
+}
diff --git a/evals/code-intelligence/fixtures/batch-e/php/composer.json b/evals/code-intelligence/fixtures/batch-e/php/composer.json
new file mode 100644
index 00000000..c44fd7b3
--- /dev/null
+++ b/evals/code-intelligence/fixtures/batch-e/php/composer.json
@@ -0,0 +1,3 @@
+{
+ "autoload": { "psr-4": { "App\\": "src/" } }
+}
diff --git a/evals/code-intelligence/fixtures/batch-e/php/routes/web.php b/evals/code-intelligence/fixtures/batch-e/php/routes/web.php
new file mode 100644
index 00000000..eaf1e19e
--- /dev/null
+++ b/evals/code-intelligence/fixtures/batch-e/php/routes/web.php
@@ -0,0 +1,5 @@
+id;
+ }
+}
+
+function describe(ItemService $service, Item $item): string
+{
+ return $service->summary($item);
+}
diff --git a/evals/code-intelligence/fixtures/batch-e/php/src/Support/LogsItems.php b/evals/code-intelligence/fixtures/batch-e/php/src/Support/LogsItems.php
new file mode 100644
index 00000000..8a9f8f45
--- /dev/null
+++ b/evals/code-intelligence/fixtures/batch-e/php/src/Support/LogsItems.php
@@ -0,0 +1,7 @@
+",
+ "code-intelligence",
+ "index",
+ "--stdio"
+ ],
+ "rssSampling": {
+ "method": "direct-child-ps-sampled",
+ "cadenceMs": 250
+ }
+ },
+ "fixture": {
+ "ref": "fixture://sha256:2f30b0575852d4d724184eb74580a8148f187cd11fec632779b0d46012634b43",
+ "language": "javascript",
+ "shape": "base36-empty-classes-v2",
+ "fileCount": 1000,
+ "classesPerFile": 998,
+ "expectedNodeCount": 1000000,
+ "expectedEdgeCount": 999000,
+ "totalSourceBytes": 10943008,
+ "maxSourceFileBytes": 10951
+ },
+ "bounds": {
+ "maxFiles": 1000,
+ "maxFileBytes": 524288,
+ "maxNodes": 1000000,
+ "maxEdges": 1000000,
+ "buildDeadlineMs": 300000,
+ "queryDeadlineMs": 2000,
+ "queryRepetitions": 20
+ },
+ "index": {
+ "fileCount": 1000,
+ "nodeCount": 1000000,
+ "edgeCount": 999000,
+ "unresolvedCount": 0,
+ "omittedCount": 0,
+ "databaseBytes": 1588875264
+ },
+ "proof": {
+ "measuredBoundary": "exactly-1000000-committed-nodes",
+ "generatedFixtureNodeCount": 1000000,
+ "buildCommittedNodeCount": 1000000,
+ "warmStatusCommittedNodeCount": 1000000,
+ "querySamplesAllReadCommittedMillion": true,
+ "finalStatusCommittedNodeCount": 1000000
+ },
+ "measurements": {
+ "indexAndPersist": {
+ "status": "complete",
+ "wallMs": 80392.764,
+ "engineDurationMs": 80075,
+ "peakNativeRssMb": 11309.1,
+ "rssMeasurement": "direct-child-ps-sampled",
+ "rssSampleIntervalMs": 250,
+ "exitCode": 0,
+ "signal": null,
+ "timedOut": false,
+ "outputLimitExceeded": false,
+ "errorCode": null,
+ "stdoutBytes": 1079,
+ "stderrBytes": 0,
+ "stdoutSha256": "sha256:610e58a2475afdcc9b17d89ca9538307a9efaf5896efeb58164a558518f496e6",
+ "stderrSha256": "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "parsedFileCount": 1000,
+ "reusedFileCount": 0,
+ "changedFileCount": 1000,
+ "deletedFileCount": 0,
+ "localFilesWritten": 1,
+ "state": "ready",
+ "freshness": "current",
+ "activeGeneration": 1
+ },
+ "warmOpen": {
+ "status": "complete",
+ "wallMs": 1356.773,
+ "engineDurationMs": 1349,
+ "peakNativeRssMb": 14.1,
+ "rssMeasurement": "direct-child-ps-sampled",
+ "rssSampleIntervalMs": 250,
+ "exitCode": 0,
+ "signal": null,
+ "timedOut": false,
+ "outputLimitExceeded": false,
+ "errorCode": null,
+ "stdoutBytes": 1132,
+ "stderrBytes": 0,
+ "stdoutSha256": "sha256:e7f1a90fe27ba99aa13af6af391363290873c27942ef259886269f3a344734ce",
+ "stderrSha256": "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "parsedFileCount": 0,
+ "reusedFileCount": 1000,
+ "changedFileCount": 0,
+ "deletedFileCount": 0,
+ "localFilesWritten": 0,
+ "state": "ready",
+ "freshness": "current",
+ "activeGeneration": 1
+ },
+ "noChangeRefresh": {
+ "status": "complete",
+ "wallMs": 3851.331,
+ "engineDurationMs": 3682,
+ "peakNativeRssMb": 839.9,
+ "rssMeasurement": "direct-child-ps-sampled",
+ "rssSampleIntervalMs": 250,
+ "exitCode": 0,
+ "signal": null,
+ "timedOut": false,
+ "outputLimitExceeded": false,
+ "errorCode": null,
+ "stdoutBytes": 1077,
+ "stderrBytes": 0,
+ "stdoutSha256": "sha256:941058704a1b3b885e4dea985b55b69e3bfa69e1a8cde7dd124801d8a3cea1d6",
+ "stderrSha256": "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "parsedFileCount": 0,
+ "reusedFileCount": 1000,
+ "changedFileCount": 0,
+ "deletedFileCount": 0,
+ "localFilesWritten": 0,
+ "state": "ready",
+ "freshness": "current",
+ "activeGeneration": 1
+ },
+ "oneFileRefresh": {
+ "status": "complete",
+ "wallMs": 51107.015,
+ "engineDurationMs": 50890,
+ "peakNativeRssMb": 7708.3,
+ "rssMeasurement": "direct-child-ps-sampled",
+ "rssSampleIntervalMs": 250,
+ "exitCode": 0,
+ "signal": null,
+ "timedOut": false,
+ "outputLimitExceeded": false,
+ "errorCode": null,
+ "stdoutBytes": 1078,
+ "stderrBytes": 0,
+ "stdoutSha256": "sha256:c408caeb195ffbc3752a25d83e596340f2771591aaa9af40a60cfb8eefd706db",
+ "stderrSha256": "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "parsedFileCount": 1,
+ "reusedFileCount": 999,
+ "changedFileCount": 1,
+ "deletedFileCount": 0,
+ "localFilesWritten": 1,
+ "state": "ready",
+ "freshness": "current",
+ "activeGeneration": 2
+ },
+ "exactQuery": {
+ "status": "complete",
+ "repetitions": 20,
+ "resultCount": 1,
+ "expectedSeedLocators": [
+ "workspace://src/dense-0000.js#L1-L1"
+ ],
+ "seedLocators": [
+ "workspace://src/dense-0000.js#L1-L1"
+ ],
+ "expectedSeedPresent": true,
+ "stableResultFingerprint": "sha256:0ca0d39c0a16ec9fa6b9010307be2bfabc72e0591a8bd92abe953994fa6bf101",
+ "committedNodeCount": 1000000,
+ "omittedCount": 0,
+ "readOnly": true,
+ "wallMs": {
+ "p50": 1512.861,
+ "p95": 1547.219,
+ "p99": 1552.586
+ },
+ "engineDurationMs": {
+ "p50": 1506,
+ "p95": 1540,
+ "p99": 1545
+ },
+ "peakNativeRssMb": 15.1,
+ "stdoutBytes": {
+ "p50": 1314,
+ "p95": 1314,
+ "p99": 1314
+ },
+ "stderrBytes": {
+ "p50": 0,
+ "p95": 0,
+ "p99": 0
+ },
+ "stdoutSha256": [
+ "sha256:1472e6e773926d8a07335c985df769a557d272fe60982e4dcff82bf8ac8601b0",
+ "sha256:1708b043dbd29189a01007127ea2e3793836cc0a14ea85db95b8bf9278712cb8",
+ "sha256:25eff1bc120493147c71f1e912f60db26576acdec3e5f7bb6dc3a0429faaec80",
+ "sha256:281832e2bc95c5de8c11bde845871c6f0f6c22186c456d5cbedd0f1d2eb7afad",
+ "sha256:2cfa5774c533ae0498d54b06c4c4615d1382348e5e4d98432becd30e6cba0778",
+ "sha256:3add152bf1a929b9bb12fed8f38757193305dccd171a5e9784d30da659473a85",
+ "sha256:49091c4db97f38228c4a4d22f2c3996fac1bc54f3376c3bc7f21683edba2d68b",
+ "sha256:64705774088dce57f090ce4c0ed018ec46ab38caf71e6385c49e5a44a8c07063",
+ "sha256:66983624cc0f5fc4281e1dc95538af000dd9a281caa6b0d7ec772f3ab505c5ed",
+ "sha256:72c377b38842db23b5b0ba77ed3b607802b773524f9025a0e3d5d647ad7fe115",
+ "sha256:7698ec0303a36a3b03073fd23f2ec841e58300fe19d24a3cfd88dde244f4c003",
+ "sha256:80d43ad6689a8ddb0bdfaceba10b907d740bfd5ce710caa8382cb9e612c3d306",
+ "sha256:93e03653a3b0861a20ef0a66fec4bf322f7a95b16db64fbe5f89d8f3835f4c4a",
+ "sha256:ab39c89d1f50b5ba4945de8f09a4a95eab3e69cab43ccf959b82575a3a33a668",
+ "sha256:af8aa7e27945738ff9a719711cd892ec9b22046dd5d87f66fb7924911e7382a8",
+ "sha256:c66f01a3f53758d17e607a4dbee3e2e540597049a0d93c93c98cd9732bef0d02",
+ "sha256:d43e157500c34a2d45300460a9fb1058cea1c3a3c781065b0c25877259759627",
+ "sha256:d55271af0bc86802b35659800abf1a759188a4e33639c166c5435538b91fb66e",
+ "sha256:dc51d5b42034a6f06493de35125003c46fd26f6a064a11b2f7ed67a5fbd4e9e3",
+ "sha256:dd54254f16df76b1565d1b4cdb23ebc31e8b992f59f223f9e373f37741be0048"
+ ],
+ "stderrSha256": [
+ "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ ],
+ "exitCodes": [
+ 0
+ ],
+ "signals": [
+ null
+ ],
+ "timedOut": false,
+ "localFilesWritten": 0,
+ "sqliteBefore": {
+ "bytes": 795504640,
+ "mtimeNs": "1784404055164683274",
+ "sha256": "sha256:64ce59ab24dbc5d320e8f98234c42fbed6ff9a879ae277de24dac7394019f09d"
+ },
+ "sqliteAfter": {
+ "bytes": 795504640,
+ "mtimeNs": "1784404055164683274",
+ "sha256": "sha256:64ce59ab24dbc5d320e8f98234c42fbed6ff9a879ae277de24dac7394019f09d"
+ }
+ }
+ },
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "millionNodeScaleProven": true,
+ "competitorParity": false,
+ "leadership": false,
+ "reason": "This local benchmark proves one million persisted Rust index nodes with bounded SQLite refresh and exact-query measurements on the recorded platform."
+ },
+ "safeguards": {
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "rawSourceStoredInReport": false,
+ "absolutePathsStoredInReport": false,
+ "fixtureDeletedAfterRun": true
+ },
+ "reportFingerprint": "sha256:9c4fac2ada19acff0df4f13ba3519a92f2ddc59f64e0da1aec52312f0795707a"
+}
diff --git a/evals/code-intelligence/results/phase2-batch-a.json b/evals/code-intelligence/results/phase2-batch-a.json
new file mode 100644
index 00000000..6dc0cd54
--- /dev/null
+++ b/evals/code-intelligence/results/phase2-batch-a.json
@@ -0,0 +1,1484 @@
+{
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-phase2-batch-a-1",
+ "phase": 2,
+ "batch": "A",
+ "generatedAt": "2026-07-17T20:11:13.536Z",
+ "inputs": {
+ "corpusFingerprint": "sha256:7e0544963c5b00e0b6d55830e1251262e6f132d4b0e28bfd4c36b64587b26c96",
+ "bounds": {
+ "maxFiles": 5000,
+ "maxFileBytes": 524288,
+ "maxNodes": 5000,
+ "maxEdges": 10000
+ },
+ "fixtureTruth": [
+ "evals/code-intelligence/truth/fixtures/typescript.json",
+ "evals/code-intelligence/truth/fixtures/javascript.json"
+ ],
+ "repositoryTruth": [
+ "evals/code-intelligence/truth/repositories/typescript/cirepo_typescript_microsoft_typescript.json",
+ "evals/code-intelligence/truth/repositories/typescript/cirepo_typescript_microsoft_vscode.json",
+ "evals/code-intelligence/truth/repositories/typescript/cirepo_typescript_vercel_next_js.json",
+ "evals/code-intelligence/truth/repositories/javascript/cirepo_javascript_axios_axios.json",
+ "evals/code-intelligence/truth/repositories/javascript/cirepo_javascript_expressjs_express.json",
+ "evals/code-intelligence/truth/repositories/javascript/cirepo_javascript_lodash_lodash.json"
+ ],
+ "repositoryRefs": [
+ "corpus://cirepo_typescript_microsoft_typescript@637d5746b70257028fb95aad32ddec6b26ab0a14#src/testRunner/unittests/helpers",
+ "corpus://cirepo_typescript_microsoft_vscode@53e335d0387969ba6b6bd68f2481be89252089ca#src/vs/base/common",
+ "corpus://cirepo_typescript_vercel_next_js@153bf8ac5fa00888ef5fbb2b65cac12f0942a44f#packages/next/src/server/route-modules/app-route",
+ "corpus://cirepo_javascript_axios_axios@3041b8fd1daf17404d1bad1f9d94026ea5ab400b#lib/core",
+ "corpus://cirepo_javascript_expressjs_express@ae6dd37680e3a00618d6c8a3e522f0ee4eeba1a4#lib",
+ "corpus://cirepo_javascript_lodash_lodash@a666ba591064c8011988275790ad7d625279f09c#."
+ ]
+ },
+ "thresholds": {
+ "symbolRecallMinimum": 0.95,
+ "resolvedCallPrecisionMinimum": 0.9,
+ "duplicateCanonicalSymbolMaximum": 0,
+ "deterministicStructuralFingerprintRequired": true,
+ "malformedFileRepositoryFailureMaximum": 0,
+ "explicitPartialAndUnsupportedDiagnosticsRequired": true,
+ "realRepositoryGatesRequired": true
+ },
+ "cases": [
+ {
+ "id": "fixture_typescript_import_call",
+ "language": "typescript",
+ "sourceClass": "fixture",
+ "sourceRef": "fixture://sha256:0da79f91adfdca5b7658a56903c4e755db779bc6ce5347f57899c981c07ab61a",
+ "truthPath": "evals/code-intelligence/truth/fixtures/typescript.json",
+ "graph": {
+ "fingerprint": "sha256:42fc85bbae7a7dafa1d0dfb8bf894ac1a8e843f7ce9628a905ef084f92209068",
+ "nodeCount": 9,
+ "edgeCount": 13,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "typescript",
+ "support": "partial",
+ "discoveredFileCount": 2,
+ "indexedFileCount": 2,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 33.012,
+ "secondElapsedMs": 8.028,
+ "evaluatorMaxRssKb": 59664,
+ "graphResponseBytes": 10929,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_typescript_import_call_fixture",
+ "language": "typescript",
+ "sourceRef": "fixture://sha256:0da79f91adfdca5b7658a56903c4e755db779bc6ce5347f57899c981c07ab61a",
+ "graphFingerprints": [
+ "sha256:42fc85bbae7a7dafa1d0dfb8bf894ac1a8e843f7ce9628a905ef084f92209068",
+ "sha256:42fc85bbae7a7dafa1d0dfb8bf894ac1a8e843f7ce9628a905ef084f92209068"
+ ],
+ "reviewCoverage": {
+ "declarations": "exhaustive",
+ "relationships": "exhaustive",
+ "calls": "exhaustive"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 8,
+ "matchedTruthItemCount": 8
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "exports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:5b977d7e5fd55c11b6a2be788c771037a250f2f062f5f62ee2c631ebe0a84900"
+ }
+ },
+ {
+ "id": "fixture_javascript_import_call",
+ "language": "javascript",
+ "sourceClass": "fixture",
+ "sourceRef": "fixture://sha256:1b50b0e6528f5495afff53ce1dd819b6201f81d7d0558f8dce6baa8f9c928e02",
+ "truthPath": "evals/code-intelligence/truth/fixtures/javascript.json",
+ "graph": {
+ "fingerprint": "sha256:a27b461cbd149f76006757606bbf6363864ba5c2ff818a1d3ac40455f7444f26",
+ "nodeCount": 6,
+ "edgeCount": 8,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "javascript",
+ "support": "partial",
+ "discoveredFileCount": 2,
+ "indexedFileCount": 2,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 8.17,
+ "secondElapsedMs": 7.49,
+ "evaluatorMaxRssKb": 65760,
+ "graphResponseBytes": 7255,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_javascript_import_call_fixture",
+ "language": "javascript",
+ "sourceRef": "fixture://sha256:1b50b0e6528f5495afff53ce1dd819b6201f81d7d0558f8dce6baa8f9c928e02",
+ "graphFingerprints": [
+ "sha256:a27b461cbd149f76006757606bbf6363864ba5c2ff818a1d3ac40455f7444f26",
+ "sha256:a27b461cbd149f76006757606bbf6363864ba5c2ff818a1d3ac40455f7444f26"
+ ],
+ "reviewCoverage": {
+ "declarations": "exhaustive",
+ "relationships": "exhaustive",
+ "calls": "exhaustive"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 6,
+ "matchedTruthItemCount": 6
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "exports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:36d799d4387bc07fb63f7366accec78fb039b1263f9415d9b8eabf8df72ffcba"
+ }
+ },
+ {
+ "id": "cirepo_typescript_microsoft_typescript",
+ "language": "typescript",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_typescript_microsoft_typescript@637d5746b70257028fb95aad32ddec6b26ab0a14#src/testRunner/unittests/helpers",
+ "commit": "637d5746b70257028fb95aad32ddec6b26ab0a14",
+ "truthPath": "evals/code-intelligence/truth/repositories/typescript/cirepo_typescript_microsoft_typescript.json",
+ "graph": {
+ "fingerprint": "sha256:e6f932775e1ff36c39226e5c69d1e7d194b58f367ac1f6977204cfdd62414d98",
+ "nodeCount": 845,
+ "edgeCount": 2242,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "typescript",
+ "support": "partial",
+ "discoveredFileCount": 21,
+ "indexedFileCount": 21,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 141.502,
+ "secondElapsedMs": 140.972,
+ "evaluatorMaxRssKb": 89360,
+ "graphResponseBytes": 1526827,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_typescript_microsoft_typescript",
+ "language": "typescript",
+ "sourceRef": "corpus://cirepo_typescript_microsoft_typescript@637d5746b70257028fb95aad32ddec6b26ab0a14#src/testRunner/unittests/helpers",
+ "graphFingerprints": [
+ "sha256:e6f932775e1ff36c39226e5c69d1e7d194b58f367ac1f6977204cfdd62414d98",
+ "sha256:e6f932775e1ff36c39226e5c69d1e7d194b58f367ac1f6977204cfdd62414d98"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 6,
+ "matchedTruthItemCount": 6
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "exports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:386d75cf5004a2011f8829074cac29e09f22cdbb7bb224dedfba3fe869666faa"
+ }
+ },
+ {
+ "id": "cirepo_typescript_microsoft_vscode",
+ "language": "typescript",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_typescript_microsoft_vscode@53e335d0387969ba6b6bd68f2481be89252089ca#src/vs/base/common",
+ "commit": "53e335d0387969ba6b6bd68f2481be89252089ca",
+ "truthPath": "evals/code-intelligence/truth/repositories/typescript/cirepo_typescript_microsoft_vscode.json",
+ "graph": {
+ "fingerprint": "sha256:9267ce29403e5df571e0b753ec6d362f4131d1e47d06d61810a6920f10bc5771",
+ "nodeCount": 5000,
+ "edgeCount": 10000,
+ "diagnosticCount": 2,
+ "diagnostics": [
+ {
+ "code": "edge_budget_reached",
+ "count": 1801
+ },
+ {
+ "code": "node_budget_reached",
+ "count": 79
+ }
+ ],
+ "coverage": [
+ {
+ "language": "typescript",
+ "support": "partial",
+ "discoveredFileCount": 154,
+ "indexedFileCount": 154,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 1085.722,
+ "secondElapsedMs": 1075.759,
+ "evaluatorMaxRssKb": 174064,
+ "graphResponseBytes": 7212004,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_typescript_microsoft_vscode",
+ "language": "typescript",
+ "sourceRef": "corpus://cirepo_typescript_microsoft_vscode@53e335d0387969ba6b6bd68f2481be89252089ca#src/vs/base/common",
+ "graphFingerprints": [
+ "sha256:9267ce29403e5df571e0b753ec6d362f4131d1e47d06d61810a6920f10bc5771",
+ "sha256:9267ce29403e5df571e0b753ec6d362f4131d1e47d06d61810a6920f10bc5771"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 6,
+ "matchedTruthItemCount": 6
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "exports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:8be1666ffd70865903667f6f77d085f9b26d8670c031fcb1e14712be923535d5"
+ }
+ },
+ {
+ "id": "cirepo_typescript_vercel_next_js",
+ "language": "typescript",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_typescript_vercel_next_js@153bf8ac5fa00888ef5fbb2b65cac12f0942a44f#packages/next/src/server/route-modules/app-route",
+ "commit": "153bf8ac5fa00888ef5fbb2b65cac12f0942a44f",
+ "truthPath": "evals/code-intelligence/truth/repositories/typescript/cirepo_typescript_vercel_next_js.json",
+ "graph": {
+ "fingerprint": "sha256:ae665b34e530eeeb0c2a5aa593967eb95dca3b247867e9de5b60f1f56f8c822c",
+ "nodeCount": 174,
+ "edgeCount": 300,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "typescript",
+ "support": "partial",
+ "discoveredFileCount": 8,
+ "indexedFileCount": 8,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 30.707,
+ "secondElapsedMs": 28.386,
+ "evaluatorMaxRssKb": 174064,
+ "graphResponseBytes": 226045,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_typescript_vercel_next_js",
+ "language": "typescript",
+ "sourceRef": "corpus://cirepo_typescript_vercel_next_js@153bf8ac5fa00888ef5fbb2b65cac12f0942a44f#packages/next/src/server/route-modules/app-route",
+ "graphFingerprints": [
+ "sha256:ae665b34e530eeeb0c2a5aa593967eb95dca3b247867e9de5b60f1f56f8c822c",
+ "sha256:ae665b34e530eeeb0c2a5aa593967eb95dca3b247867e9de5b60f1f56f8c822c"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 6,
+ "matchedTruthItemCount": 6
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "exports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:33676fdcc3388a7bacfc1726fadaa44c2e811df43b6ce2cd8ee9ae320a2871e9"
+ }
+ },
+ {
+ "id": "cirepo_javascript_axios_axios",
+ "language": "javascript",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_javascript_axios_axios@3041b8fd1daf17404d1bad1f9d94026ea5ab400b#lib/core",
+ "commit": "3041b8fd1daf17404d1bad1f9d94026ea5ab400b",
+ "truthPath": "evals/code-intelligence/truth/repositories/javascript/cirepo_javascript_axios_axios.json",
+ "graph": {
+ "fingerprint": "sha256:89e965f4b740696cabd74debea2e51f946f613c4e848e136534c4396503204b5",
+ "nodeCount": 238,
+ "edgeCount": 441,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "javascript",
+ "support": "partial",
+ "discoveredFileCount": 10,
+ "indexedFileCount": 10,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 33.919,
+ "secondElapsedMs": 35.606,
+ "evaluatorMaxRssKb": 174064,
+ "graphResponseBytes": 321860,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_javascript_axios_axios",
+ "language": "javascript",
+ "sourceRef": "corpus://cirepo_javascript_axios_axios@3041b8fd1daf17404d1bad1f9d94026ea5ab400b#lib/core",
+ "graphFingerprints": [
+ "sha256:89e965f4b740696cabd74debea2e51f946f613c4e848e136534c4396503204b5",
+ "sha256:89e965f4b740696cabd74debea2e51f946f613c4e848e136534c4396503204b5"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 6,
+ "matchedTruthItemCount": 6
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "exports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:fc66185e8fbe18e9612d6fbde36f417011e3bc9a2c6f7a12a0007d30a7f31885"
+ }
+ },
+ {
+ "id": "cirepo_javascript_expressjs_express",
+ "language": "javascript",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_javascript_expressjs_express@ae6dd37680e3a00618d6c8a3e522f0ee4eeba1a4#lib",
+ "commit": "ae6dd37680e3a00618d6c8a3e522f0ee4eeba1a4",
+ "truthPath": "evals/code-intelligence/truth/repositories/javascript/cirepo_javascript_expressjs_express.json",
+ "graph": {
+ "fingerprint": "sha256:217d4d8616843e5ec1fd4f57ad251a2aeb308d93482a72e0c9f56799e01e3afa",
+ "nodeCount": 252,
+ "edgeCount": 466,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "javascript",
+ "support": "partial",
+ "discoveredFileCount": 6,
+ "indexedFileCount": 6,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 36.275,
+ "secondElapsedMs": 34.532,
+ "evaluatorMaxRssKb": 174064,
+ "graphResponseBytes": 337048,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_javascript_expressjs_express",
+ "language": "javascript",
+ "sourceRef": "corpus://cirepo_javascript_expressjs_express@ae6dd37680e3a00618d6c8a3e522f0ee4eeba1a4#lib",
+ "graphFingerprints": [
+ "sha256:217d4d8616843e5ec1fd4f57ad251a2aeb308d93482a72e0c9f56799e01e3afa",
+ "sha256:217d4d8616843e5ec1fd4f57ad251a2aeb308d93482a72e0c9f56799e01e3afa"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 6,
+ "matchedTruthItemCount": 6
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "exports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:89048428a86f381a8a3e630b5f31b499e5d2580ee2a7089a5c170ecf4edbd76f"
+ }
+ },
+ {
+ "id": "cirepo_javascript_lodash_lodash",
+ "language": "javascript",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_javascript_lodash_lodash@a666ba591064c8011988275790ad7d625279f09c#.",
+ "commit": "a666ba591064c8011988275790ad7d625279f09c",
+ "truthPath": "evals/code-intelligence/truth/repositories/javascript/cirepo_javascript_lodash_lodash.json",
+ "graph": {
+ "fingerprint": "sha256:651e7364c10dfdec3438d730d370022c8c477631c38eaf918f88e1645a0c20e5",
+ "nodeCount": 733,
+ "edgeCount": 1417,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "javascript",
+ "support": "partial",
+ "discoveredFileCount": 45,
+ "indexedFileCount": 45,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 186.105,
+ "secondElapsedMs": 189.195,
+ "evaluatorMaxRssKb": 174064,
+ "graphResponseBytes": 1061356,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_javascript_lodash_lodash",
+ "language": "javascript",
+ "sourceRef": "corpus://cirepo_javascript_lodash_lodash@a666ba591064c8011988275790ad7d625279f09c#.",
+ "graphFingerprints": [
+ "sha256:651e7364c10dfdec3438d730d370022c8c477631c38eaf918f88e1645a0c20e5",
+ "sha256:651e7364c10dfdec3438d730d370022c8c477631c38eaf918f88e1645a0c20e5"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 6,
+ "matchedTruthItemCount": 6
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "exports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:b43767228896f26fbd9b79d971c4b9f5845a28b7fd4a516b90418da5ffccf6bb"
+ }
+ }
+ ],
+ "languages": [
+ {
+ "language": "javascript",
+ "caseCount": 4,
+ "fixtureCount": 1,
+ "repositoryCount": 3,
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 8,
+ "denominator": 8,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 8,
+ "denominator": 8,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "gateDecision": "pass"
+ },
+ {
+ "language": "typescript",
+ "caseCount": 4,
+ "fixtureCount": 1,
+ "repositoryCount": 3,
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 6,
+ "denominator": 6,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 10,
+ "denominator": 10,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 6,
+ "denominator": 6,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "gateDecision": "pass"
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "publicDefault": {
+ "engine": "js",
+ "changed": false
+ },
+ "claims": {
+ "accuracyFloorMet": true,
+ "parity": false,
+ "leadership": false,
+ "reason": "Batch A measures reviewed JavaScript and TypeScript truth. It does not change the public engine or claim competitor parity."
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absoluteCheckoutPathsStored": false,
+ "environmentVariablesStored": false,
+ "engineNetworkCalls": 0,
+ "engineModelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:96d595c82797eab8d335b477d150ae07973a0c46fa6fb565103b20a72b06a688"
+}
diff --git a/evals/code-intelligence/results/phase2-batch-b.json b/evals/code-intelligence/results/phase2-batch-b.json
new file mode 100644
index 00000000..ba8e7f76
--- /dev/null
+++ b/evals/code-intelligence/results/phase2-batch-b.json
@@ -0,0 +1,2714 @@
+{
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-phase2-batch-b-1",
+ "phase": 2,
+ "batch": "B",
+ "generatedAt": "2026-07-18T18:33:56.425Z",
+ "inputs": {
+ "corpusFingerprint": "sha256:7e0544963c5b00e0b6d55830e1251262e6f132d4b0e28bfd4c36b64587b26c96",
+ "bounds": {
+ "maxFiles": 5000,
+ "maxFileBytes": 524288,
+ "maxNodes": 5000,
+ "maxEdges": 10000
+ },
+ "fixtureTruth": [
+ "evals/code-intelligence/truth/fixtures/python.json",
+ "evals/code-intelligence/truth/fixtures/go.json",
+ "evals/code-intelligence/truth/fixtures/rust.json"
+ ],
+ "repositoryTruth": [
+ "evals/code-intelligence/truth/repositories/python/cirepo_python_fastapi_fastapi.json",
+ "evals/code-intelligence/truth/repositories/python/cirepo_python_pallets_flask.json",
+ "evals/code-intelligence/truth/repositories/python/cirepo_python_psf_requests.json",
+ "evals/code-intelligence/truth/repositories/go/cirepo_go_gin_gonic_gin.json",
+ "evals/code-intelligence/truth/repositories/go/cirepo_go_go_chi_chi.json",
+ "evals/code-intelligence/truth/repositories/go/cirepo_go_hashicorp_go_multierror.json",
+ "evals/code-intelligence/truth/repositories/rust/cirepo_rust_dtolnay_itoa.json",
+ "evals/code-intelligence/truth/repositories/rust/cirepo_rust_serde_rs_json.json",
+ "evals/code-intelligence/truth/repositories/rust/cirepo_rust_tokio_rs_axum.json",
+ "evals/code-intelligence/truth/repositories/python/cicase_python_fastapi_app_testing.json",
+ "evals/code-intelligence/truth/repositories/python/cicase_python_flask_tutorial.json",
+ "evals/code-intelligence/truth/repositories/python/cicase_python_djangoproject_accounts.json"
+ ],
+ "repositoryRefs": [
+ "corpus://cirepo_python_fastapi_fastapi@9b8410bdc9fa1fd679ea7e65b926535c7045ab87#fastapi",
+ "corpus://cirepo_python_pallets_flask@36e4a824f340fdee7ed50937ba8e7f6bc7d17f81#src/flask",
+ "corpus://cirepo_python_psf_requests@f361ead047be5cb873174218582f7d8b9fcd9f49#src/requests",
+ "corpus://cirepo_go_gin_gonic_gin@34dac209ffb6ef85cc78c5d217bbb7ad001d68fd#.",
+ "corpus://cirepo_go_go_chi_chi@8b258c7bb28f97a5f2a856ff7ef962578fec9215#.",
+ "corpus://cirepo_go_hashicorp_go_multierror@6d4d48630db25c3c83fa83ecd41dd8438b82963c#.",
+ "corpus://cirepo_rust_dtolnay_itoa@1577ed901354d0d7448ac162328f9dbf5183124c#src",
+ "corpus://cirepo_rust_serde_rs_json@827a315bf2198558f0325b07bcc1e2cd973aba2f#src",
+ "corpus://cirepo_rust_tokio_rs_axum@98aea470f9190fad1915897166ac0f149522011a#axum/src",
+ "corpus://cirepo_python_fastapi_fastapi@9b8410bdc9fa1fd679ea7e65b926535c7045ab87#docs_src/app_testing/app_b_py310",
+ "corpus://cirepo_python_pallets_flask@36e4a824f340fdee7ed50937ba8e7f6bc7d17f81#examples/tutorial/flaskr",
+ "corpus://cirepo_python_django_djangoproject_com@7a19ab3bce8f62fed03bb3eef2c19f2d0af15470#accounts"
+ ]
+ },
+ "thresholds": {
+ "symbolRecallMinimum": 0.95,
+ "resolvedCallPrecisionMinimum": 0.9,
+ "duplicateCanonicalSymbolMaximum": 0,
+ "deterministicStructuralFingerprintRequired": true,
+ "malformedFileRepositoryFailureMaximum": 0,
+ "explicitPartialAndUnsupportedDiagnosticsRequired": true,
+ "realRepositoryGatesRequired": true
+ },
+ "cases": [
+ {
+ "id": "fixture_python_batch_b",
+ "language": "python",
+ "sourceClass": "fixture",
+ "sourceRef": "fixture://sha256:fa53fbfa008dd69235e34438208448cf5973aade4f30deee64fc92a3b144f8bb",
+ "truthPath": "evals/code-intelligence/truth/fixtures/python.json",
+ "graph": {
+ "fingerprint": "sha256:13044ef9253a800767df31e83b456497473bed521004421e435aef75578ca4ad",
+ "nodeCount": 18,
+ "edgeCount": 19,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "python",
+ "support": "partial",
+ "discoveredFileCount": 3,
+ "indexedFileCount": 3,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 30.704,
+ "secondElapsedMs": 9.531,
+ "evaluatorMaxRssKb": 60416,
+ "graphResponseBytes": 17791,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_python_batch_b_fixture",
+ "language": "python",
+ "sourceRef": "fixture://sha256:fa53fbfa008dd69235e34438208448cf5973aade4f30deee64fc92a3b144f8bb",
+ "graphFingerprints": [
+ "sha256:13044ef9253a800767df31e83b456497473bed521004421e435aef75578ca4ad",
+ "sha256:13044ef9253a800767df31e83b456497473bed521004421e435aef75578ca4ad"
+ ],
+ "reviewCoverage": {
+ "declarations": "exhaustive",
+ "relationships": "exhaustive",
+ "calls": "exhaustive"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 7,
+ "denominator": 7,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 7,
+ "denominator": 7,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 16,
+ "matchedTruthItemCount": 16
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 6,
+ "matchedItemCount": 6
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "config",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "frameworks",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:6cd8db4561448296e8815ca0df416b3f6964d54183575e36d9c1192877d0dce1"
+ }
+ },
+ {
+ "id": "fixture_go_batch_b",
+ "language": "go",
+ "sourceClass": "fixture",
+ "sourceRef": "fixture://sha256:d2b84b0659b26439d7eb09c4a3a6ec5a5eb975bb87fd5f12086289355f7f532b",
+ "truthPath": "evals/code-intelligence/truth/fixtures/go.json",
+ "graph": {
+ "fingerprint": "sha256:afd91609774d10b3eae92ab32fccbc4d38c2c014fa22e453c6b5d55de1711048",
+ "nodeCount": 16,
+ "edgeCount": 24,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "go",
+ "support": "partial",
+ "discoveredFileCount": 2,
+ "indexedFileCount": 2,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 9.661,
+ "secondElapsedMs": 9.714,
+ "evaluatorMaxRssKb": 66192,
+ "graphResponseBytes": 19051,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_go_batch_b_fixture",
+ "language": "go",
+ "sourceRef": "fixture://sha256:d2b84b0659b26439d7eb09c4a3a6ec5a5eb975bb87fd5f12086289355f7f532b",
+ "graphFingerprints": [
+ "sha256:afd91609774d10b3eae92ab32fccbc4d38c2c014fa22e453c6b5d55de1711048",
+ "sha256:afd91609774d10b3eae92ab32fccbc4d38c2c014fa22e453c6b5d55de1711048"
+ ],
+ "reviewCoverage": {
+ "declarations": "exhaustive",
+ "relationships": "exhaustive",
+ "calls": "exhaustive"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 7,
+ "denominator": 7,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 5,
+ "denominator": 5,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 16,
+ "matchedTruthItemCount": 16
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 7,
+ "matchedItemCount": 7
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "config",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:b4492add33d14e5b93fbe26034cd2e034cbe070947a79362977ae31a0a8988a3"
+ }
+ },
+ {
+ "id": "fixture_rust_batch_b",
+ "language": "rust",
+ "sourceClass": "fixture",
+ "sourceRef": "fixture://sha256:1d75880dd0dbf80f9af36f5463184ef1b6a7bf2be1f3bcc5ffa24c5f971f3d9c",
+ "truthPath": "evals/code-intelligence/truth/fixtures/rust.json",
+ "graph": {
+ "fingerprint": "sha256:73c572f9851bc19bba6a5c8e81203ab4747c9fb4753b30c42c78fe62264e9502",
+ "nodeCount": 18,
+ "edgeCount": 23,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "rust",
+ "support": "partial",
+ "discoveredFileCount": 2,
+ "indexedFileCount": 2,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 9.092,
+ "secondElapsedMs": 9.423,
+ "evaluatorMaxRssKb": 66512,
+ "graphResponseBytes": 19198,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_rust_batch_b_fixture",
+ "language": "rust",
+ "sourceRef": "fixture://sha256:1d75880dd0dbf80f9af36f5463184ef1b6a7bf2be1f3bcc5ffa24c5f971f3d9c",
+ "graphFingerprints": [
+ "sha256:73c572f9851bc19bba6a5c8e81203ab4747c9fb4753b30c42c78fe62264e9502",
+ "sha256:73c572f9851bc19bba6a5c8e81203ab4747c9fb4753b30c42c78fe62264e9502"
+ ],
+ "reviewCoverage": {
+ "declarations": "exhaustive",
+ "relationships": "exhaustive",
+ "calls": "exhaustive"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 11,
+ "denominator": 11,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 7,
+ "denominator": 7,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 22,
+ "matchedTruthItemCount": 22
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 11,
+ "matchedItemCount": 11
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "config",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:6d7547725cb915dbf9b0899029d50dd4bc45ffc9805badfe227e3f9efc0bef6f"
+ }
+ },
+ {
+ "id": "cirepo_python_fastapi_fastapi",
+ "repositoryId": "cirepo_python_fastapi_fastapi",
+ "language": "python",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_python_fastapi_fastapi@9b8410bdc9fa1fd679ea7e65b926535c7045ab87#fastapi",
+ "commit": "9b8410bdc9fa1fd679ea7e65b926535c7045ab87",
+ "truthPath": "evals/code-intelligence/truth/repositories/python/cirepo_python_fastapi_fastapi.json",
+ "graph": {
+ "fingerprint": "sha256:e91cb4112da27807c609a133097d948b1ae3c74970e7a0305e39a3aba747f259",
+ "nodeCount": 1065,
+ "edgeCount": 3479,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "python",
+ "support": "partial",
+ "discoveredFileCount": 48,
+ "indexedFileCount": 48,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 220.405,
+ "secondElapsedMs": 227.017,
+ "evaluatorMaxRssKb": 119728,
+ "graphResponseBytes": 2232748,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_python_fastapi_fastapi",
+ "language": "python",
+ "sourceRef": "corpus://cirepo_python_fastapi_fastapi@9b8410bdc9fa1fd679ea7e65b926535c7045ab87#fastapi",
+ "graphFingerprints": [
+ "sha256:e91cb4112da27807c609a133097d948b1ae3c74970e7a0305e39a3aba747f259",
+ "sha256:e91cb4112da27807c609a133097d948b1ae3c74970e7a0305e39a3aba747f259"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 9,
+ "matchedTruthItemCount": 9
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:9bfbc14b903d49ece52d7f08d643aeb1f47f5d0ef8d41e280d0e6135db82e477"
+ }
+ },
+ {
+ "id": "cirepo_python_pallets_flask",
+ "repositoryId": "cirepo_python_pallets_flask",
+ "language": "python",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_python_pallets_flask@36e4a824f340fdee7ed50937ba8e7f6bc7d17f81#src/flask",
+ "commit": "36e4a824f340fdee7ed50937ba8e7f6bc7d17f81",
+ "truthPath": "evals/code-intelligence/truth/repositories/python/cirepo_python_pallets_flask.json",
+ "graph": {
+ "fingerprint": "sha256:1ecd754ea69fde3d39b877f41731200fd4c04637a0f331b9cf0bd6d522682658",
+ "nodeCount": 1045,
+ "edgeCount": 1958,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "python",
+ "support": "partial",
+ "discoveredFileCount": 24,
+ "indexedFileCount": 24,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 130.23,
+ "secondElapsedMs": 129.131,
+ "evaluatorMaxRssKb": 128752,
+ "graphResponseBytes": 1403619,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_python_pallets_flask",
+ "language": "python",
+ "sourceRef": "corpus://cirepo_python_pallets_flask@36e4a824f340fdee7ed50937ba8e7f6bc7d17f81#src/flask",
+ "graphFingerprints": [
+ "sha256:1ecd754ea69fde3d39b877f41731200fd4c04637a0f331b9cf0bd6d522682658",
+ "sha256:1ecd754ea69fde3d39b877f41731200fd4c04637a0f331b9cf0bd6d522682658"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 9,
+ "matchedTruthItemCount": 9
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:553920fcf0541aedc1ec3ea52a50d560772dfd7fe1d0ee465414a13259c4e491"
+ }
+ },
+ {
+ "id": "cirepo_python_psf_requests",
+ "repositoryId": "cirepo_python_psf_requests",
+ "language": "python",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_python_psf_requests@f361ead047be5cb873174218582f7d8b9fcd9f49#src/requests",
+ "commit": "f361ead047be5cb873174218582f7d8b9fcd9f49",
+ "truthPath": "evals/code-intelligence/truth/repositories/python/cirepo_python_psf_requests.json",
+ "graph": {
+ "fingerprint": "sha256:fe288ba0e94c571904684586c9de5e7af1b10b099d25fc14364beeea1949fe07",
+ "nodeCount": 705,
+ "edgeCount": 1514,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "python",
+ "support": "partial",
+ "discoveredFileCount": 19,
+ "indexedFileCount": 19,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 100.999,
+ "secondElapsedMs": 101.268,
+ "evaluatorMaxRssKb": 135760,
+ "graphResponseBytes": 1043140,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_python_psf_requests",
+ "language": "python",
+ "sourceRef": "corpus://cirepo_python_psf_requests@f361ead047be5cb873174218582f7d8b9fcd9f49#src/requests",
+ "graphFingerprints": [
+ "sha256:fe288ba0e94c571904684586c9de5e7af1b10b099d25fc14364beeea1949fe07",
+ "sha256:fe288ba0e94c571904684586c9de5e7af1b10b099d25fc14364beeea1949fe07"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 5,
+ "denominator": 5,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 10,
+ "matchedTruthItemCount": 10
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:048258f7d1db528980ecabb842ab92bba3e6d23d3a2f6a3c8a5295ae6d3f047f"
+ }
+ },
+ {
+ "id": "cirepo_go_gin_gonic_gin",
+ "repositoryId": "cirepo_go_gin_gonic_gin",
+ "language": "go",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_go_gin_gonic_gin@34dac209ffb6ef85cc78c5d217bbb7ad001d68fd#.",
+ "commit": "34dac209ffb6ef85cc78c5d217bbb7ad001d68fd",
+ "truthPath": "evals/code-intelligence/truth/repositories/go/cirepo_go_gin_gonic_gin.json",
+ "graph": {
+ "fingerprint": "sha256:fa3e06c4a07b845ec71454dcb9f7e930167beece27cf1e06b69339bc39b831b9",
+ "nodeCount": 3654,
+ "edgeCount": 10000,
+ "diagnosticCount": 1,
+ "diagnostics": [
+ {
+ "code": "edge_budget_reached",
+ "count": 3406
+ }
+ ],
+ "coverage": [
+ {
+ "language": "go",
+ "support": "partial",
+ "discoveredFileCount": 99,
+ "indexedFileCount": 99,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 933.641,
+ "secondElapsedMs": 927.163,
+ "evaluatorMaxRssKb": 162432,
+ "graphResponseBytes": 6590671,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_go_gin_gonic_gin",
+ "language": "go",
+ "sourceRef": "corpus://cirepo_go_gin_gonic_gin@34dac209ffb6ef85cc78c5d217bbb7ad001d68fd#.",
+ "graphFingerprints": [
+ "sha256:fa3e06c4a07b845ec71454dcb9f7e930167beece27cf1e06b69339bc39b831b9",
+ "sha256:fa3e06c4a07b845ec71454dcb9f7e930167beece27cf1e06b69339bc39b831b9"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 10,
+ "matchedTruthItemCount": 10
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:48ade34716b9868024e0bb6ec58e2518c279fc941c28b532d3398d03c5b4a3b8"
+ }
+ },
+ {
+ "id": "cirepo_go_go_chi_chi",
+ "repositoryId": "cirepo_go_go_chi_chi",
+ "language": "go",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_go_go_chi_chi@8b258c7bb28f97a5f2a856ff7ef962578fec9215#.",
+ "commit": "8b258c7bb28f97a5f2a856ff7ef962578fec9215",
+ "truthPath": "evals/code-intelligence/truth/repositories/go/cirepo_go_go_chi_chi.json",
+ "graph": {
+ "fingerprint": "sha256:c5b7272991750a72368f6fbe154afb0c1e569f4ee934cee74f52129a7b03ccab",
+ "nodeCount": 1703,
+ "edgeCount": 4692,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "go",
+ "support": "partial",
+ "discoveredFileCount": 78,
+ "indexedFileCount": 78,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 294.945,
+ "secondElapsedMs": 298.653,
+ "evaluatorMaxRssKb": 162432,
+ "graphResponseBytes": 3107247,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_go_go_chi_chi",
+ "language": "go",
+ "sourceRef": "corpus://cirepo_go_go_chi_chi@8b258c7bb28f97a5f2a856ff7ef962578fec9215#.",
+ "graphFingerprints": [
+ "sha256:c5b7272991750a72368f6fbe154afb0c1e569f4ee934cee74f52129a7b03ccab",
+ "sha256:c5b7272991750a72368f6fbe154afb0c1e569f4ee934cee74f52129a7b03ccab"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 11,
+ "matchedTruthItemCount": 11
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:b05b7c69b75d32242f7b00768bbcf768e03f6d2dbe87b96a0c72873fedac1d6d"
+ }
+ },
+ {
+ "id": "cirepo_go_hashicorp_go_multierror",
+ "repositoryId": "cirepo_go_hashicorp_go_multierror",
+ "language": "go",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_go_hashicorp_go_multierror@6d4d48630db25c3c83fa83ecd41dd8438b82963c#.",
+ "commit": "6d4d48630db25c3c83fa83ecd41dd8438b82963c",
+ "truthPath": "evals/code-intelligence/truth/repositories/go/cirepo_go_hashicorp_go_multierror.json",
+ "graph": {
+ "fingerprint": "sha256:59ddab1af2c052c5a7c8809655c7d0ac4c6d2025356c9ef6bb7492c3b289f826",
+ "nodeCount": 165,
+ "edgeCount": 425,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "go",
+ "support": "partial",
+ "discoveredFileCount": 14,
+ "indexedFileCount": 14,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 29.354,
+ "secondElapsedMs": 28.824,
+ "evaluatorMaxRssKb": 162432,
+ "graphResponseBytes": 279569,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_go_hashicorp_go_multierror",
+ "language": "go",
+ "sourceRef": "corpus://cirepo_go_hashicorp_go_multierror@6d4d48630db25c3c83fa83ecd41dd8438b82963c#.",
+ "graphFingerprints": [
+ "sha256:59ddab1af2c052c5a7c8809655c7d0ac4c6d2025356c9ef6bb7492c3b289f826",
+ "sha256:59ddab1af2c052c5a7c8809655c7d0ac4c6d2025356c9ef6bb7492c3b289f826"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 10,
+ "matchedTruthItemCount": 10
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:29ce7204266831b4dcc5a27405eb1053ec586823d6292254a1f5e405102c7811"
+ }
+ },
+ {
+ "id": "cirepo_rust_dtolnay_itoa",
+ "repositoryId": "cirepo_rust_dtolnay_itoa",
+ "language": "rust",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_rust_dtolnay_itoa@1577ed901354d0d7448ac162328f9dbf5183124c#src",
+ "commit": "1577ed901354d0d7448ac162328f9dbf5183124c",
+ "truthPath": "evals/code-intelligence/truth/repositories/rust/cirepo_rust_dtolnay_itoa.json",
+ "graph": {
+ "fingerprint": "sha256:022d9bd948bf47b9ca33ef740b1cfe69a622fee5acd15531c00314f92a692137",
+ "nodeCount": 39,
+ "edgeCount": 83,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "rust",
+ "support": "partial",
+ "discoveredFileCount": 2,
+ "indexedFileCount": 2,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 13.66,
+ "secondElapsedMs": 12.405,
+ "evaluatorMaxRssKb": 162432,
+ "graphResponseBytes": 57030,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_rust_dtolnay_itoa",
+ "language": "rust",
+ "sourceRef": "corpus://cirepo_rust_dtolnay_itoa@1577ed901354d0d7448ac162328f9dbf5183124c#src",
+ "graphFingerprints": [
+ "sha256:022d9bd948bf47b9ca33ef740b1cfe69a622fee5acd15531c00314f92a692137",
+ "sha256:022d9bd948bf47b9ca33ef740b1cfe69a622fee5acd15531c00314f92a692137"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 11,
+ "matchedTruthItemCount": 11
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:7b02a4f4dba42b34c81b080928cd7d93f2ba7b50c345c3667321f5021d71db83"
+ }
+ },
+ {
+ "id": "cirepo_rust_serde_rs_json",
+ "repositoryId": "cirepo_rust_serde_rs_json",
+ "language": "rust",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_rust_serde_rs_json@827a315bf2198558f0325b07bcc1e2cd973aba2f#src",
+ "commit": "827a315bf2198558f0325b07bcc1e2cd973aba2f",
+ "truthPath": "evals/code-intelligence/truth/repositories/rust/cirepo_rust_serde_rs_json.json",
+ "graph": {
+ "fingerprint": "sha256:9e8342f718cf88ccee6257290a580acb3f5ef1412bebc74d40b78fd88f8d53a3",
+ "nodeCount": 1972,
+ "edgeCount": 4518,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "rust",
+ "support": "partial",
+ "discoveredFileCount": 37,
+ "indexedFileCount": 37,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 317.279,
+ "secondElapsedMs": 319.389,
+ "evaluatorMaxRssKb": 163168,
+ "graphResponseBytes": 3060926,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_rust_serde_rs_json",
+ "language": "rust",
+ "sourceRef": "corpus://cirepo_rust_serde_rs_json@827a315bf2198558f0325b07bcc1e2cd973aba2f#src",
+ "graphFingerprints": [
+ "sha256:9e8342f718cf88ccee6257290a580acb3f5ef1412bebc74d40b78fd88f8d53a3",
+ "sha256:9e8342f718cf88ccee6257290a580acb3f5ef1412bebc74d40b78fd88f8d53a3"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 10,
+ "matchedTruthItemCount": 10
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:b4f762887cdb6073fc5036d966867095921f41e36c986cefd71540d35fa1fa85"
+ }
+ },
+ {
+ "id": "cirepo_rust_tokio_rs_axum",
+ "repositoryId": "cirepo_rust_tokio_rs_axum",
+ "language": "rust",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_rust_tokio_rs_axum@98aea470f9190fad1915897166ac0f149522011a#axum/src",
+ "commit": "98aea470f9190fad1915897166ac0f149522011a",
+ "truthPath": "evals/code-intelligence/truth/repositories/rust/cirepo_rust_tokio_rs_axum.json",
+ "graph": {
+ "fingerprint": "sha256:1a8935bf1fda43576f2c38769e4f15b4d71e884818cd0bff008d0fb9dd03c99c",
+ "nodeCount": 2897,
+ "edgeCount": 6270,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "rust",
+ "support": "partial",
+ "discoveredFileCount": 58,
+ "indexedFileCount": 58,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 486.899,
+ "secondElapsedMs": 491.053,
+ "evaluatorMaxRssKb": 166400,
+ "graphResponseBytes": 4414281,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_rust_tokio_rs_axum",
+ "language": "rust",
+ "sourceRef": "corpus://cirepo_rust_tokio_rs_axum@98aea470f9190fad1915897166ac0f149522011a#axum/src",
+ "graphFingerprints": [
+ "sha256:1a8935bf1fda43576f2c38769e4f15b4d71e884818cd0bff008d0fb9dd03c99c",
+ "sha256:1a8935bf1fda43576f2c38769e4f15b4d71e884818cd0bff008d0fb9dd03c99c"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 11,
+ "matchedTruthItemCount": 11
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:c387357eda8a6a1e3730ea24cda487f578e87f9263e30c2b2d857ef31b34b0c7"
+ }
+ },
+ {
+ "id": "cicase_python_fastapi_app_testing",
+ "repositoryId": "cirepo_python_fastapi_fastapi",
+ "language": "python",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_python_fastapi_fastapi@9b8410bdc9fa1fd679ea7e65b926535c7045ab87#docs_src/app_testing/app_b_py310",
+ "commit": "9b8410bdc9fa1fd679ea7e65b926535c7045ab87",
+ "truthPath": "evals/code-intelligence/truth/repositories/python/cicase_python_fastapi_app_testing.json",
+ "graph": {
+ "fingerprint": "sha256:c8792ad821a7a68b0ea8c9fa441182b1b4a0fddc60eed9ce99b0596ac20b9614",
+ "nodeCount": 28,
+ "edgeCount": 39,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "python",
+ "support": "partial",
+ "discoveredFileCount": 3,
+ "indexedFileCount": 3,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 12.292,
+ "secondElapsedMs": 10.346,
+ "evaluatorMaxRssKb": 166400,
+ "graphResponseBytes": 31262,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_python_fastapi_app_testing",
+ "language": "python",
+ "sourceRef": "corpus://cirepo_python_fastapi_fastapi@9b8410bdc9fa1fd679ea7e65b926535c7045ab87#docs_src/app_testing/app_b_py310",
+ "graphFingerprints": [
+ "sha256:c8792ad821a7a68b0ea8c9fa441182b1b4a0fddc60eed9ce99b0596ac20b9614",
+ "sha256:c8792ad821a7a68b0ea8c9fa441182b1b4a0fddc60eed9ce99b0596ac20b9614"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "relationshipRecall": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 1,
+ "matchedTruthItemCount": 1
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "imports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "calls",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:2fe43b6ed744c4356c0650e4b84d82fab49f99a214729a1ceae14b7d5ad82afa"
+ }
+ },
+ {
+ "id": "cicase_python_flask_tutorial",
+ "repositoryId": "cirepo_python_pallets_flask",
+ "language": "python",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_python_pallets_flask@36e4a824f340fdee7ed50937ba8e7f6bc7d17f81#examples/tutorial/flaskr",
+ "commit": "36e4a824f340fdee7ed50937ba8e7f6bc7d17f81",
+ "truthPath": "evals/code-intelligence/truth/repositories/python/cicase_python_flask_tutorial.json",
+ "graph": {
+ "fingerprint": "sha256:2cf0eb18e3748125a72a6309888192b92c34ed2ec42b3307e6e2c37030be6882",
+ "nodeCount": 83,
+ "edgeCount": 139,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "python",
+ "support": "partial",
+ "discoveredFileCount": 4,
+ "indexedFileCount": 4,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 16.316,
+ "secondElapsedMs": 17.358,
+ "evaluatorMaxRssKb": 166400,
+ "graphResponseBytes": 101541,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_python_flask_tutorial",
+ "language": "python",
+ "sourceRef": "corpus://cirepo_python_pallets_flask@36e4a824f340fdee7ed50937ba8e7f6bc7d17f81#examples/tutorial/flaskr",
+ "graphFingerprints": [
+ "sha256:2cf0eb18e3748125a72a6309888192b92c34ed2ec42b3307e6e2c37030be6882",
+ "sha256:2cf0eb18e3748125a72a6309888192b92c34ed2ec42b3307e6e2c37030be6882"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "relationshipRecall": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 1,
+ "matchedTruthItemCount": 1
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "imports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "calls",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:591c13e2d6bf6cda2f95b226e22e835210d4eb697b2751b9d1783e1787644003"
+ }
+ },
+ {
+ "id": "cicase_python_djangoproject_accounts",
+ "repositoryId": "cirepo_python_django_djangoproject_com",
+ "language": "python",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_python_django_djangoproject_com@7a19ab3bce8f62fed03bb3eef2c19f2d0af15470#accounts",
+ "commit": "7a19ab3bce8f62fed03bb3eef2c19f2d0af15470",
+ "truthPath": "evals/code-intelligence/truth/repositories/python/cicase_python_djangoproject_accounts.json",
+ "graph": {
+ "fingerprint": "sha256:87c5c59cbaf95573dbae7cc5884f3efd6f100cc5c1b626f7f17acac471ad9c1d",
+ "nodeCount": 128,
+ "edgeCount": 226,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "python",
+ "support": "partial",
+ "discoveredFileCount": 9,
+ "indexedFileCount": 9,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 21.858,
+ "secondElapsedMs": 21.79,
+ "evaluatorMaxRssKb": 166400,
+ "graphResponseBytes": 164735,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_python_djangoproject_accounts",
+ "language": "python",
+ "sourceRef": "corpus://cirepo_python_django_djangoproject_com@7a19ab3bce8f62fed03bb3eef2c19f2d0af15470#accounts",
+ "graphFingerprints": [
+ "sha256:87c5c59cbaf95573dbae7cc5884f3efd6f100cc5c1b626f7f17acac471ad9c1d",
+ "sha256:87c5c59cbaf95573dbae7cc5884f3efd6f100cc5c1b626f7f17acac471ad9c1d"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "relationshipRecall": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 1,
+ "matchedTruthItemCount": 1
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "imports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "calls",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:f7b8b3c36c7acadcfddae7dbfb64617d528ec174b3d0767df74c5465e34c3a04"
+ }
+ }
+ ],
+ "languages": [
+ {
+ "language": "python",
+ "caseCount": 7,
+ "fixtureCount": 1,
+ "repositoryCount": 4,
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 20,
+ "denominator": 20,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 22,
+ "denominator": 22,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "gateDecision": "pass"
+ },
+ {
+ "language": "go",
+ "caseCount": 4,
+ "fixtureCount": 1,
+ "repositoryCount": 3,
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 19,
+ "denominator": 19,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 15,
+ "denominator": 15,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "gateDecision": "pass"
+ },
+ {
+ "language": "rust",
+ "caseCount": 4,
+ "fixtureCount": 1,
+ "repositoryCount": 3,
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 23,
+ "denominator": 23,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 18,
+ "denominator": 18,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "gateDecision": "pass"
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "publicDefault": {
+ "engine": "js",
+ "changed": false
+ },
+ "claims": {
+ "accuracyFloorMet": true,
+ "parity": false,
+ "leadership": false,
+ "reason": "Batch B measures reviewed Python, Go, and Rust truth. It does not change the public engine or claim competitor parity."
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absoluteCheckoutPathsStored": false,
+ "environmentVariablesStored": false,
+ "engineNetworkCalls": 0,
+ "engineModelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:c557321ef9c410e29e4aa917bb96a12ebb6122cd93a1053fdee3e001bee57546"
+}
diff --git a/evals/code-intelligence/results/phase2-batch-c.json b/evals/code-intelligence/results/phase2-batch-c.json
new file mode 100644
index 00000000..6f7bd83b
--- /dev/null
+++ b/evals/code-intelligence/results/phase2-batch-c.json
@@ -0,0 +1,2208 @@
+{
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-phase2-batch-c-1",
+ "phase": 2,
+ "batch": "C",
+ "generatedAt": "2026-07-18T17:36:44.826Z",
+ "inputs": {
+ "corpusFingerprint": "sha256:7e0544963c5b00e0b6d55830e1251262e6f132d4b0e28bfd4c36b64587b26c96",
+ "bounds": {
+ "maxFiles": 5000,
+ "maxFileBytes": 524288,
+ "maxNodes": 5000,
+ "maxEdges": 10000
+ },
+ "fixtureTruth": [
+ "evals/code-intelligence/truth/fixtures/java.json",
+ "evals/code-intelligence/truth/fixtures/kotlin.json",
+ "evals/code-intelligence/truth/fixtures/csharp.json"
+ ],
+ "repositoryTruth": [
+ "evals/code-intelligence/truth/repositories/java/cirepo_java_google_gson.json",
+ "evals/code-intelligence/truth/repositories/java/cirepo_java_google_guava.json",
+ "evals/code-intelligence/truth/repositories/java/cirepo_java_spring_projects_spring_petclinic.json",
+ "evals/code-intelligence/truth/repositories/kotlin/cirepo_kotlin_android_nowinandroid.json",
+ "evals/code-intelligence/truth/repositories/kotlin/cirepo_kotlin_kotlin_kotlinx_coroutines.json",
+ "evals/code-intelligence/truth/repositories/kotlin/cirepo_kotlin_ktorio_ktor.json",
+ "evals/code-intelligence/truth/repositories/csharp/cirepo_csharp_dotnet_aspnetcore.json",
+ "evals/code-intelligence/truth/repositories/csharp/cirepo_csharp_dotnet_runtime.json",
+ "evals/code-intelligence/truth/repositories/csharp/cirepo_csharp_jamesnk_newtonsoft_json.json"
+ ],
+ "repositoryRefs": [
+ "corpus://cirepo_java_google_gson@c9f3fd55854a743b66f857ace3c7b268ea3e2ef7#gson/src/main/java/com/google/gson/reflect",
+ "corpus://cirepo_java_google_guava@5143dbe06b8a1632b50c8fe19b2870fe135e46e2#guava/src/com/google/common/base/internal",
+ "corpus://cirepo_java_spring_projects_spring_petclinic@51045d1648dad955df586150c1a1a6e22ef400c2#src/main/java/org/springframework/samples/petclinic/owner",
+ "corpus://cirepo_kotlin_android_nowinandroid@7d45eae4f8720a0c77f507712ba2437ff974b6ed#core/model/src/main/kotlin",
+ "corpus://cirepo_kotlin_kotlin_kotlinx_coroutines@165c6cb5859b5365dec193abc75dee9f49ce1389#kotlinx-coroutines-core/common/src/internal",
+ "corpus://cirepo_kotlin_ktorio_ktor@fc6595632e7412abb98b941f926d0ea13c7647d1#ktor-server/ktor-server-core/common/src/io/ktor/server/routing",
+ "corpus://cirepo_csharp_dotnet_aspnetcore@d89ecc425733c5439096864cb9f7f97cab5416a0#src/Http/Routing/src/Patterns",
+ "corpus://cirepo_csharp_dotnet_runtime@e487c08fc5e689918da3e7fbb2747ca8b02c260d#src/libraries/System.Text.Json/src/System/Text/Json/Nodes",
+ "corpus://cirepo_csharp_jamesnk_newtonsoft_json@4f73e74372445108d2c1bda37b36e6f5e43402e0#Src/Newtonsoft.Json/Linq/JsonPath"
+ ]
+ },
+ "thresholds": {
+ "symbolRecallMinimum": 0.95,
+ "resolvedCallPrecisionMinimum": 0.9,
+ "duplicateCanonicalSymbolMaximum": 0,
+ "deterministicStructuralFingerprintRequired": true,
+ "malformedFileRepositoryFailureMaximum": 0,
+ "explicitPartialAndUnsupportedDiagnosticsRequired": true,
+ "realRepositoryGatesRequired": true
+ },
+ "cases": [
+ {
+ "id": "fixture_java_batch_c",
+ "language": "java",
+ "sourceClass": "fixture",
+ "sourceRef": "fixture://sha256:ad39462c53135511473eb41f8b657da328927345db347861b0a7ff10bdfc769c",
+ "truthPath": "evals/code-intelligence/truth/fixtures/java.json",
+ "graph": {
+ "fingerprint": "sha256:e6b5542480c2b3b869577528a7d5cde1b9c804e0274823494b0c7dce356c3bbd",
+ "nodeCount": 26,
+ "edgeCount": 31,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "java",
+ "support": "partial",
+ "discoveredFileCount": 3,
+ "indexedFileCount": 3,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 34.035,
+ "secondElapsedMs": 12.829,
+ "evaluatorMaxRssKb": 61664,
+ "graphResponseBytes": 29861,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_java_batch_c_fixture",
+ "language": "java",
+ "sourceRef": "fixture://sha256:ad39462c53135511473eb41f8b657da328927345db347861b0a7ff10bdfc769c",
+ "graphFingerprints": [
+ "sha256:e6b5542480c2b3b869577528a7d5cde1b9c804e0274823494b0c7dce356c3bbd",
+ "sha256:e6b5542480c2b3b869577528a7d5cde1b9c804e0274823494b0c7dce356c3bbd"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 10,
+ "denominator": 10,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 17,
+ "matchedTruthItemCount": 17
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 9,
+ "matchedItemCount": 9
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:bc843f0a04e6524eb48f1b9fba71c997def8f957a7e9ce841139b48e064c4f76"
+ }
+ },
+ {
+ "id": "fixture_kotlin_batch_c",
+ "language": "kotlin",
+ "sourceClass": "fixture",
+ "sourceRef": "fixture://sha256:cfff5566f8341ab07fb7b53d900368fbf47cb2535fcec14ad2c8a1b2a7cccac5",
+ "truthPath": "evals/code-intelligence/truth/fixtures/kotlin.json",
+ "graph": {
+ "fingerprint": "sha256:d7c6bef8b1e4a9e28fc9003b74e89d913646a6a37bc883560ffeac355b37db2e",
+ "nodeCount": 25,
+ "edgeCount": 30,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "kotlin",
+ "support": "partial",
+ "discoveredFileCount": 3,
+ "indexedFileCount": 3,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 12.915,
+ "secondElapsedMs": 12.173,
+ "evaluatorMaxRssKb": 66592,
+ "graphResponseBytes": 28638,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_kotlin_batch_c_fixture",
+ "language": "kotlin",
+ "sourceRef": "fixture://sha256:cfff5566f8341ab07fb7b53d900368fbf47cb2535fcec14ad2c8a1b2a7cccac5",
+ "graphFingerprints": [
+ "sha256:d7c6bef8b1e4a9e28fc9003b74e89d913646a6a37bc883560ffeac355b37db2e",
+ "sha256:d7c6bef8b1e4a9e28fc9003b74e89d913646a6a37bc883560ffeac355b37db2e"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 11,
+ "denominator": 11,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 18,
+ "matchedTruthItemCount": 18
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 9,
+ "matchedItemCount": 9
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:62ad498c2e5cda308fb47ab4cbbf956c8d89e7e32fbc2dcddbd2bd0e1f4b42d3"
+ }
+ },
+ {
+ "id": "fixture_csharp_batch_c",
+ "language": "csharp",
+ "sourceClass": "fixture",
+ "sourceRef": "fixture://sha256:fb5825d7f930972c667cd4d519daaa8afe058367eeba76a07a88fa67e42f88b1",
+ "truthPath": "evals/code-intelligence/truth/fixtures/csharp.json",
+ "graph": {
+ "fingerprint": "sha256:bcfc56309cec380829a6e3344f56eb9f1a3026914f106fc20ff6ae87e46ead19",
+ "nodeCount": 32,
+ "edgeCount": 37,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "csharp",
+ "support": "partial",
+ "discoveredFileCount": 3,
+ "indexedFileCount": 3,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 12.725,
+ "secondElapsedMs": 12.459,
+ "evaluatorMaxRssKb": 67984,
+ "graphResponseBytes": 32773,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_csharp_batch_c_fixture",
+ "language": "csharp",
+ "sourceRef": "fixture://sha256:fb5825d7f930972c667cd4d519daaa8afe058367eeba76a07a88fa67e42f88b1",
+ "graphFingerprints": [
+ "sha256:bcfc56309cec380829a6e3344f56eb9f1a3026914f106fc20ff6ae87e46ead19",
+ "sha256:bcfc56309cec380829a6e3344f56eb9f1a3026914f106fc20ff6ae87e46ead19"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 14,
+ "denominator": 14,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 22,
+ "matchedTruthItemCount": 22
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 12,
+ "matchedItemCount": 12
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:0c42d94dc401a69e63eea301227e6888534743bc11c63424f306f5913735a1ba"
+ }
+ },
+ {
+ "id": "cirepo_java_google_gson",
+ "repositoryId": "cirepo_java_google_gson",
+ "language": "java",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_java_google_gson@c9f3fd55854a743b66f857ace3c7b268ea3e2ef7#gson/src/main/java/com/google/gson/reflect",
+ "commit": "c9f3fd55854a743b66f857ace3c7b268ea3e2ef7",
+ "truthPath": "evals/code-intelligence/truth/repositories/java/cirepo_java_google_gson.json",
+ "graph": {
+ "fingerprint": "sha256:b0f172e92b298f3f7bc9ce294eeb39688fe590065133ab8fe560aba6f041a2a1",
+ "nodeCount": 74,
+ "edgeCount": 149,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "java",
+ "support": "partial",
+ "discoveredFileCount": 2,
+ "indexedFileCount": 2,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 19.49,
+ "secondElapsedMs": 18.813,
+ "evaluatorMaxRssKb": 72576,
+ "graphResponseBytes": 107661,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_java_google_gson_reflect",
+ "language": "java",
+ "sourceRef": "corpus://cirepo_java_google_gson@c9f3fd55854a743b66f857ace3c7b268ea3e2ef7#gson/src/main/java/com/google/gson/reflect",
+ "graphFingerprints": [
+ "sha256:b0f172e92b298f3f7bc9ce294eeb39688fe590065133ab8fe560aba6f041a2a1",
+ "sha256:b0f172e92b298f3f7bc9ce294eeb39688fe590065133ab8fe560aba6f041a2a1"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 6,
+ "matchedTruthItemCount": 6
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:99f0e2a7aeeac0e3faaad9eab56e483e812880240fd6db3130e856a0bc806b7f"
+ }
+ },
+ {
+ "id": "cirepo_java_google_guava",
+ "repositoryId": "cirepo_java_google_guava",
+ "language": "java",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_java_google_guava@5143dbe06b8a1632b50c8fe19b2870fe135e46e2#guava/src/com/google/common/base/internal",
+ "commit": "5143dbe06b8a1632b50c8fe19b2870fe135e46e2",
+ "truthPath": "evals/code-intelligence/truth/repositories/java/cirepo_java_google_guava.json",
+ "graph": {
+ "fingerprint": "sha256:94aeb8dd47b6fe2a467196ef479e3d2936587cd8209a2002528accc5a833adaf",
+ "nodeCount": 45,
+ "edgeCount": 53,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "java",
+ "support": "partial",
+ "discoveredFileCount": 1,
+ "indexedFileCount": 1,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 12.398,
+ "secondElapsedMs": 12.854,
+ "evaluatorMaxRssKb": 72880,
+ "graphResponseBytes": 46010,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_java_google_guava_finalizer",
+ "language": "java",
+ "sourceRef": "corpus://cirepo_java_google_guava@5143dbe06b8a1632b50c8fe19b2870fe135e46e2#guava/src/com/google/common/base/internal",
+ "graphFingerprints": [
+ "sha256:94aeb8dd47b6fe2a467196ef479e3d2936587cd8209a2002528accc5a833adaf",
+ "sha256:94aeb8dd47b6fe2a467196ef479e3d2936587cd8209a2002528accc5a833adaf"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 6,
+ "matchedTruthItemCount": 6
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:8ee217002cc6849ff53dd32ae5970ab8d5120033427bdedcce2312915ad8d5e8"
+ }
+ },
+ {
+ "id": "cirepo_java_spring_projects_spring_petclinic",
+ "repositoryId": "cirepo_java_spring_projects_spring_petclinic",
+ "language": "java",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_java_spring_projects_spring_petclinic@51045d1648dad955df586150c1a1a6e22ef400c2#src/main/java/org/springframework/samples/petclinic/owner",
+ "commit": "51045d1648dad955df586150c1a1a6e22ef400c2",
+ "truthPath": "evals/code-intelligence/truth/repositories/java/cirepo_java_spring_projects_spring_petclinic.json",
+ "graph": {
+ "fingerprint": "sha256:f7c946087b2898df39c915afc8ef76ad9fc8add1e35b0d8e2dbdc36696be8068",
+ "nodeCount": 263,
+ "edgeCount": 391,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "java",
+ "support": "partial",
+ "discoveredFileCount": 12,
+ "indexedFileCount": 12,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 35.111,
+ "secondElapsedMs": 36.171,
+ "evaluatorMaxRssKb": 75376,
+ "graphResponseBytes": 312840,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_java_spring_petclinic_owner",
+ "language": "java",
+ "sourceRef": "corpus://cirepo_java_spring_projects_spring_petclinic@51045d1648dad955df586150c1a1a6e22ef400c2#src/main/java/org/springframework/samples/petclinic/owner",
+ "graphFingerprints": [
+ "sha256:f7c946087b2898df39c915afc8ef76ad9fc8add1e35b0d8e2dbdc36696be8068",
+ "sha256:f7c946087b2898df39c915afc8ef76ad9fc8add1e35b0d8e2dbdc36696be8068"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 5,
+ "denominator": 5,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 8,
+ "matchedTruthItemCount": 8
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:10aca7402f0ecabc48a16b1b9a70c24c96ebc9711f7650b910b989e76011fecd"
+ }
+ },
+ {
+ "id": "cirepo_kotlin_android_nowinandroid",
+ "repositoryId": "cirepo_kotlin_android_nowinandroid",
+ "language": "kotlin",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_kotlin_android_nowinandroid@7d45eae4f8720a0c77f507712ba2437ff974b6ed#core/model/src/main/kotlin",
+ "commit": "7d45eae4f8720a0c77f507712ba2437ff974b6ed",
+ "truthPath": "evals/code-intelligence/truth/repositories/kotlin/cirepo_kotlin_android_nowinandroid.json",
+ "graph": {
+ "fingerprint": "sha256:49e21b3bb196e319df8cafd6034fba58c155dcee2853deb8f9797fa19b0cccb7",
+ "nodeCount": 40,
+ "edgeCount": 35,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "kotlin",
+ "support": "partial",
+ "discoveredFileCount": 9,
+ "indexedFileCount": 9,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 14.381,
+ "secondElapsedMs": 12.92,
+ "evaluatorMaxRssKb": 75376,
+ "graphResponseBytes": 43299,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_kotlin_android_nowinandroid_model",
+ "language": "kotlin",
+ "sourceRef": "corpus://cirepo_kotlin_android_nowinandroid@7d45eae4f8720a0c77f507712ba2437ff974b6ed#core/model/src/main/kotlin",
+ "graphFingerprints": [
+ "sha256:49e21b3bb196e319df8cafd6034fba58c155dcee2853deb8f9797fa19b0cccb7",
+ "sha256:49e21b3bb196e319df8cafd6034fba58c155dcee2853deb8f9797fa19b0cccb7"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 9,
+ "matchedTruthItemCount": 9
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:278cb8c8ef1e8f94ce5695c1247c0c3f9ad97d4195fa2c5d8136c984820f1de5"
+ }
+ },
+ {
+ "id": "cirepo_kotlin_kotlin_kotlinx_coroutines",
+ "repositoryId": "cirepo_kotlin_kotlin_kotlinx_coroutines",
+ "language": "kotlin",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_kotlin_kotlin_kotlinx_coroutines@165c6cb5859b5365dec193abc75dee9f49ce1389#kotlinx-coroutines-core/common/src/internal",
+ "commit": "165c6cb5859b5365dec193abc75dee9f49ce1389",
+ "truthPath": "evals/code-intelligence/truth/repositories/kotlin/cirepo_kotlin_kotlin_kotlinx_coroutines.json",
+ "graph": {
+ "fingerprint": "sha256:f2baf843c94ea36c696359a57d383f45f214f8de73b2e9871b7092708c2d7645",
+ "nodeCount": 401,
+ "edgeCount": 573,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "kotlin",
+ "support": "partial",
+ "discoveredFileCount": 23,
+ "indexedFileCount": 23,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 57.481,
+ "secondElapsedMs": 57.268,
+ "evaluatorMaxRssKb": 84752,
+ "graphResponseBytes": 471062,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_kotlin_coroutines_internal_heap",
+ "language": "kotlin",
+ "sourceRef": "corpus://cirepo_kotlin_kotlin_kotlinx_coroutines@165c6cb5859b5365dec193abc75dee9f49ce1389#kotlinx-coroutines-core/common/src/internal",
+ "graphFingerprints": [
+ "sha256:f2baf843c94ea36c696359a57d383f45f214f8de73b2e9871b7092708c2d7645",
+ "sha256:f2baf843c94ea36c696359a57d383f45f214f8de73b2e9871b7092708c2d7645"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 9,
+ "matchedTruthItemCount": 9
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:5439a016996708ac6a0f034904b22cd1261ade3107a39adc11b6c074013ff677"
+ }
+ },
+ {
+ "id": "cirepo_kotlin_ktorio_ktor",
+ "repositoryId": "cirepo_kotlin_ktorio_ktor",
+ "language": "kotlin",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_kotlin_ktorio_ktor@fc6595632e7412abb98b941f926d0ea13c7647d1#ktor-server/ktor-server-core/common/src/io/ktor/server/routing",
+ "commit": "fc6595632e7412abb98b941f926d0ea13c7647d1",
+ "truthPath": "evals/code-intelligence/truth/repositories/kotlin/cirepo_kotlin_ktorio_ktor.json",
+ "graph": {
+ "fingerprint": "sha256:cbaedb913e34c0ecbd81821be54249507a3d360c35af36765f7d42c398ce218e",
+ "nodeCount": 498,
+ "edgeCount": 846,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "kotlin",
+ "support": "partial",
+ "discoveredFileCount": 15,
+ "indexedFileCount": 15,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 74.381,
+ "secondElapsedMs": 73.754,
+ "evaluatorMaxRssKb": 88432,
+ "graphResponseBytes": 647921,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_kotlin_ktor_routing_trace",
+ "language": "kotlin",
+ "sourceRef": "corpus://cirepo_kotlin_ktorio_ktor@fc6595632e7412abb98b941f926d0ea13c7647d1#ktor-server/ktor-server-core/common/src/io/ktor/server/routing",
+ "graphFingerprints": [
+ "sha256:cbaedb913e34c0ecbd81821be54249507a3d360c35af36765f7d42c398ce218e",
+ "sha256:cbaedb913e34c0ecbd81821be54249507a3d360c35af36765f7d42c398ce218e"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 9,
+ "matchedTruthItemCount": 9
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:64678515917323d976499bc19c794dc148d4d95229574f3c6c388fe497ac60e6"
+ }
+ },
+ {
+ "id": "cirepo_csharp_dotnet_aspnetcore",
+ "repositoryId": "cirepo_csharp_dotnet_aspnetcore",
+ "language": "csharp",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_csharp_dotnet_aspnetcore@d89ecc425733c5439096864cb9f7f97cab5416a0#src/Http/Routing/src/Patterns",
+ "commit": "d89ecc425733c5439096864cb9f7f97cab5416a0",
+ "truthPath": "evals/code-intelligence/truth/repositories/csharp/cirepo_csharp_dotnet_aspnetcore.json",
+ "graph": {
+ "fingerprint": "sha256:85d8485ccd0b106a89af7f739f63cef9b454bfbe35444d7102af0cf69661832d",
+ "nodeCount": 303,
+ "edgeCount": 644,
+ "diagnosticCount": 11,
+ "diagnostics": [
+ {
+ "code": "parse_recovered",
+ "count": 11
+ }
+ ],
+ "coverage": [
+ {
+ "language": "csharp",
+ "support": "partial",
+ "discoveredFileCount": 17,
+ "indexedFileCount": 17,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 75.111,
+ "secondElapsedMs": 72.761,
+ "evaluatorMaxRssKb": 101696,
+ "graphResponseBytes": 481162,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_csharp_aspnetcore_route_patterns",
+ "language": "csharp",
+ "sourceRef": "corpus://cirepo_csharp_dotnet_aspnetcore@d89ecc425733c5439096864cb9f7f97cab5416a0#src/Http/Routing/src/Patterns",
+ "graphFingerprints": [
+ "sha256:85d8485ccd0b106a89af7f739f63cef9b454bfbe35444d7102af0cf69661832d",
+ "sha256:85d8485ccd0b106a89af7f739f63cef9b454bfbe35444d7102af0cf69661832d"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 7,
+ "matchedTruthItemCount": 7
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:4b3e9cb70dbacf62b72722d0b2089dbefa5b78ec25591bf509b2d254bbd91876"
+ }
+ },
+ {
+ "id": "cirepo_csharp_dotnet_runtime",
+ "repositoryId": "cirepo_csharp_dotnet_runtime",
+ "language": "csharp",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_csharp_dotnet_runtime@e487c08fc5e689918da3e7fbb2747ca8b02c260d#src/libraries/System.Text.Json/src/System/Text/Json/Nodes",
+ "commit": "e487c08fc5e689918da3e7fbb2747ca8b02c260d",
+ "truthPath": "evals/code-intelligence/truth/repositories/csharp/cirepo_csharp_dotnet_runtime.json",
+ "graph": {
+ "fingerprint": "sha256:7f7185263a8876aac482108eedd4a3537323bac5e00470f468c0a8009789bdef",
+ "nodeCount": 473,
+ "edgeCount": 746,
+ "diagnosticCount": 4,
+ "diagnostics": [
+ {
+ "code": "parse_recovered",
+ "count": 4
+ }
+ ],
+ "coverage": [
+ {
+ "language": "csharp",
+ "support": "partial",
+ "discoveredFileCount": 17,
+ "indexedFileCount": 17,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 80.035,
+ "secondElapsedMs": 80.341,
+ "evaluatorMaxRssKb": 106176,
+ "graphResponseBytes": 588258,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_csharp_dotnet_runtime_json_nodes",
+ "language": "csharp",
+ "sourceRef": "corpus://cirepo_csharp_dotnet_runtime@e487c08fc5e689918da3e7fbb2747ca8b02c260d#src/libraries/System.Text.Json/src/System/Text/Json/Nodes",
+ "graphFingerprints": [
+ "sha256:7f7185263a8876aac482108eedd4a3537323bac5e00470f468c0a8009789bdef",
+ "sha256:7f7185263a8876aac482108eedd4a3537323bac5e00470f468c0a8009789bdef"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 7,
+ "matchedTruthItemCount": 7
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:4ca087e2643f411948977ca30013655b19113b1488cd115e6ef95bfd7fbf6232"
+ }
+ },
+ {
+ "id": "cirepo_csharp_jamesnk_newtonsoft_json",
+ "repositoryId": "cirepo_csharp_jamesnk_newtonsoft_json",
+ "language": "csharp",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_csharp_jamesnk_newtonsoft_json@4f73e74372445108d2c1bda37b36e6f5e43402e0#Src/Newtonsoft.Json/Linq/JsonPath",
+ "commit": "4f73e74372445108d2c1bda37b36e6f5e43402e0",
+ "truthPath": "evals/code-intelligence/truth/repositories/csharp/cirepo_csharp_jamesnk_newtonsoft_json.json",
+ "graph": {
+ "fingerprint": "sha256:6c2f77dbc8071ff987c9fc9374f1b56c39eb7088a50276a094c26c55303e7d43",
+ "nodeCount": 180,
+ "edgeCount": 387,
+ "diagnosticCount": 2,
+ "diagnostics": [
+ {
+ "code": "parse_recovered",
+ "count": 2
+ }
+ ],
+ "coverage": [
+ {
+ "language": "csharp",
+ "support": "partial",
+ "discoveredFileCount": 13,
+ "indexedFileCount": 13,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 42.467,
+ "secondElapsedMs": 43.928,
+ "evaluatorMaxRssKb": 106560,
+ "graphResponseBytes": 276583,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_csharp_newtonsoft_jsonpath",
+ "language": "csharp",
+ "sourceRef": "corpus://cirepo_csharp_jamesnk_newtonsoft_json@4f73e74372445108d2c1bda37b36e6f5e43402e0#Src/Newtonsoft.Json/Linq/JsonPath",
+ "graphFingerprints": [
+ "sha256:6c2f77dbc8071ff987c9fc9374f1b56c39eb7088a50276a094c26c55303e7d43",
+ "sha256:6c2f77dbc8071ff987c9fc9374f1b56c39eb7088a50276a094c26c55303e7d43"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 7,
+ "matchedTruthItemCount": 7
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:e558f6385a60e8780009af16a65afc4483bbb6a10f01410bf71c1ec021115ebb"
+ }
+ }
+ ],
+ "languages": [
+ {
+ "language": "java",
+ "caseCount": 4,
+ "fixtureCount": 1,
+ "repositoryCount": 3,
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 21,
+ "denominator": 21,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 10,
+ "denominator": 10,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 5,
+ "denominator": 5,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "gateDecision": "pass"
+ },
+ {
+ "language": "kotlin",
+ "caseCount": 4,
+ "fixtureCount": 1,
+ "repositoryCount": 3,
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 20,
+ "denominator": 20,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 13,
+ "denominator": 13,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 5,
+ "denominator": 5,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "gateDecision": "pass"
+ },
+ {
+ "language": "csharp",
+ "caseCount": 4,
+ "fixtureCount": 1,
+ "repositoryCount": 3,
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 23,
+ "denominator": 23,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 10,
+ "denominator": 10,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 5,
+ "denominator": 5,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "gateDecision": "pass"
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "publicDefault": {
+ "engine": "js",
+ "changed": false
+ },
+ "claims": {
+ "accuracyFloorMet": true,
+ "parity": false,
+ "leadership": false,
+ "reason": "Batch C measures reviewed Java, Kotlin, and C# truth. It does not change the public engine or claim competitor parity."
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absoluteCheckoutPathsStored": false,
+ "environmentVariablesStored": false,
+ "engineNetworkCalls": 0,
+ "engineModelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:90c5ca1e633671993de1f9f0dae40368f08324fae7ec10f8d9c5f07f44c2ee10"
+}
diff --git a/evals/code-intelligence/results/phase2-batch-d.json b/evals/code-intelligence/results/phase2-batch-d.json
new file mode 100644
index 00000000..9a014b35
--- /dev/null
+++ b/evals/code-intelligence/results/phase2-batch-d.json
@@ -0,0 +1,2956 @@
+{
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-phase2-batch-d-1",
+ "phase": 2,
+ "batch": "D",
+ "generatedAt": "2026-07-18T18:20:11.960Z",
+ "inputs": {
+ "corpusFingerprint": "sha256:7e0544963c5b00e0b6d55830e1251262e6f132d4b0e28bfd4c36b64587b26c96",
+ "bounds": {
+ "maxFiles": 5000,
+ "maxFileBytes": 524288,
+ "maxNodes": 5000,
+ "maxEdges": 10000
+ },
+ "fixtureTruth": [
+ "evals/code-intelligence/truth/fixtures/c.json",
+ "evals/code-intelligence/truth/fixtures/cpp.json",
+ "evals/code-intelligence/truth/fixtures/swift.json",
+ "evals/code-intelligence/truth/fixtures/dart.json"
+ ],
+ "repositoryTruth": [
+ "evals/code-intelligence/truth/repositories/c/cirepo_c_antirez_kilo.json",
+ "evals/code-intelligence/truth/repositories/c/cirepo_c_curl_curl.json",
+ "evals/code-intelligence/truth/repositories/c/cirepo_c_libuv_libuv.json",
+ "evals/code-intelligence/truth/repositories/cpp/cirepo_cpp_catchorg_catch2.json",
+ "evals/code-intelligence/truth/repositories/cpp/cirepo_cpp_fmtlib_fmt.json",
+ "evals/code-intelligence/truth/repositories/cpp/cirepo_cpp_nlohmann_json.json",
+ "evals/code-intelligence/truth/repositories/swift/cirepo_swift_alamofire_alamofire.json",
+ "evals/code-intelligence/truth/repositories/swift/cirepo_swift_apple_swift_nio.json",
+ "evals/code-intelligence/truth/repositories/swift/cirepo_swift_vapor_vapor.json",
+ "evals/code-intelligence/truth/repositories/dart/cirepo_dart_dart_lang_http.json",
+ "evals/code-intelligence/truth/repositories/dart/cirepo_dart_dart_lang_shelf.json",
+ "evals/code-intelligence/truth/repositories/dart/cirepo_dart_flutter_samples.json"
+ ],
+ "repositoryRefs": [
+ "corpus://cirepo_c_antirez_kilo@323d93b29bd89a2cb446de90c4ed4fea1764176e#.",
+ "corpus://cirepo_c_curl_curl@4176aba5e4871a2f1c7c120dd76568f80f5d5ddc#lib",
+ "corpus://cirepo_c_libuv_libuv@2cadaa40167050baf7c6905ac897e6fb57afb2c6#src",
+ "corpus://cirepo_cpp_catchorg_catch2@ae5d271da2c88b859d6365281ac075112115d4b1#src/Catch2",
+ "corpus://cirepo_cpp_fmtlib_fmt@a79df4504cd4e42ed004b1113fb82171e62ed822#src",
+ "corpus://cirepo_cpp_nlohmann_json@722c03495f9978eb727f480b6ea0742f652e06a9#include/nlohmann/detail",
+ "corpus://cirepo_swift_alamofire_alamofire@903c53c710d1cbbac0b4b9c2527aefb791e1fee3#Source/Core",
+ "corpus://cirepo_swift_apple_swift_nio@0b18836bd8b0162e7e17a995a3fbee20ed8f3b2b#Sources/NIOCore",
+ "corpus://cirepo_swift_vapor_vapor@059b578bde8a037a42543914b8e14041fbec01e7#Sources/Vapor/Routing",
+ "corpus://cirepo_dart_dart_lang_http@fe4aaa900d50f0423200dd333314729d2c0650b9#pkgs/http/lib",
+ "corpus://cirepo_dart_dart_lang_shelf@833433edf813df24e9a48e01fc38647d53b979f8#pkgs/shelf_router/lib",
+ "corpus://cirepo_dart_flutter_samples@09335b0c7a84ae29bf5454bd54f4e15c2cdd79a1#navigation_and_routing/lib"
+ ]
+ },
+ "thresholds": {
+ "symbolRecallMinimum": 0.95,
+ "resolvedCallPrecisionMinimum": 0.9,
+ "duplicateCanonicalSymbolMaximum": 0,
+ "deterministicStructuralFingerprintRequired": true,
+ "malformedFileRepositoryFailureMaximum": 0,
+ "explicitPartialAndUnsupportedDiagnosticsRequired": true,
+ "realRepositoryGatesRequired": true
+ },
+ "cases": [
+ {
+ "id": "fixture_c_batch_d",
+ "language": "c",
+ "sourceClass": "fixture",
+ "sourceRef": "fixture://sha256:de5378c339ebaf83d8a1967b20b16b0edbf9152c3309235a78b3bb5cf4a629f5",
+ "truthPath": "evals/code-intelligence/truth/fixtures/c.json",
+ "graph": {
+ "fingerprint": "sha256:863bbc75a97c2133ee983ce2895f5f4b986f8051c79168b36e3119f19831961b",
+ "nodeCount": 10,
+ "edgeCount": 12,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "c",
+ "support": "partial",
+ "discoveredFileCount": 3,
+ "indexedFileCount": 3,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 29.16,
+ "secondElapsedMs": 9.43,
+ "evaluatorMaxRssKb": 59552,
+ "graphResponseBytes": 10617,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_c_batch_d_fixture",
+ "language": "c",
+ "sourceRef": "fixture://sha256:de5378c339ebaf83d8a1967b20b16b0edbf9152c3309235a78b3bb5cf4a629f5",
+ "graphFingerprints": [
+ "sha256:863bbc75a97c2133ee983ce2895f5f4b986f8051c79168b36e3119f19831961b",
+ "sha256:863bbc75a97c2133ee983ce2895f5f4b986f8051c79168b36e3119f19831961b"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 9,
+ "matchedTruthItemCount": 9
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:a6319d3099e08c4da16a82ff37a7b53c412e2d5e6ee399b177fcdbd624dd7f8f"
+ }
+ },
+ {
+ "id": "fixture_cpp_batch_d",
+ "language": "cpp",
+ "sourceClass": "fixture",
+ "sourceRef": "fixture://sha256:74307b29d88773caeeb559705bf9e8dd49cf7d96ab63ecdbfc2d2fad03a9c06e",
+ "truthPath": "evals/code-intelligence/truth/fixtures/cpp.json",
+ "graph": {
+ "fingerprint": "sha256:cf6d84cb62411295f1486fec6a38d2ca7e53bf53ede1151b17ce9157dfb8e0f6",
+ "nodeCount": 28,
+ "edgeCount": 31,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "cpp",
+ "support": "partial",
+ "discoveredFileCount": 3,
+ "indexedFileCount": 3,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 11.353,
+ "secondElapsedMs": 11.13,
+ "evaluatorMaxRssKb": 66592,
+ "graphResponseBytes": 27886,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_cpp_batch_d_fixture",
+ "language": "cpp",
+ "sourceRef": "fixture://sha256:74307b29d88773caeeb559705bf9e8dd49cf7d96ab63ecdbfc2d2fad03a9c06e",
+ "graphFingerprints": [
+ "sha256:cf6d84cb62411295f1486fec6a38d2ca7e53bf53ede1151b17ce9157dfb8e0f6",
+ "sha256:cf6d84cb62411295f1486fec6a38d2ca7e53bf53ede1151b17ce9157dfb8e0f6"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 6,
+ "denominator": 6,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 13,
+ "matchedTruthItemCount": 13
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "config",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:1c8f537965cd79b7e940ec4266fc1bf75c4a00c043367dd2fcb0b1881636f06e"
+ }
+ },
+ {
+ "id": "fixture_swift_batch_d",
+ "language": "swift",
+ "sourceClass": "fixture",
+ "sourceRef": "fixture://sha256:5cbe7153b65842626587a3c05dcad05ed6ff63129adc1fe4d579dd82460642bf",
+ "truthPath": "evals/code-intelligence/truth/fixtures/swift.json",
+ "graph": {
+ "fingerprint": "sha256:e54e5f14988d7aaf1be0b5ee43b9d4d9091759579a4b8cc7bb56481f3e9297b4",
+ "nodeCount": 19,
+ "edgeCount": 19,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "swift",
+ "support": "partial",
+ "discoveredFileCount": 4,
+ "indexedFileCount": 4,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 10.656,
+ "secondElapsedMs": 10.308,
+ "evaluatorMaxRssKb": 67184,
+ "graphResponseBytes": 18525,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_swift_batch_d_fixture",
+ "language": "swift",
+ "sourceRef": "fixture://sha256:5cbe7153b65842626587a3c05dcad05ed6ff63129adc1fe4d579dd82460642bf",
+ "graphFingerprints": [
+ "sha256:e54e5f14988d7aaf1be0b5ee43b9d4d9091759579a4b8cc7bb56481f3e9297b4",
+ "sha256:e54e5f14988d7aaf1be0b5ee43b9d4d9091759579a4b8cc7bb56481f3e9297b4"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 5,
+ "denominator": 5,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 5,
+ "denominator": 5,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 12,
+ "matchedTruthItemCount": 12
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:da9e2dcdf27d2a44372725a5d7df4d4b37f6d1eccc2897187ba84ea997888fea"
+ }
+ },
+ {
+ "id": "fixture_dart_batch_d",
+ "language": "dart",
+ "sourceClass": "fixture",
+ "sourceRef": "fixture://sha256:75ad927a4e8ded1ac3b1c1b7fef6fa3a8d909dd00204d3cc7538731bbcec43da",
+ "truthPath": "evals/code-intelligence/truth/fixtures/dart.json",
+ "graph": {
+ "fingerprint": "sha256:bf447c4574efd18dec76e05c3e778b4266db0e7b397ad9468f79d41361791882",
+ "nodeCount": 27,
+ "edgeCount": 34,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "dart",
+ "support": "partial",
+ "discoveredFileCount": 4,
+ "indexedFileCount": 4,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 10.657,
+ "secondElapsedMs": 10.434,
+ "evaluatorMaxRssKb": 70304,
+ "graphResponseBytes": 28813,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_dart_batch_d_fixture",
+ "language": "dart",
+ "sourceRef": "fixture://sha256:75ad927a4e8ded1ac3b1c1b7fef6fa3a8d909dd00204d3cc7538731bbcec43da",
+ "graphFingerprints": [
+ "sha256:bf447c4574efd18dec76e05c3e778b4266db0e7b397ad9468f79d41361791882",
+ "sha256:bf447c4574efd18dec76e05c3e778b4266db0e7b397ad9468f79d41361791882"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 8,
+ "denominator": 8,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 8,
+ "denominator": 8,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 18,
+ "matchedTruthItemCount": 18
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "exports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 5,
+ "matchedItemCount": 5
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "frameworks",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:2988c7d652b6a7444f24140c780e54e0021e6c582a29831725bb842f5cdc5e5c"
+ }
+ },
+ {
+ "id": "cirepo_c_antirez_kilo",
+ "repositoryId": "cirepo_c_antirez_kilo",
+ "language": "c",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_c_antirez_kilo@323d93b29bd89a2cb446de90c4ed4fea1764176e#.",
+ "commit": "323d93b29bd89a2cb446de90c4ed4fea1764176e",
+ "truthPath": "evals/code-intelligence/truth/repositories/c/cirepo_c_antirez_kilo.json",
+ "graph": {
+ "fingerprint": "sha256:9ee85ce04511dc9b1786da28fe84cde615e95f57c20524e9bafb1febf8bfeba1",
+ "nodeCount": 97,
+ "edgeCount": 238,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "c",
+ "support": "partial",
+ "discoveredFileCount": 1,
+ "indexedFileCount": 1,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 23.389,
+ "secondElapsedMs": 23.148,
+ "evaluatorMaxRssKb": 72880,
+ "graphResponseBytes": 155949,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_c_antirez_kilo_core",
+ "language": "c",
+ "sourceRef": "corpus://cirepo_c_antirez_kilo@323d93b29bd89a2cb446de90c4ed4fea1764176e#.",
+ "graphFingerprints": [
+ "sha256:9ee85ce04511dc9b1786da28fe84cde615e95f57c20524e9bafb1febf8bfeba1",
+ "sha256:9ee85ce04511dc9b1786da28fe84cde615e95f57c20524e9bafb1febf8bfeba1"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 7,
+ "matchedTruthItemCount": 7
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:90503371e85cba3ae26c62911dec501c1d7236d8393c8a19ed2b6ee3b33fbe14"
+ }
+ },
+ {
+ "id": "cirepo_c_curl_curl",
+ "repositoryId": "cirepo_c_curl_curl",
+ "language": "c",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_c_curl_curl@4176aba5e4871a2f1c7c120dd76568f80f5d5ddc#lib",
+ "commit": "4176aba5e4871a2f1c7c120dd76568f80f5d5ddc",
+ "truthPath": "evals/code-intelligence/truth/repositories/c/cirepo_c_curl_curl.json",
+ "graph": {
+ "fingerprint": "sha256:0cf9a7a5b1d941551c236bad3ee7a8af9c7185c41574842b9d4bea8c0eff096c",
+ "nodeCount": 5000,
+ "edgeCount": 10000,
+ "diagnosticCount": 115,
+ "diagnostics": [
+ {
+ "code": "edge_budget_reached",
+ "count": 9221
+ },
+ {
+ "code": "node_budget_reached",
+ "count": 5471
+ },
+ {
+ "code": "parse_recovered",
+ "count": 113
+ }
+ ],
+ "coverage": [
+ {
+ "language": "c",
+ "support": "partial",
+ "discoveredFileCount": 380,
+ "indexedFileCount": 380,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 12089.015,
+ "secondElapsedMs": 13018.361,
+ "evaluatorMaxRssKb": 159632,
+ "graphResponseBytes": 7021532,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_c_curl_altsvc",
+ "language": "c",
+ "sourceRef": "corpus://cirepo_c_curl_curl@4176aba5e4871a2f1c7c120dd76568f80f5d5ddc#lib",
+ "graphFingerprints": [
+ "sha256:0cf9a7a5b1d941551c236bad3ee7a8af9c7185c41574842b9d4bea8c0eff096c",
+ "sha256:0cf9a7a5b1d941551c236bad3ee7a8af9c7185c41574842b9d4bea8c0eff096c"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 7,
+ "matchedTruthItemCount": 7
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:8dcab6b813ddbb2d3feec5512d1f35e58847abda8f8cf0e0112645c0f1861559"
+ }
+ },
+ {
+ "id": "cirepo_c_libuv_libuv",
+ "repositoryId": "cirepo_c_libuv_libuv",
+ "language": "c",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_c_libuv_libuv@2cadaa40167050baf7c6905ac897e6fb57afb2c6#src",
+ "commit": "2cadaa40167050baf7c6905ac897e6fb57afb2c6",
+ "truthPath": "evals/code-intelligence/truth/repositories/c/cirepo_c_libuv_libuv.json",
+ "graph": {
+ "fingerprint": "sha256:448f68ecb3bd4bc9c5ef267da3135c2ee597f94134e99b6a8d86d9b21d1583f3",
+ "nodeCount": 3978,
+ "edgeCount": 10000,
+ "diagnosticCount": 45,
+ "diagnostics": [
+ {
+ "code": "edge_budget_reached",
+ "count": 1195
+ },
+ {
+ "code": "parse_recovered",
+ "count": 44
+ }
+ ],
+ "coverage": [
+ {
+ "language": "c",
+ "support": "partial",
+ "discoveredFileCount": 104,
+ "indexedFileCount": 104,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 1058.495,
+ "secondElapsedMs": 1055.805,
+ "evaluatorMaxRssKb": 182336,
+ "graphResponseBytes": 6638156,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_c_libuv_fs_poll",
+ "language": "c",
+ "sourceRef": "corpus://cirepo_c_libuv_libuv@2cadaa40167050baf7c6905ac897e6fb57afb2c6#src",
+ "graphFingerprints": [
+ "sha256:448f68ecb3bd4bc9c5ef267da3135c2ee597f94134e99b6a8d86d9b21d1583f3",
+ "sha256:448f68ecb3bd4bc9c5ef267da3135c2ee597f94134e99b6a8d86d9b21d1583f3"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 8,
+ "matchedTruthItemCount": 8
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:db353c8af02052e7c93c720c2484e1dd1d101e43af1274538b13e562ad6d4006"
+ }
+ },
+ {
+ "id": "cirepo_cpp_catchorg_catch2",
+ "repositoryId": "cirepo_cpp_catchorg_catch2",
+ "language": "cpp",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_cpp_catchorg_catch2@ae5d271da2c88b859d6365281ac075112115d4b1#src/Catch2",
+ "commit": "ae5d271da2c88b859d6365281ac075112115d4b1",
+ "truthPath": "evals/code-intelligence/truth/repositories/cpp/cirepo_cpp_catchorg_catch2.json",
+ "graph": {
+ "fingerprint": "sha256:8bbb60620baf959197c64461f1b0dee3d8ac046a6ab7108f96efd6723ef6c3a6",
+ "nodeCount": 5000,
+ "edgeCount": 8429,
+ "diagnosticCount": 44,
+ "diagnostics": [
+ {
+ "code": "node_budget_reached",
+ "count": 564
+ },
+ {
+ "code": "parse_recovered",
+ "count": 43
+ }
+ ],
+ "coverage": [
+ {
+ "language": "cpp",
+ "support": "partial",
+ "discoveredFileCount": 289,
+ "indexedFileCount": 289,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 1146.802,
+ "secondElapsedMs": 1139.637,
+ "evaluatorMaxRssKb": 202832,
+ "graphResponseBytes": 6678053,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_cpp_catch2_approx",
+ "language": "cpp",
+ "sourceRef": "corpus://cirepo_cpp_catchorg_catch2@ae5d271da2c88b859d6365281ac075112115d4b1#src/Catch2",
+ "graphFingerprints": [
+ "sha256:8bbb60620baf959197c64461f1b0dee3d8ac046a6ab7108f96efd6723ef6c3a6",
+ "sha256:8bbb60620baf959197c64461f1b0dee3d8ac046a6ab7108f96efd6723ef6c3a6"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 9,
+ "matchedTruthItemCount": 9
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:0497ab5618e6bf384dcb010c2644fa9e5afbfce95d48a483f02d2390dce124fb"
+ }
+ },
+ {
+ "id": "cirepo_cpp_fmtlib_fmt",
+ "repositoryId": "cirepo_cpp_fmtlib_fmt",
+ "language": "cpp",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_cpp_fmtlib_fmt@a79df4504cd4e42ed004b1113fb82171e62ed822#src",
+ "commit": "a79df4504cd4e42ed004b1113fb82171e62ed822",
+ "truthPath": "evals/code-intelligence/truth/repositories/cpp/cirepo_cpp_fmtlib_fmt.json",
+ "graph": {
+ "fingerprint": "sha256:5051612622ce3ffbdc75690be3f3fb50f34ec505b85b12953e25e7876a5cc79d",
+ "nodeCount": 162,
+ "edgeCount": 293,
+ "diagnosticCount": 4,
+ "diagnostics": [
+ {
+ "code": "parse_recovered",
+ "count": 4
+ }
+ ],
+ "coverage": [
+ {
+ "language": "cpp",
+ "support": "partial",
+ "discoveredFileCount": 4,
+ "indexedFileCount": 4,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 27.399,
+ "secondElapsedMs": 26.881,
+ "evaluatorMaxRssKb": 204368,
+ "graphResponseBytes": 207810,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_cpp_fmt_c_api",
+ "language": "cpp",
+ "sourceRef": "corpus://cirepo_cpp_fmtlib_fmt@a79df4504cd4e42ed004b1113fb82171e62ed822#src",
+ "graphFingerprints": [
+ "sha256:5051612622ce3ffbdc75690be3f3fb50f34ec505b85b12953e25e7876a5cc79d",
+ "sha256:5051612622ce3ffbdc75690be3f3fb50f34ec505b85b12953e25e7876a5cc79d"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 11,
+ "matchedTruthItemCount": 11
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:a6318d0c279bae65783c4540b63921ea209a08bfb38118ced60450fce8212f72"
+ }
+ },
+ {
+ "id": "cirepo_cpp_nlohmann_json",
+ "repositoryId": "cirepo_cpp_nlohmann_json",
+ "language": "cpp",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_cpp_nlohmann_json@722c03495f9978eb727f480b6ea0742f652e06a9#include/nlohmann/detail",
+ "commit": "722c03495f9978eb727f480b6ea0742f652e06a9",
+ "truthPath": "evals/code-intelligence/truth/repositories/cpp/cirepo_cpp_nlohmann_json.json",
+ "graph": {
+ "fingerprint": "sha256:821e4fbf49d1fe1faed74fc1e7bc71e66d6159ab0cd8fc01ea89199a47366c15",
+ "nodeCount": 1302,
+ "edgeCount": 4859,
+ "diagnosticCount": 39,
+ "diagnostics": [
+ {
+ "code": "parse_recovered",
+ "count": 39
+ }
+ ],
+ "coverage": [
+ {
+ "language": "cpp",
+ "support": "partial",
+ "discoveredFileCount": 40,
+ "indexedFileCount": 40,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 405.852,
+ "secondElapsedMs": 411.63,
+ "evaluatorMaxRssKb": 225040,
+ "graphResponseBytes": 3084309,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_cpp_nlohmann_from_json",
+ "language": "cpp",
+ "sourceRef": "corpus://cirepo_cpp_nlohmann_json@722c03495f9978eb727f480b6ea0742f652e06a9#include/nlohmann/detail",
+ "graphFingerprints": [
+ "sha256:821e4fbf49d1fe1faed74fc1e7bc71e66d6159ab0cd8fc01ea89199a47366c15",
+ "sha256:821e4fbf49d1fe1faed74fc1e7bc71e66d6159ab0cd8fc01ea89199a47366c15"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 10,
+ "matchedTruthItemCount": 10
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:ffe84b1fd365d8f13fad5fda7e37faf681118596d6b8e8ff8a711973fd4e1286"
+ }
+ },
+ {
+ "id": "cirepo_swift_alamofire_alamofire",
+ "repositoryId": "cirepo_swift_alamofire_alamofire",
+ "language": "swift",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_swift_alamofire_alamofire@903c53c710d1cbbac0b4b9c2527aefb791e1fee3#Source/Core",
+ "commit": "903c53c710d1cbbac0b4b9c2527aefb791e1fee3",
+ "truthPath": "evals/code-intelligence/truth/repositories/swift/cirepo_swift_alamofire_alamofire.json",
+ "graph": {
+ "fingerprint": "sha256:27f9924b84bc3b50ecb9c5bb698c0cabfd5e270410634864959a6de538fdd36e",
+ "nodeCount": 837,
+ "edgeCount": 1754,
+ "diagnosticCount": 4,
+ "diagnostics": [
+ {
+ "code": "parse_recovered",
+ "count": 4
+ }
+ ],
+ "coverage": [
+ {
+ "language": "swift",
+ "support": "partial",
+ "discoveredFileCount": 18,
+ "indexedFileCount": 18,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 184.68,
+ "secondElapsedMs": 186.114,
+ "evaluatorMaxRssKb": 232064,
+ "graphResponseBytes": 1264956,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_swift_alamofire_aferror",
+ "language": "swift",
+ "sourceRef": "corpus://cirepo_swift_alamofire_alamofire@903c53c710d1cbbac0b4b9c2527aefb791e1fee3#Source/Core",
+ "graphFingerprints": [
+ "sha256:27f9924b84bc3b50ecb9c5bb698c0cabfd5e270410634864959a6de538fdd36e",
+ "sha256:27f9924b84bc3b50ecb9c5bb698c0cabfd5e270410634864959a6de538fdd36e"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 7,
+ "matchedTruthItemCount": 7
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "calls",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:13189d626c0b286f8ad917b9fb17821aa7c504e2956ffe180cae089613dcce70"
+ }
+ },
+ {
+ "id": "cirepo_swift_apple_swift_nio",
+ "repositoryId": "cirepo_swift_apple_swift_nio",
+ "language": "swift",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_swift_apple_swift_nio@0b18836bd8b0162e7e17a995a3fbee20ed8f3b2b#Sources/NIOCore",
+ "commit": "0b18836bd8b0162e7e17a995a3fbee20ed8f3b2b",
+ "truthPath": "evals/code-intelligence/truth/repositories/swift/cirepo_swift_apple_swift_nio.json",
+ "graph": {
+ "fingerprint": "sha256:b3093b4936bb8d9b60d7495eff8fc048aff6e4b09126cc204f2b43a11145dab1",
+ "nodeCount": 2680,
+ "edgeCount": 6654,
+ "diagnosticCount": 24,
+ "diagnostics": [
+ {
+ "code": "parse_recovered",
+ "count": 24
+ }
+ ],
+ "coverage": [
+ {
+ "language": "swift",
+ "support": "partial",
+ "discoveredFileCount": 71,
+ "indexedFileCount": 71,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 723.103,
+ "secondElapsedMs": 718.041,
+ "evaluatorMaxRssKb": 254752,
+ "graphResponseBytes": 4681614,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_swift_nio_addressed_envelope",
+ "language": "swift",
+ "sourceRef": "corpus://cirepo_swift_apple_swift_nio@0b18836bd8b0162e7e17a995a3fbee20ed8f3b2b#Sources/NIOCore",
+ "graphFingerprints": [
+ "sha256:b3093b4936bb8d9b60d7495eff8fc048aff6e4b09126cc204f2b43a11145dab1",
+ "sha256:b3093b4936bb8d9b60d7495eff8fc048aff6e4b09126cc204f2b43a11145dab1"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 7,
+ "matchedTruthItemCount": 7
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "calls",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:dc14e0c83ff1760d7b0e4d969efe810bc1657eae420036998a7112a088494678"
+ }
+ },
+ {
+ "id": "cirepo_swift_vapor_vapor",
+ "repositoryId": "cirepo_swift_vapor_vapor",
+ "language": "swift",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_swift_vapor_vapor@059b578bde8a037a42543914b8e14041fbec01e7#Sources/Vapor/Routing",
+ "commit": "059b578bde8a037a42543914b8e14041fbec01e7",
+ "truthPath": "evals/code-intelligence/truth/repositories/swift/cirepo_swift_vapor_vapor.json",
+ "graph": {
+ "fingerprint": "sha256:df69bcf6aaf8094795f0841b48019b736b847b502bb48e875c15ef295e3f57c9",
+ "nodeCount": 125,
+ "edgeCount": 200,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "swift",
+ "support": "partial",
+ "discoveredFileCount": 11,
+ "indexedFileCount": 11,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 25.593,
+ "secondElapsedMs": 24.516,
+ "evaluatorMaxRssKb": 254752,
+ "graphResponseBytes": 157592,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_swift_vapor_parameters",
+ "language": "swift",
+ "sourceRef": "corpus://cirepo_swift_vapor_vapor@059b578bde8a037a42543914b8e14041fbec01e7#Sources/Vapor/Routing",
+ "graphFingerprints": [
+ "sha256:df69bcf6aaf8094795f0841b48019b736b847b502bb48e875c15ef295e3f57c9",
+ "sha256:df69bcf6aaf8094795f0841b48019b736b847b502bb48e875c15ef295e3f57c9"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 6,
+ "matchedTruthItemCount": 6
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:6a0abe68c2f95c1b1f0dab69430e192690d9f54d8baffaae2db54db6d8021a30"
+ }
+ },
+ {
+ "id": "cirepo_dart_dart_lang_http",
+ "repositoryId": "cirepo_dart_dart_lang_http",
+ "language": "dart",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_dart_dart_lang_http@fe4aaa900d50f0423200dd333314729d2c0650b9#pkgs/http/lib",
+ "commit": "fe4aaa900d50f0423200dd333314729d2c0650b9",
+ "truthPath": "evals/code-intelligence/truth/repositories/dart/cirepo_dart_dart_lang_http.json",
+ "graph": {
+ "fingerprint": "sha256:70c439ad823597bdf07cc3fe6fdd862352af428f13ef112be16511c0dee3d139",
+ "nodeCount": 351,
+ "edgeCount": 622,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "dart",
+ "support": "partial",
+ "discoveredFileCount": 27,
+ "indexedFileCount": 27,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 62.057,
+ "secondElapsedMs": 61.155,
+ "evaluatorMaxRssKb": 254752,
+ "graphResponseBytes": 463395,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_dart_http_base_client",
+ "language": "dart",
+ "sourceRef": "corpus://cirepo_dart_dart_lang_http@fe4aaa900d50f0423200dd333314729d2c0650b9#pkgs/http/lib",
+ "graphFingerprints": [
+ "sha256:70c439ad823597bdf07cc3fe6fdd862352af428f13ef112be16511c0dee3d139",
+ "sha256:70c439ad823597bdf07cc3fe6fdd862352af428f13ef112be16511c0dee3d139"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 8,
+ "matchedTruthItemCount": 8
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "exports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:14d44b5d55e5a5b4e56dca96ce6acea6ad3174d256c5c25f867bccaac853de30"
+ }
+ },
+ {
+ "id": "cirepo_dart_dart_lang_shelf",
+ "repositoryId": "cirepo_dart_dart_lang_shelf",
+ "language": "dart",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_dart_dart_lang_shelf@833433edf813df24e9a48e01fc38647d53b979f8#pkgs/shelf_router/lib",
+ "commit": "833433edf813df24e9a48e01fc38647d53b979f8",
+ "truthPath": "evals/code-intelligence/truth/repositories/dart/cirepo_dart_dart_lang_shelf.json",
+ "graph": {
+ "fingerprint": "sha256:e0aeddfddc5fbb0589af75df8f47517e952adc0876d064ed593818587266e840",
+ "nodeCount": 92,
+ "edgeCount": 133,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "dart",
+ "support": "partial",
+ "discoveredFileCount": 5,
+ "indexedFileCount": 5,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 20.538,
+ "secondElapsedMs": 19.249,
+ "evaluatorMaxRssKb": 254752,
+ "graphResponseBytes": 105473,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_dart_shelf_router",
+ "language": "dart",
+ "sourceRef": "corpus://cirepo_dart_dart_lang_shelf@833433edf813df24e9a48e01fc38647d53b979f8#pkgs/shelf_router/lib",
+ "graphFingerprints": [
+ "sha256:e0aeddfddc5fbb0589af75df8f47517e952adc0876d064ed593818587266e840",
+ "sha256:e0aeddfddc5fbb0589af75df8f47517e952adc0876d064ed593818587266e840"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 9,
+ "matchedTruthItemCount": 9
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "exports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:f1f4457121106b4454692026770526b07fc8948eaf613650fc43256a64736d97"
+ }
+ },
+ {
+ "id": "cirepo_dart_flutter_samples",
+ "repositoryId": "cirepo_dart_flutter_samples",
+ "language": "dart",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_dart_flutter_samples@09335b0c7a84ae29bf5454bd54f4e15c2cdd79a1#navigation_and_routing/lib",
+ "commit": "09335b0c7a84ae29bf5454bd54f4e15c2cdd79a1",
+ "truthPath": "evals/code-intelligence/truth/repositories/dart/cirepo_dart_flutter_samples.json",
+ "graph": {
+ "fingerprint": "sha256:e41b33c7c0e38caf183b3120781fc0846a1b947a449b018df95d1241e939e81f",
+ "nodeCount": 184,
+ "edgeCount": 347,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "dart",
+ "support": "partial",
+ "discoveredFileCount": 17,
+ "indexedFileCount": 17,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 38.099,
+ "secondElapsedMs": 36.72,
+ "evaluatorMaxRssKb": 254752,
+ "graphResponseBytes": 256771,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_dart_flutter_navigation_sample",
+ "language": "dart",
+ "sourceRef": "corpus://cirepo_dart_flutter_samples@09335b0c7a84ae29bf5454bd54f4e15c2cdd79a1#navigation_and_routing/lib",
+ "graphFingerprints": [
+ "sha256:e41b33c7c0e38caf183b3120781fc0846a1b947a449b018df95d1241e939e81f",
+ "sha256:e41b33c7c0e38caf183b3120781fc0846a1b947a449b018df95d1241e939e81f"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 6,
+ "denominator": 6,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 13,
+ "matchedTruthItemCount": 13
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "exports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "config",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:ca0e648dd747e29b0eef5c952a4f67dc6fe510462e4a88be3dd3bc6ddc422eb1"
+ }
+ }
+ ],
+ "languages": [
+ {
+ "language": "c",
+ "caseCount": 4,
+ "fixtureCount": 1,
+ "repositoryCount": 3,
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 14,
+ "denominator": 14,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 9,
+ "denominator": 9,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "gateDecision": "pass"
+ },
+ {
+ "language": "cpp",
+ "caseCount": 4,
+ "fixtureCount": 1,
+ "repositoryCount": 3,
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 16,
+ "denominator": 16,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 12,
+ "denominator": 12,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "gateDecision": "pass"
+ },
+ {
+ "language": "swift",
+ "caseCount": 4,
+ "fixtureCount": 1,
+ "repositoryCount": 3,
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 16,
+ "denominator": 16,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 11,
+ "denominator": 11,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "gateDecision": "pass"
+ },
+ {
+ "language": "dart",
+ "caseCount": 4,
+ "fixtureCount": 1,
+ "repositoryCount": 3,
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 17,
+ "denominator": 17,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 21,
+ "denominator": 21,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "gateDecision": "pass"
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "publicDefault": {
+ "engine": "js",
+ "changed": false
+ },
+ "claims": {
+ "accuracyFloorMet": true,
+ "parity": false,
+ "leadership": false,
+ "reason": "Batch D measures reviewed C, C++, Swift, and Dart truth. It does not change the public engine or claim competitor parity."
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absoluteCheckoutPathsStored": false,
+ "environmentVariablesStored": false,
+ "engineNetworkCalls": 0,
+ "engineModelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:5bf57005f4f439442a7d8af67592573eeafbc816f691eb6fd2f1bc0e8a8a3dfc"
+}
diff --git a/evals/code-intelligence/results/phase2-batch-e.json b/evals/code-intelligence/results/phase2-batch-e.json
new file mode 100644
index 00000000..45c55bdc
--- /dev/null
+++ b/evals/code-intelligence/results/phase2-batch-e.json
@@ -0,0 +1,1481 @@
+{
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-phase2-batch-e-1",
+ "phase": 2,
+ "batch": "E",
+ "generatedAt": "2026-07-18T18:34:30.955Z",
+ "inputs": {
+ "corpusFingerprint": "sha256:7e0544963c5b00e0b6d55830e1251262e6f132d4b0e28bfd4c36b64587b26c96",
+ "bounds": {
+ "maxFiles": 5000,
+ "maxFileBytes": 524288,
+ "maxNodes": 5000,
+ "maxEdges": 10000
+ },
+ "fixtureTruth": [
+ "evals/code-intelligence/truth/fixtures/php.json",
+ "evals/code-intelligence/truth/fixtures/ruby.json"
+ ],
+ "repositoryTruth": [
+ "evals/code-intelligence/truth/repositories/php/cirepo_php_laravel_framework.json",
+ "evals/code-intelligence/truth/repositories/php/cirepo_php_slimphp_slim.json",
+ "evals/code-intelligence/truth/repositories/php/cirepo_php_symfony_symfony.json",
+ "evals/code-intelligence/truth/repositories/ruby/cirepo_ruby_rails_rails.json",
+ "evals/code-intelligence/truth/repositories/ruby/cirepo_ruby_ruby_rake.json",
+ "evals/code-intelligence/truth/repositories/ruby/cirepo_ruby_sinatra_sinatra.json"
+ ],
+ "repositoryRefs": [
+ "corpus://cirepo_php_laravel_framework@ee0296f03a02b8f890c6323f18bdf4669468c0c2#src/Illuminate/Routing",
+ "corpus://cirepo_php_slimphp_slim@80900fb39cafce3ae53b18a2c4f642a122f03095#Slim",
+ "corpus://cirepo_php_symfony_symfony@7dbebd843d25b2f72e2f7dfbe044c632941ea924#src/Symfony/Component/Routing",
+ "corpus://cirepo_ruby_rails_rails@f011d1218bdd77857f30ce3964eef186f0f14de5#actionpack/lib/action_dispatch/routing",
+ "corpus://cirepo_ruby_ruby_rake@162f9f80cad8121c6427d3031a2a85e62e2d570d#lib/rake",
+ "corpus://cirepo_ruby_sinatra_sinatra@0c88089be7668326ec5ed52671732f8565a16353#lib/sinatra"
+ ]
+ },
+ "thresholds": {
+ "symbolRecallMinimum": 0.95,
+ "resolvedCallPrecisionMinimum": 0.9,
+ "duplicateCanonicalSymbolMaximum": 0,
+ "deterministicStructuralFingerprintRequired": true,
+ "malformedFileRepositoryFailureMaximum": 0,
+ "explicitPartialAndUnsupportedDiagnosticsRequired": true,
+ "realRepositoryGatesRequired": true
+ },
+ "cases": [
+ {
+ "id": "fixture_php_batch_e",
+ "language": "php",
+ "sourceClass": "fixture",
+ "sourceRef": "fixture://sha256:f140770e8d32cf6ce01974a9440753f70d3a86c83ab387fcad2ee00c886f8b7d",
+ "truthPath": "evals/code-intelligence/truth/fixtures/php.json",
+ "graph": {
+ "fingerprint": "sha256:6238f8a87503f5322c30f3fe60771739c8808b862c6ebbc9de1faf07329b6758",
+ "nodeCount": 38,
+ "edgeCount": 42,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "php",
+ "support": "partial",
+ "discoveredFileCount": 7,
+ "indexedFileCount": 7,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 32.426,
+ "secondElapsedMs": 12.397,
+ "evaluatorMaxRssKb": 62384,
+ "graphResponseBytes": 38145,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_php_batch_e_fixture",
+ "language": "php",
+ "sourceRef": "fixture://sha256:f140770e8d32cf6ce01974a9440753f70d3a86c83ab387fcad2ee00c886f8b7d",
+ "graphFingerprints": [
+ "sha256:6238f8a87503f5322c30f3fe60771739c8808b862c6ebbc9de1faf07329b6758",
+ "sha256:6238f8a87503f5322c30f3fe60771739c8808b862c6ebbc9de1faf07329b6758"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 6,
+ "denominator": 6,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 8,
+ "denominator": 8,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 16,
+ "matchedTruthItemCount": 16
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 5,
+ "matchedItemCount": 5
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:590ab343cc0aafd72f16d2c7c85d194b7acabbe33031f3b139f8f907a0406f58"
+ }
+ },
+ {
+ "id": "fixture_ruby_batch_e",
+ "language": "ruby",
+ "sourceClass": "fixture",
+ "sourceRef": "fixture://sha256:9d2476002e24bfb25100929232e11de66c5f3d46ad92761250d150506713f434",
+ "truthPath": "evals/code-intelligence/truth/fixtures/ruby.json",
+ "graph": {
+ "fingerprint": "sha256:c458f7a45f3cd6027a0d590a924a53d72962a25d8dfcfba7ae56c9e8ba04f211",
+ "nodeCount": 28,
+ "edgeCount": 30,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "ruby",
+ "support": "partial",
+ "discoveredFileCount": 5,
+ "indexedFileCount": 5,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 11.049,
+ "secondElapsedMs": 10.636,
+ "evaluatorMaxRssKb": 66480,
+ "graphResponseBytes": 27592,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_ruby_batch_e_fixture",
+ "language": "ruby",
+ "sourceRef": "fixture://sha256:9d2476002e24bfb25100929232e11de66c5f3d46ad92761250d150506713f434",
+ "graphFingerprints": [
+ "sha256:c458f7a45f3cd6027a0d590a924a53d72962a25d8dfcfba7ae56c9e8ba04f211",
+ "sha256:c458f7a45f3cd6027a0d590a924a53d72962a25d8dfcfba7ae56c9e8ba04f211"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 5,
+ "denominator": 5,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 5,
+ "denominator": 5,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 12,
+ "matchedTruthItemCount": 12
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:b546047f18d2fcc8d7c41b143e8625eaaafafa8d154c86149b5501fba5b32ae6"
+ }
+ },
+ {
+ "id": "cirepo_php_laravel_framework",
+ "repositoryId": "cirepo_php_laravel_framework",
+ "language": "php",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_php_laravel_framework@ee0296f03a02b8f890c6323f18bdf4669468c0c2#src/Illuminate/Routing",
+ "commit": "ee0296f03a02b8f890c6323f18bdf4669468c0c2",
+ "truthPath": "evals/code-intelligence/truth/repositories/php/cirepo_php_laravel_framework.json",
+ "graph": {
+ "fingerprint": "sha256:ce465d82e8a9e4c486cd2e6f78e965df88cee487d495a9d0547ad8ce7f9b2f21",
+ "nodeCount": 1630,
+ "edgeCount": 2811,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "php",
+ "support": "partial",
+ "discoveredFileCount": 63,
+ "indexedFileCount": 63,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 224.731,
+ "secondElapsedMs": 233.812,
+ "evaluatorMaxRssKb": 101504,
+ "graphResponseBytes": 2141385,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_php_laravel_framework",
+ "language": "php",
+ "sourceRef": "corpus://cirepo_php_laravel_framework@ee0296f03a02b8f890c6323f18bdf4669468c0c2#src/Illuminate/Routing",
+ "graphFingerprints": [
+ "sha256:ce465d82e8a9e4c486cd2e6f78e965df88cee487d495a9d0547ad8ce7f9b2f21",
+ "sha256:ce465d82e8a9e4c486cd2e6f78e965df88cee487d495a9d0547ad8ce7f9b2f21"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 10,
+ "matchedTruthItemCount": 10
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 5,
+ "matchedItemCount": 5
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:5e146c5e48ed489f81741bf77778f584b45f292c9ffdf03c230eae93c5724827"
+ }
+ },
+ {
+ "id": "cirepo_php_slimphp_slim",
+ "repositoryId": "cirepo_php_slimphp_slim",
+ "language": "php",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_php_slimphp_slim@80900fb39cafce3ae53b18a2c4f642a122f03095#Slim",
+ "commit": "80900fb39cafce3ae53b18a2c4f642a122f03095",
+ "truthPath": "evals/code-intelligence/truth/repositories/php/cirepo_php_slimphp_slim.json",
+ "graph": {
+ "fingerprint": "sha256:29afe2fd908cb9c4695304644ff14b789bf7589a2f5fe97b9aee9e85c79e1e66",
+ "nodeCount": 960,
+ "edgeCount": 1498,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "php",
+ "support": "partial",
+ "discoveredFileCount": 72,
+ "indexedFileCount": 72,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 126.969,
+ "secondElapsedMs": 120.965,
+ "evaluatorMaxRssKb": 126704,
+ "graphResponseBytes": 1209148,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_php_slimphp_slim",
+ "language": "php",
+ "sourceRef": "corpus://cirepo_php_slimphp_slim@80900fb39cafce3ae53b18a2c4f642a122f03095#Slim",
+ "graphFingerprints": [
+ "sha256:29afe2fd908cb9c4695304644ff14b789bf7589a2f5fe97b9aee9e85c79e1e66",
+ "sha256:29afe2fd908cb9c4695304644ff14b789bf7589a2f5fe97b9aee9e85c79e1e66"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 10,
+ "matchedTruthItemCount": 10
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 5,
+ "matchedItemCount": 5
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:43507b96a8b791fbf109c99b544cf7bd39b221913d2bbcf70c7c952d45a05d32"
+ }
+ },
+ {
+ "id": "cirepo_php_symfony_symfony",
+ "repositoryId": "cirepo_php_symfony_symfony",
+ "language": "php",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_php_symfony_symfony@7dbebd843d25b2f72e2f7dfbe044c632941ea924#src/Symfony/Component/Routing",
+ "commit": "7dbebd843d25b2f72e2f7dfbe044c632941ea924",
+ "truthPath": "evals/code-intelligence/truth/repositories/php/cirepo_php_symfony_symfony.json",
+ "graph": {
+ "fingerprint": "sha256:b1260bd4daf880dacc4b99089d436297bd0766fdfdb74c9acb2e7cf90546641e",
+ "nodeCount": 2819,
+ "edgeCount": 8888,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "php",
+ "support": "partial",
+ "discoveredFileCount": 242,
+ "indexedFileCount": 242,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 902.928,
+ "secondElapsedMs": 906.572,
+ "evaluatorMaxRssKb": 180176,
+ "graphResponseBytes": 6120670,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_php_symfony_symfony",
+ "language": "php",
+ "sourceRef": "corpus://cirepo_php_symfony_symfony@7dbebd843d25b2f72e2f7dfbe044c632941ea924#src/Symfony/Component/Routing",
+ "graphFingerprints": [
+ "sha256:b1260bd4daf880dacc4b99089d436297bd0766fdfdb74c9acb2e7cf90546641e",
+ "sha256:b1260bd4daf880dacc4b99089d436297bd0766fdfdb74c9acb2e7cf90546641e"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 10,
+ "matchedTruthItemCount": 10
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 5,
+ "matchedItemCount": 5
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:92afc7b361e8cce9171704758f68f7454e0ee588f381c69874c88322de750fcb"
+ }
+ },
+ {
+ "id": "cirepo_ruby_rails_rails",
+ "repositoryId": "cirepo_ruby_rails_rails",
+ "language": "ruby",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_ruby_rails_rails@f011d1218bdd77857f30ce3964eef186f0f14de5#actionpack/lib/action_dispatch/routing",
+ "commit": "f011d1218bdd77857f30ce3964eef186f0f14de5",
+ "truthPath": "evals/code-intelligence/truth/repositories/ruby/cirepo_ruby_rails_rails.json",
+ "graph": {
+ "fingerprint": "sha256:f56a2dc73a8e3539168dd22f54c7492add60fbdf264dd46afadb073d9138e88a",
+ "nodeCount": 773,
+ "edgeCount": 1798,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "ruby",
+ "support": "partial",
+ "discoveredFileCount": 8,
+ "indexedFileCount": 8,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 125.912,
+ "secondElapsedMs": 133.003,
+ "evaluatorMaxRssKb": 180176,
+ "graphResponseBytes": 1244016,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_ruby_rails_rails",
+ "language": "ruby",
+ "sourceRef": "corpus://cirepo_ruby_rails_rails@f011d1218bdd77857f30ce3964eef186f0f14de5#actionpack/lib/action_dispatch/routing",
+ "graphFingerprints": [
+ "sha256:f56a2dc73a8e3539168dd22f54c7492add60fbdf264dd46afadb073d9138e88a",
+ "sha256:f56a2dc73a8e3539168dd22f54c7492add60fbdf264dd46afadb073d9138e88a"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 9,
+ "matchedTruthItemCount": 9
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 6,
+ "matchedItemCount": 6
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:feb61d7727ea435657166ad7efbc3ecaf91129664e1d65137b23ba3dfe1f7452"
+ }
+ },
+ {
+ "id": "cirepo_ruby_ruby_rake",
+ "repositoryId": "cirepo_ruby_ruby_rake",
+ "language": "ruby",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_ruby_ruby_rake@162f9f80cad8121c6427d3031a2a85e62e2d570d#lib/rake",
+ "commit": "162f9f80cad8121c6427d3031a2a85e62e2d570d",
+ "truthPath": "evals/code-intelligence/truth/repositories/ruby/cirepo_ruby_ruby_rake.json",
+ "graph": {
+ "fingerprint": "sha256:0a910b710b350fab1c5631c379c868be7099e7e054597179afd64fb102ad8d85",
+ "nodeCount": 888,
+ "edgeCount": 1558,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "ruby",
+ "support": "partial",
+ "discoveredFileCount": 43,
+ "indexedFileCount": 43,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 117.612,
+ "secondElapsedMs": 116.433,
+ "evaluatorMaxRssKb": 180176,
+ "graphResponseBytes": 1139920,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_ruby_ruby_rake",
+ "language": "ruby",
+ "sourceRef": "corpus://cirepo_ruby_ruby_rake@162f9f80cad8121c6427d3031a2a85e62e2d570d#lib/rake",
+ "graphFingerprints": [
+ "sha256:0a910b710b350fab1c5631c379c868be7099e7e054597179afd64fb102ad8d85",
+ "sha256:0a910b710b350fab1c5631c379c868be7099e7e054597179afd64fb102ad8d85"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 9,
+ "matchedTruthItemCount": 9
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 5,
+ "matchedItemCount": 5
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:a2c06571c670e4da518db991c6d4a018afa18430c847b44be4f68edfca2f45fc"
+ }
+ },
+ {
+ "id": "cirepo_ruby_sinatra_sinatra",
+ "repositoryId": "cirepo_ruby_sinatra_sinatra",
+ "language": "ruby",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_ruby_sinatra_sinatra@0c88089be7668326ec5ed52671732f8565a16353#lib/sinatra",
+ "commit": "0c88089be7668326ec5ed52671732f8565a16353",
+ "truthPath": "evals/code-intelligence/truth/repositories/ruby/cirepo_ruby_sinatra_sinatra.json",
+ "graph": {
+ "fingerprint": "sha256:5b218dcb838b755037fb71d77cf74f7d7536800633f32633c13fe378846eb8a3",
+ "nodeCount": 483,
+ "edgeCount": 1172,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "ruby",
+ "support": "partial",
+ "discoveredFileCount": 6,
+ "indexedFileCount": 6,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 79.162,
+ "secondElapsedMs": 80.894,
+ "evaluatorMaxRssKb": 180176,
+ "graphResponseBytes": 781752,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_ruby_sinatra_sinatra",
+ "language": "ruby",
+ "sourceRef": "corpus://cirepo_ruby_sinatra_sinatra@0c88089be7668326ec5ed52671732f8565a16353#lib/sinatra",
+ "graphFingerprints": [
+ "sha256:5b218dcb838b755037fb71d77cf74f7d7536800633f32633c13fe378846eb8a3",
+ "sha256:5b218dcb838b755037fb71d77cf74f7d7536800633f32633c13fe378846eb8a3"
+ ],
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 9,
+ "matchedTruthItemCount": 9
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 5,
+ "matchedItemCount": 5
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "accuracyFloorMet": false,
+ "parity": false,
+ "leadership": false
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:70f04b5301f12825022921f4dae0f3541983aba9cd555bc1a7e5c63aceaa9aeb"
+ }
+ }
+ ],
+ "languages": [
+ {
+ "language": "php",
+ "caseCount": 4,
+ "fixtureCount": 1,
+ "repositoryCount": 3,
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 18,
+ "denominator": 18,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 20,
+ "denominator": 20,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "gateDecision": "pass"
+ },
+ {
+ "language": "ruby",
+ "caseCount": 4,
+ "fixtureCount": 1,
+ "repositoryCount": 3,
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 17,
+ "denominator": 17,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 14,
+ "denominator": 14,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "gateDecision": "pass"
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "publicDefault": {
+ "engine": "js",
+ "changed": false
+ },
+ "claims": {
+ "accuracyFloorMet": true,
+ "parity": false,
+ "leadership": false,
+ "reason": "Batch E measures reviewed PHP and Ruby truth. It does not change the public engine or claim competitor parity."
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absoluteCheckoutPathsStored": false,
+ "environmentVariablesStored": false,
+ "engineNetworkCalls": 0,
+ "engineModelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:b62431b872953a81969ef029d869ccc06a516244a4a67c094d4a075bc753e41f"
+}
diff --git a/evals/code-intelligence/results/phase2-tier1-summary.json b/evals/code-intelligence/results/phase2-tier1-summary.json
new file mode 100644
index 00000000..b56560b3
--- /dev/null
+++ b/evals/code-intelligence/results/phase2-tier1-summary.json
@@ -0,0 +1,12533 @@
+{
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-phase2-tier1-summary-1",
+ "phase": 2,
+ "generatedAt": "2026-07-18T18:35:40.367Z",
+ "environment": {
+ "platform": "darwin",
+ "architecture": "arm64",
+ "nodeVersion": "v22.22.3",
+ "engineVersion": "1.1.1",
+ "protocolVersion": "1.0.0"
+ },
+ "inputs": {
+ "corpusFingerprint": "sha256:7e0544963c5b00e0b6d55830e1251262e6f132d4b0e28bfd4c36b64587b26c96",
+ "bounds": {
+ "maxFiles": 5000,
+ "maxFileBytes": 524288,
+ "maxNodes": 5000,
+ "maxEdges": 10000
+ },
+ "batchReports": [
+ {
+ "batch": "A",
+ "path": "evals/code-intelligence/results/phase2-batch-a.json",
+ "reportFingerprint": "sha256:96d595c82797eab8d335b477d150ae07973a0c46fa6fb565103b20a72b06a688",
+ "caseCount": 8,
+ "languageCount": 2
+ },
+ {
+ "batch": "B",
+ "path": "evals/code-intelligence/results/phase2-batch-b.json",
+ "reportFingerprint": "sha256:c557321ef9c410e29e4aa917bb96a12ebb6122cd93a1053fdee3e001bee57546",
+ "caseCount": 15,
+ "languageCount": 3
+ },
+ {
+ "batch": "C",
+ "path": "evals/code-intelligence/results/phase2-batch-c.json",
+ "reportFingerprint": "sha256:90c5ca1e633671993de1f9f0dae40368f08324fae7ec10f8d9c5f07f44c2ee10",
+ "caseCount": 12,
+ "languageCount": 3
+ },
+ {
+ "batch": "D",
+ "path": "evals/code-intelligence/results/phase2-batch-d.json",
+ "reportFingerprint": "sha256:5bf57005f4f439442a7d8af67592573eeafbc816f691eb6fd2f1bc0e8a8a3dfc",
+ "caseCount": 16,
+ "languageCount": 4
+ },
+ {
+ "batch": "E",
+ "path": "evals/code-intelligence/results/phase2-batch-e.json",
+ "reportFingerprint": "sha256:b62431b872953a81969ef029d869ccc06a516244a4a67c094d4a075bc753e41f",
+ "caseCount": 8,
+ "languageCount": 2
+ }
+ ]
+ },
+ "summary": {
+ "fixtureCount": 14,
+ "repositoryCount": 43,
+ "languageCount": 14,
+ "caseCount": 59,
+ "graphNodeCount": 50664,
+ "graphEdgeCount": 113640,
+ "graphResponseBytes": 79816280,
+ "firstRunWallTimeMs": 22140.914,
+ "secondRunWallTimeMs": 22956.575,
+ "peakEvaluatorRssKb": 254752,
+ "meetsFloorCapabilityCount": 77,
+ "doesNotMeetFloorCapabilityCount": 0,
+ "unmeasuredCapabilityCount": 76,
+ "notApplicableCapabilityCount": 1
+ },
+ "cases": [
+ {
+ "id": "fixture_typescript_import_call",
+ "batch": "A",
+ "language": "typescript",
+ "sourceClass": "fixture",
+ "sourceRef": "fixture://sha256:0da79f91adfdca5b7658a56903c4e755db779bc6ce5347f57899c981c07ab61a",
+ "truthPath": "evals/code-intelligence/truth/fixtures/typescript.json",
+ "graph": {
+ "fingerprint": "sha256:42fc85bbae7a7dafa1d0dfb8bf894ac1a8e843f7ce9628a905ef084f92209068",
+ "nodeCount": 9,
+ "edgeCount": 13,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "typescript",
+ "support": "partial",
+ "discoveredFileCount": 2,
+ "indexedFileCount": 2,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 33.012,
+ "secondElapsedMs": 8.028,
+ "evaluatorMaxRssKb": 59664,
+ "graphResponseBytes": 10929,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:5b977d7e5fd55c11b6a2be788c771037a250f2f062f5f62ee2c631ebe0a84900",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 8,
+ "matchedTruthItemCount": 8
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "exports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "fixture_javascript_import_call",
+ "batch": "A",
+ "language": "javascript",
+ "sourceClass": "fixture",
+ "sourceRef": "fixture://sha256:1b50b0e6528f5495afff53ce1dd819b6201f81d7d0558f8dce6baa8f9c928e02",
+ "truthPath": "evals/code-intelligence/truth/fixtures/javascript.json",
+ "graph": {
+ "fingerprint": "sha256:a27b461cbd149f76006757606bbf6363864ba5c2ff818a1d3ac40455f7444f26",
+ "nodeCount": 6,
+ "edgeCount": 8,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "javascript",
+ "support": "partial",
+ "discoveredFileCount": 2,
+ "indexedFileCount": 2,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 8.17,
+ "secondElapsedMs": 7.49,
+ "evaluatorMaxRssKb": 65760,
+ "graphResponseBytes": 7255,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:36d799d4387bc07fb63f7366accec78fb039b1263f9415d9b8eabf8df72ffcba",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 6,
+ "matchedTruthItemCount": 6
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "exports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_typescript_microsoft_typescript",
+ "batch": "A",
+ "language": "typescript",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_typescript_microsoft_typescript@637d5746b70257028fb95aad32ddec6b26ab0a14#src/testRunner/unittests/helpers",
+ "commit": "637d5746b70257028fb95aad32ddec6b26ab0a14",
+ "truthPath": "evals/code-intelligence/truth/repositories/typescript/cirepo_typescript_microsoft_typescript.json",
+ "graph": {
+ "fingerprint": "sha256:e6f932775e1ff36c39226e5c69d1e7d194b58f367ac1f6977204cfdd62414d98",
+ "nodeCount": 845,
+ "edgeCount": 2242,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "typescript",
+ "support": "partial",
+ "discoveredFileCount": 21,
+ "indexedFileCount": 21,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 141.502,
+ "secondElapsedMs": 140.972,
+ "evaluatorMaxRssKb": 89360,
+ "graphResponseBytes": 1526827,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:386d75cf5004a2011f8829074cac29e09f22cdbb7bb224dedfba3fe869666faa",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 6,
+ "matchedTruthItemCount": 6
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "exports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_typescript_microsoft_vscode",
+ "batch": "A",
+ "language": "typescript",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_typescript_microsoft_vscode@53e335d0387969ba6b6bd68f2481be89252089ca#src/vs/base/common",
+ "commit": "53e335d0387969ba6b6bd68f2481be89252089ca",
+ "truthPath": "evals/code-intelligence/truth/repositories/typescript/cirepo_typescript_microsoft_vscode.json",
+ "graph": {
+ "fingerprint": "sha256:9267ce29403e5df571e0b753ec6d362f4131d1e47d06d61810a6920f10bc5771",
+ "nodeCount": 5000,
+ "edgeCount": 10000,
+ "diagnosticCount": 2,
+ "diagnostics": [
+ {
+ "code": "edge_budget_reached",
+ "count": 1801
+ },
+ {
+ "code": "node_budget_reached",
+ "count": 79
+ }
+ ],
+ "coverage": [
+ {
+ "language": "typescript",
+ "support": "partial",
+ "discoveredFileCount": 154,
+ "indexedFileCount": 154,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 1085.722,
+ "secondElapsedMs": 1075.759,
+ "evaluatorMaxRssKb": 174064,
+ "graphResponseBytes": 7212004,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:8be1666ffd70865903667f6f77d085f9b26d8670c031fcb1e14712be923535d5",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 6,
+ "matchedTruthItemCount": 6
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "exports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_typescript_vercel_next_js",
+ "batch": "A",
+ "language": "typescript",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_typescript_vercel_next_js@153bf8ac5fa00888ef5fbb2b65cac12f0942a44f#packages/next/src/server/route-modules/app-route",
+ "commit": "153bf8ac5fa00888ef5fbb2b65cac12f0942a44f",
+ "truthPath": "evals/code-intelligence/truth/repositories/typescript/cirepo_typescript_vercel_next_js.json",
+ "graph": {
+ "fingerprint": "sha256:ae665b34e530eeeb0c2a5aa593967eb95dca3b247867e9de5b60f1f56f8c822c",
+ "nodeCount": 174,
+ "edgeCount": 300,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "typescript",
+ "support": "partial",
+ "discoveredFileCount": 8,
+ "indexedFileCount": 8,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 30.707,
+ "secondElapsedMs": 28.386,
+ "evaluatorMaxRssKb": 174064,
+ "graphResponseBytes": 226045,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:33676fdcc3388a7bacfc1726fadaa44c2e811df43b6ce2cd8ee9ae320a2871e9",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 6,
+ "matchedTruthItemCount": 6
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "exports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_javascript_axios_axios",
+ "batch": "A",
+ "language": "javascript",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_javascript_axios_axios@3041b8fd1daf17404d1bad1f9d94026ea5ab400b#lib/core",
+ "commit": "3041b8fd1daf17404d1bad1f9d94026ea5ab400b",
+ "truthPath": "evals/code-intelligence/truth/repositories/javascript/cirepo_javascript_axios_axios.json",
+ "graph": {
+ "fingerprint": "sha256:89e965f4b740696cabd74debea2e51f946f613c4e848e136534c4396503204b5",
+ "nodeCount": 238,
+ "edgeCount": 441,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "javascript",
+ "support": "partial",
+ "discoveredFileCount": 10,
+ "indexedFileCount": 10,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 33.919,
+ "secondElapsedMs": 35.606,
+ "evaluatorMaxRssKb": 174064,
+ "graphResponseBytes": 321860,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:fc66185e8fbe18e9612d6fbde36f417011e3bc9a2c6f7a12a0007d30a7f31885",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 6,
+ "matchedTruthItemCount": 6
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "exports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_javascript_expressjs_express",
+ "batch": "A",
+ "language": "javascript",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_javascript_expressjs_express@ae6dd37680e3a00618d6c8a3e522f0ee4eeba1a4#lib",
+ "commit": "ae6dd37680e3a00618d6c8a3e522f0ee4eeba1a4",
+ "truthPath": "evals/code-intelligence/truth/repositories/javascript/cirepo_javascript_expressjs_express.json",
+ "graph": {
+ "fingerprint": "sha256:217d4d8616843e5ec1fd4f57ad251a2aeb308d93482a72e0c9f56799e01e3afa",
+ "nodeCount": 252,
+ "edgeCount": 466,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "javascript",
+ "support": "partial",
+ "discoveredFileCount": 6,
+ "indexedFileCount": 6,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 36.275,
+ "secondElapsedMs": 34.532,
+ "evaluatorMaxRssKb": 174064,
+ "graphResponseBytes": 337048,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:89048428a86f381a8a3e630b5f31b499e5d2580ee2a7089a5c170ecf4edbd76f",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 6,
+ "matchedTruthItemCount": 6
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "exports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_javascript_lodash_lodash",
+ "batch": "A",
+ "language": "javascript",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_javascript_lodash_lodash@a666ba591064c8011988275790ad7d625279f09c#.",
+ "commit": "a666ba591064c8011988275790ad7d625279f09c",
+ "truthPath": "evals/code-intelligence/truth/repositories/javascript/cirepo_javascript_lodash_lodash.json",
+ "graph": {
+ "fingerprint": "sha256:651e7364c10dfdec3438d730d370022c8c477631c38eaf918f88e1645a0c20e5",
+ "nodeCount": 733,
+ "edgeCount": 1417,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "javascript",
+ "support": "partial",
+ "discoveredFileCount": 45,
+ "indexedFileCount": 45,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 186.105,
+ "secondElapsedMs": 189.195,
+ "evaluatorMaxRssKb": 174064,
+ "graphResponseBytes": 1061356,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:b43767228896f26fbd9b79d971c4b9f5845a28b7fd4a516b90418da5ffccf6bb",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 6,
+ "matchedTruthItemCount": 6
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "exports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "fixture_python_batch_b",
+ "batch": "B",
+ "language": "python",
+ "sourceClass": "fixture",
+ "sourceRef": "fixture://sha256:fa53fbfa008dd69235e34438208448cf5973aade4f30deee64fc92a3b144f8bb",
+ "truthPath": "evals/code-intelligence/truth/fixtures/python.json",
+ "graph": {
+ "fingerprint": "sha256:13044ef9253a800767df31e83b456497473bed521004421e435aef75578ca4ad",
+ "nodeCount": 18,
+ "edgeCount": 19,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "python",
+ "support": "partial",
+ "discoveredFileCount": 3,
+ "indexedFileCount": 3,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 30.704,
+ "secondElapsedMs": 9.531,
+ "evaluatorMaxRssKb": 60416,
+ "graphResponseBytes": 17791,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:6cd8db4561448296e8815ca0df416b3f6964d54183575e36d9c1192877d0dce1",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 7,
+ "denominator": 7,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 7,
+ "denominator": 7,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 16,
+ "matchedTruthItemCount": 16
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 6,
+ "matchedItemCount": 6
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "config",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "frameworks",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "fixture_go_batch_b",
+ "batch": "B",
+ "language": "go",
+ "sourceClass": "fixture",
+ "sourceRef": "fixture://sha256:d2b84b0659b26439d7eb09c4a3a6ec5a5eb975bb87fd5f12086289355f7f532b",
+ "truthPath": "evals/code-intelligence/truth/fixtures/go.json",
+ "graph": {
+ "fingerprint": "sha256:afd91609774d10b3eae92ab32fccbc4d38c2c014fa22e453c6b5d55de1711048",
+ "nodeCount": 16,
+ "edgeCount": 24,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "go",
+ "support": "partial",
+ "discoveredFileCount": 2,
+ "indexedFileCount": 2,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 9.661,
+ "secondElapsedMs": 9.714,
+ "evaluatorMaxRssKb": 66192,
+ "graphResponseBytes": 19051,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:b4492add33d14e5b93fbe26034cd2e034cbe070947a79362977ae31a0a8988a3",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 7,
+ "denominator": 7,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 5,
+ "denominator": 5,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 16,
+ "matchedTruthItemCount": 16
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 7,
+ "matchedItemCount": 7
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "config",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "fixture_rust_batch_b",
+ "batch": "B",
+ "language": "rust",
+ "sourceClass": "fixture",
+ "sourceRef": "fixture://sha256:1d75880dd0dbf80f9af36f5463184ef1b6a7bf2be1f3bcc5ffa24c5f971f3d9c",
+ "truthPath": "evals/code-intelligence/truth/fixtures/rust.json",
+ "graph": {
+ "fingerprint": "sha256:73c572f9851bc19bba6a5c8e81203ab4747c9fb4753b30c42c78fe62264e9502",
+ "nodeCount": 18,
+ "edgeCount": 23,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "rust",
+ "support": "partial",
+ "discoveredFileCount": 2,
+ "indexedFileCount": 2,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 9.092,
+ "secondElapsedMs": 9.423,
+ "evaluatorMaxRssKb": 66512,
+ "graphResponseBytes": 19198,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:6d7547725cb915dbf9b0899029d50dd4bc45ffc9805badfe227e3f9efc0bef6f",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 11,
+ "denominator": 11,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 7,
+ "denominator": 7,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 22,
+ "matchedTruthItemCount": 22
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 11,
+ "matchedItemCount": 11
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "config",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_python_fastapi_fastapi",
+ "batch": "B",
+ "language": "python",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_python_fastapi_fastapi@9b8410bdc9fa1fd679ea7e65b926535c7045ab87#fastapi",
+ "repositoryId": "cirepo_python_fastapi_fastapi",
+ "commit": "9b8410bdc9fa1fd679ea7e65b926535c7045ab87",
+ "truthPath": "evals/code-intelligence/truth/repositories/python/cirepo_python_fastapi_fastapi.json",
+ "graph": {
+ "fingerprint": "sha256:e91cb4112da27807c609a133097d948b1ae3c74970e7a0305e39a3aba747f259",
+ "nodeCount": 1065,
+ "edgeCount": 3479,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "python",
+ "support": "partial",
+ "discoveredFileCount": 48,
+ "indexedFileCount": 48,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 220.405,
+ "secondElapsedMs": 227.017,
+ "evaluatorMaxRssKb": 119728,
+ "graphResponseBytes": 2232748,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:9bfbc14b903d49ece52d7f08d643aeb1f47f5d0ef8d41e280d0e6135db82e477",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 9,
+ "matchedTruthItemCount": 9
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_python_pallets_flask",
+ "batch": "B",
+ "language": "python",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_python_pallets_flask@36e4a824f340fdee7ed50937ba8e7f6bc7d17f81#src/flask",
+ "repositoryId": "cirepo_python_pallets_flask",
+ "commit": "36e4a824f340fdee7ed50937ba8e7f6bc7d17f81",
+ "truthPath": "evals/code-intelligence/truth/repositories/python/cirepo_python_pallets_flask.json",
+ "graph": {
+ "fingerprint": "sha256:1ecd754ea69fde3d39b877f41731200fd4c04637a0f331b9cf0bd6d522682658",
+ "nodeCount": 1045,
+ "edgeCount": 1958,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "python",
+ "support": "partial",
+ "discoveredFileCount": 24,
+ "indexedFileCount": 24,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 130.23,
+ "secondElapsedMs": 129.131,
+ "evaluatorMaxRssKb": 128752,
+ "graphResponseBytes": 1403619,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:553920fcf0541aedc1ec3ea52a50d560772dfd7fe1d0ee465414a13259c4e491",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 9,
+ "matchedTruthItemCount": 9
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_python_psf_requests",
+ "batch": "B",
+ "language": "python",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_python_psf_requests@f361ead047be5cb873174218582f7d8b9fcd9f49#src/requests",
+ "repositoryId": "cirepo_python_psf_requests",
+ "commit": "f361ead047be5cb873174218582f7d8b9fcd9f49",
+ "truthPath": "evals/code-intelligence/truth/repositories/python/cirepo_python_psf_requests.json",
+ "graph": {
+ "fingerprint": "sha256:fe288ba0e94c571904684586c9de5e7af1b10b099d25fc14364beeea1949fe07",
+ "nodeCount": 705,
+ "edgeCount": 1514,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "python",
+ "support": "partial",
+ "discoveredFileCount": 19,
+ "indexedFileCount": 19,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 100.999,
+ "secondElapsedMs": 101.268,
+ "evaluatorMaxRssKb": 135760,
+ "graphResponseBytes": 1043140,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:048258f7d1db528980ecabb842ab92bba3e6d23d3a2f6a3c8a5295ae6d3f047f",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 5,
+ "denominator": 5,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 10,
+ "matchedTruthItemCount": 10
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_go_gin_gonic_gin",
+ "batch": "B",
+ "language": "go",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_go_gin_gonic_gin@34dac209ffb6ef85cc78c5d217bbb7ad001d68fd#.",
+ "repositoryId": "cirepo_go_gin_gonic_gin",
+ "commit": "34dac209ffb6ef85cc78c5d217bbb7ad001d68fd",
+ "truthPath": "evals/code-intelligence/truth/repositories/go/cirepo_go_gin_gonic_gin.json",
+ "graph": {
+ "fingerprint": "sha256:fa3e06c4a07b845ec71454dcb9f7e930167beece27cf1e06b69339bc39b831b9",
+ "nodeCount": 3654,
+ "edgeCount": 10000,
+ "diagnosticCount": 1,
+ "diagnostics": [
+ {
+ "code": "edge_budget_reached",
+ "count": 3406
+ }
+ ],
+ "coverage": [
+ {
+ "language": "go",
+ "support": "partial",
+ "discoveredFileCount": 99,
+ "indexedFileCount": 99,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 933.641,
+ "secondElapsedMs": 927.163,
+ "evaluatorMaxRssKb": 162432,
+ "graphResponseBytes": 6590671,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:48ade34716b9868024e0bb6ec58e2518c279fc941c28b532d3398d03c5b4a3b8",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 10,
+ "matchedTruthItemCount": 10
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_go_go_chi_chi",
+ "batch": "B",
+ "language": "go",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_go_go_chi_chi@8b258c7bb28f97a5f2a856ff7ef962578fec9215#.",
+ "repositoryId": "cirepo_go_go_chi_chi",
+ "commit": "8b258c7bb28f97a5f2a856ff7ef962578fec9215",
+ "truthPath": "evals/code-intelligence/truth/repositories/go/cirepo_go_go_chi_chi.json",
+ "graph": {
+ "fingerprint": "sha256:c5b7272991750a72368f6fbe154afb0c1e569f4ee934cee74f52129a7b03ccab",
+ "nodeCount": 1703,
+ "edgeCount": 4692,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "go",
+ "support": "partial",
+ "discoveredFileCount": 78,
+ "indexedFileCount": 78,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 294.945,
+ "secondElapsedMs": 298.653,
+ "evaluatorMaxRssKb": 162432,
+ "graphResponseBytes": 3107247,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:b05b7c69b75d32242f7b00768bbcf768e03f6d2dbe87b96a0c72873fedac1d6d",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 11,
+ "matchedTruthItemCount": 11
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_go_hashicorp_go_multierror",
+ "batch": "B",
+ "language": "go",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_go_hashicorp_go_multierror@6d4d48630db25c3c83fa83ecd41dd8438b82963c#.",
+ "repositoryId": "cirepo_go_hashicorp_go_multierror",
+ "commit": "6d4d48630db25c3c83fa83ecd41dd8438b82963c",
+ "truthPath": "evals/code-intelligence/truth/repositories/go/cirepo_go_hashicorp_go_multierror.json",
+ "graph": {
+ "fingerprint": "sha256:59ddab1af2c052c5a7c8809655c7d0ac4c6d2025356c9ef6bb7492c3b289f826",
+ "nodeCount": 165,
+ "edgeCount": 425,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "go",
+ "support": "partial",
+ "discoveredFileCount": 14,
+ "indexedFileCount": 14,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 29.354,
+ "secondElapsedMs": 28.824,
+ "evaluatorMaxRssKb": 162432,
+ "graphResponseBytes": 279569,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:29ce7204266831b4dcc5a27405eb1053ec586823d6292254a1f5e405102c7811",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 10,
+ "matchedTruthItemCount": 10
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_rust_dtolnay_itoa",
+ "batch": "B",
+ "language": "rust",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_rust_dtolnay_itoa@1577ed901354d0d7448ac162328f9dbf5183124c#src",
+ "repositoryId": "cirepo_rust_dtolnay_itoa",
+ "commit": "1577ed901354d0d7448ac162328f9dbf5183124c",
+ "truthPath": "evals/code-intelligence/truth/repositories/rust/cirepo_rust_dtolnay_itoa.json",
+ "graph": {
+ "fingerprint": "sha256:022d9bd948bf47b9ca33ef740b1cfe69a622fee5acd15531c00314f92a692137",
+ "nodeCount": 39,
+ "edgeCount": 83,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "rust",
+ "support": "partial",
+ "discoveredFileCount": 2,
+ "indexedFileCount": 2,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 13.66,
+ "secondElapsedMs": 12.405,
+ "evaluatorMaxRssKb": 162432,
+ "graphResponseBytes": 57030,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:7b02a4f4dba42b34c81b080928cd7d93f2ba7b50c345c3667321f5021d71db83",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 11,
+ "matchedTruthItemCount": 11
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_rust_serde_rs_json",
+ "batch": "B",
+ "language": "rust",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_rust_serde_rs_json@827a315bf2198558f0325b07bcc1e2cd973aba2f#src",
+ "repositoryId": "cirepo_rust_serde_rs_json",
+ "commit": "827a315bf2198558f0325b07bcc1e2cd973aba2f",
+ "truthPath": "evals/code-intelligence/truth/repositories/rust/cirepo_rust_serde_rs_json.json",
+ "graph": {
+ "fingerprint": "sha256:9e8342f718cf88ccee6257290a580acb3f5ef1412bebc74d40b78fd88f8d53a3",
+ "nodeCount": 1972,
+ "edgeCount": 4518,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "rust",
+ "support": "partial",
+ "discoveredFileCount": 37,
+ "indexedFileCount": 37,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 317.279,
+ "secondElapsedMs": 319.389,
+ "evaluatorMaxRssKb": 163168,
+ "graphResponseBytes": 3060926,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:b4f762887cdb6073fc5036d966867095921f41e36c986cefd71540d35fa1fa85",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 10,
+ "matchedTruthItemCount": 10
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_rust_tokio_rs_axum",
+ "batch": "B",
+ "language": "rust",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_rust_tokio_rs_axum@98aea470f9190fad1915897166ac0f149522011a#axum/src",
+ "repositoryId": "cirepo_rust_tokio_rs_axum",
+ "commit": "98aea470f9190fad1915897166ac0f149522011a",
+ "truthPath": "evals/code-intelligence/truth/repositories/rust/cirepo_rust_tokio_rs_axum.json",
+ "graph": {
+ "fingerprint": "sha256:1a8935bf1fda43576f2c38769e4f15b4d71e884818cd0bff008d0fb9dd03c99c",
+ "nodeCount": 2897,
+ "edgeCount": 6270,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "rust",
+ "support": "partial",
+ "discoveredFileCount": 58,
+ "indexedFileCount": 58,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 486.899,
+ "secondElapsedMs": 491.053,
+ "evaluatorMaxRssKb": 166400,
+ "graphResponseBytes": 4414281,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:c387357eda8a6a1e3730ea24cda487f578e87f9263e30c2b2d857ef31b34b0c7",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 11,
+ "matchedTruthItemCount": 11
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cicase_python_fastapi_app_testing",
+ "batch": "B",
+ "language": "python",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_python_fastapi_fastapi@9b8410bdc9fa1fd679ea7e65b926535c7045ab87#docs_src/app_testing/app_b_py310",
+ "repositoryId": "cirepo_python_fastapi_fastapi",
+ "commit": "9b8410bdc9fa1fd679ea7e65b926535c7045ab87",
+ "truthPath": "evals/code-intelligence/truth/repositories/python/cicase_python_fastapi_app_testing.json",
+ "graph": {
+ "fingerprint": "sha256:c8792ad821a7a68b0ea8c9fa441182b1b4a0fddc60eed9ce99b0596ac20b9614",
+ "nodeCount": 28,
+ "edgeCount": 39,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "python",
+ "support": "partial",
+ "discoveredFileCount": 3,
+ "indexedFileCount": 3,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 12.292,
+ "secondElapsedMs": 10.346,
+ "evaluatorMaxRssKb": 166400,
+ "graphResponseBytes": 31262,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:2fe43b6ed744c4356c0650e4b84d82fab49f99a214729a1ceae14b7d5ad82afa",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "relationshipRecall": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 1,
+ "matchedTruthItemCount": 1
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "imports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "calls",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cicase_python_flask_tutorial",
+ "batch": "B",
+ "language": "python",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_python_pallets_flask@36e4a824f340fdee7ed50937ba8e7f6bc7d17f81#examples/tutorial/flaskr",
+ "repositoryId": "cirepo_python_pallets_flask",
+ "commit": "36e4a824f340fdee7ed50937ba8e7f6bc7d17f81",
+ "truthPath": "evals/code-intelligence/truth/repositories/python/cicase_python_flask_tutorial.json",
+ "graph": {
+ "fingerprint": "sha256:2cf0eb18e3748125a72a6309888192b92c34ed2ec42b3307e6e2c37030be6882",
+ "nodeCount": 83,
+ "edgeCount": 139,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "python",
+ "support": "partial",
+ "discoveredFileCount": 4,
+ "indexedFileCount": 4,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 16.316,
+ "secondElapsedMs": 17.358,
+ "evaluatorMaxRssKb": 166400,
+ "graphResponseBytes": 101541,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:591c13e2d6bf6cda2f95b226e22e835210d4eb697b2751b9d1783e1787644003",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "relationshipRecall": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 1,
+ "matchedTruthItemCount": 1
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "imports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "calls",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cicase_python_djangoproject_accounts",
+ "batch": "B",
+ "language": "python",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_python_django_djangoproject_com@7a19ab3bce8f62fed03bb3eef2c19f2d0af15470#accounts",
+ "repositoryId": "cirepo_python_django_djangoproject_com",
+ "commit": "7a19ab3bce8f62fed03bb3eef2c19f2d0af15470",
+ "truthPath": "evals/code-intelligence/truth/repositories/python/cicase_python_djangoproject_accounts.json",
+ "graph": {
+ "fingerprint": "sha256:87c5c59cbaf95573dbae7cc5884f3efd6f100cc5c1b626f7f17acac471ad9c1d",
+ "nodeCount": 128,
+ "edgeCount": 226,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "python",
+ "support": "partial",
+ "discoveredFileCount": 9,
+ "indexedFileCount": 9,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 21.858,
+ "secondElapsedMs": 21.79,
+ "evaluatorMaxRssKb": 166400,
+ "graphResponseBytes": 164735,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:f7b8b3c36c7acadcfddae7dbfb64617d528ec174b3d0767df74c5465e34c3a04",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "relationshipRecall": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 1,
+ "matchedTruthItemCount": 1
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "imports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "calls",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "fixture_java_batch_c",
+ "batch": "C",
+ "language": "java",
+ "sourceClass": "fixture",
+ "sourceRef": "fixture://sha256:ad39462c53135511473eb41f8b657da328927345db347861b0a7ff10bdfc769c",
+ "truthPath": "evals/code-intelligence/truth/fixtures/java.json",
+ "graph": {
+ "fingerprint": "sha256:e6b5542480c2b3b869577528a7d5cde1b9c804e0274823494b0c7dce356c3bbd",
+ "nodeCount": 26,
+ "edgeCount": 31,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "java",
+ "support": "partial",
+ "discoveredFileCount": 3,
+ "indexedFileCount": 3,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 34.035,
+ "secondElapsedMs": 12.829,
+ "evaluatorMaxRssKb": 61664,
+ "graphResponseBytes": 29861,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:bc843f0a04e6524eb48f1b9fba71c997def8f957a7e9ce841139b48e064c4f76",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 10,
+ "denominator": 10,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 17,
+ "matchedTruthItemCount": 17
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 9,
+ "matchedItemCount": 9
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "fixture_kotlin_batch_c",
+ "batch": "C",
+ "language": "kotlin",
+ "sourceClass": "fixture",
+ "sourceRef": "fixture://sha256:cfff5566f8341ab07fb7b53d900368fbf47cb2535fcec14ad2c8a1b2a7cccac5",
+ "truthPath": "evals/code-intelligence/truth/fixtures/kotlin.json",
+ "graph": {
+ "fingerprint": "sha256:d7c6bef8b1e4a9e28fc9003b74e89d913646a6a37bc883560ffeac355b37db2e",
+ "nodeCount": 25,
+ "edgeCount": 30,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "kotlin",
+ "support": "partial",
+ "discoveredFileCount": 3,
+ "indexedFileCount": 3,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 12.915,
+ "secondElapsedMs": 12.173,
+ "evaluatorMaxRssKb": 66592,
+ "graphResponseBytes": 28638,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:62ad498c2e5cda308fb47ab4cbbf956c8d89e7e32fbc2dcddbd2bd0e1f4b42d3",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 11,
+ "denominator": 11,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 18,
+ "matchedTruthItemCount": 18
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 9,
+ "matchedItemCount": 9
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "fixture_csharp_batch_c",
+ "batch": "C",
+ "language": "csharp",
+ "sourceClass": "fixture",
+ "sourceRef": "fixture://sha256:fb5825d7f930972c667cd4d519daaa8afe058367eeba76a07a88fa67e42f88b1",
+ "truthPath": "evals/code-intelligence/truth/fixtures/csharp.json",
+ "graph": {
+ "fingerprint": "sha256:bcfc56309cec380829a6e3344f56eb9f1a3026914f106fc20ff6ae87e46ead19",
+ "nodeCount": 32,
+ "edgeCount": 37,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "csharp",
+ "support": "partial",
+ "discoveredFileCount": 3,
+ "indexedFileCount": 3,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 12.725,
+ "secondElapsedMs": 12.459,
+ "evaluatorMaxRssKb": 67984,
+ "graphResponseBytes": 32773,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:0c42d94dc401a69e63eea301227e6888534743bc11c63424f306f5913735a1ba",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 14,
+ "denominator": 14,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 22,
+ "matchedTruthItemCount": 22
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 12,
+ "matchedItemCount": 12
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_java_google_gson",
+ "batch": "C",
+ "language": "java",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_java_google_gson@c9f3fd55854a743b66f857ace3c7b268ea3e2ef7#gson/src/main/java/com/google/gson/reflect",
+ "repositoryId": "cirepo_java_google_gson",
+ "commit": "c9f3fd55854a743b66f857ace3c7b268ea3e2ef7",
+ "truthPath": "evals/code-intelligence/truth/repositories/java/cirepo_java_google_gson.json",
+ "graph": {
+ "fingerprint": "sha256:b0f172e92b298f3f7bc9ce294eeb39688fe590065133ab8fe560aba6f041a2a1",
+ "nodeCount": 74,
+ "edgeCount": 149,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "java",
+ "support": "partial",
+ "discoveredFileCount": 2,
+ "indexedFileCount": 2,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 19.49,
+ "secondElapsedMs": 18.813,
+ "evaluatorMaxRssKb": 72576,
+ "graphResponseBytes": 107661,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:99f0e2a7aeeac0e3faaad9eab56e483e812880240fd6db3130e856a0bc806b7f",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 6,
+ "matchedTruthItemCount": 6
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_java_google_guava",
+ "batch": "C",
+ "language": "java",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_java_google_guava@5143dbe06b8a1632b50c8fe19b2870fe135e46e2#guava/src/com/google/common/base/internal",
+ "repositoryId": "cirepo_java_google_guava",
+ "commit": "5143dbe06b8a1632b50c8fe19b2870fe135e46e2",
+ "truthPath": "evals/code-intelligence/truth/repositories/java/cirepo_java_google_guava.json",
+ "graph": {
+ "fingerprint": "sha256:94aeb8dd47b6fe2a467196ef479e3d2936587cd8209a2002528accc5a833adaf",
+ "nodeCount": 45,
+ "edgeCount": 53,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "java",
+ "support": "partial",
+ "discoveredFileCount": 1,
+ "indexedFileCount": 1,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 12.398,
+ "secondElapsedMs": 12.854,
+ "evaluatorMaxRssKb": 72880,
+ "graphResponseBytes": 46010,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:8ee217002cc6849ff53dd32ae5970ab8d5120033427bdedcce2312915ad8d5e8",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 6,
+ "matchedTruthItemCount": 6
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_java_spring_projects_spring_petclinic",
+ "batch": "C",
+ "language": "java",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_java_spring_projects_spring_petclinic@51045d1648dad955df586150c1a1a6e22ef400c2#src/main/java/org/springframework/samples/petclinic/owner",
+ "repositoryId": "cirepo_java_spring_projects_spring_petclinic",
+ "commit": "51045d1648dad955df586150c1a1a6e22ef400c2",
+ "truthPath": "evals/code-intelligence/truth/repositories/java/cirepo_java_spring_projects_spring_petclinic.json",
+ "graph": {
+ "fingerprint": "sha256:f7c946087b2898df39c915afc8ef76ad9fc8add1e35b0d8e2dbdc36696be8068",
+ "nodeCount": 263,
+ "edgeCount": 391,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "java",
+ "support": "partial",
+ "discoveredFileCount": 12,
+ "indexedFileCount": 12,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 35.111,
+ "secondElapsedMs": 36.171,
+ "evaluatorMaxRssKb": 75376,
+ "graphResponseBytes": 312840,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:10aca7402f0ecabc48a16b1b9a70c24c96ebc9711f7650b910b989e76011fecd",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 5,
+ "denominator": 5,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 8,
+ "matchedTruthItemCount": 8
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_kotlin_android_nowinandroid",
+ "batch": "C",
+ "language": "kotlin",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_kotlin_android_nowinandroid@7d45eae4f8720a0c77f507712ba2437ff974b6ed#core/model/src/main/kotlin",
+ "repositoryId": "cirepo_kotlin_android_nowinandroid",
+ "commit": "7d45eae4f8720a0c77f507712ba2437ff974b6ed",
+ "truthPath": "evals/code-intelligence/truth/repositories/kotlin/cirepo_kotlin_android_nowinandroid.json",
+ "graph": {
+ "fingerprint": "sha256:49e21b3bb196e319df8cafd6034fba58c155dcee2853deb8f9797fa19b0cccb7",
+ "nodeCount": 40,
+ "edgeCount": 35,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "kotlin",
+ "support": "partial",
+ "discoveredFileCount": 9,
+ "indexedFileCount": 9,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 14.381,
+ "secondElapsedMs": 12.92,
+ "evaluatorMaxRssKb": 75376,
+ "graphResponseBytes": 43299,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:278cb8c8ef1e8f94ce5695c1247c0c3f9ad97d4195fa2c5d8136c984820f1de5",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 9,
+ "matchedTruthItemCount": 9
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_kotlin_kotlin_kotlinx_coroutines",
+ "batch": "C",
+ "language": "kotlin",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_kotlin_kotlin_kotlinx_coroutines@165c6cb5859b5365dec193abc75dee9f49ce1389#kotlinx-coroutines-core/common/src/internal",
+ "repositoryId": "cirepo_kotlin_kotlin_kotlinx_coroutines",
+ "commit": "165c6cb5859b5365dec193abc75dee9f49ce1389",
+ "truthPath": "evals/code-intelligence/truth/repositories/kotlin/cirepo_kotlin_kotlin_kotlinx_coroutines.json",
+ "graph": {
+ "fingerprint": "sha256:f2baf843c94ea36c696359a57d383f45f214f8de73b2e9871b7092708c2d7645",
+ "nodeCount": 401,
+ "edgeCount": 573,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "kotlin",
+ "support": "partial",
+ "discoveredFileCount": 23,
+ "indexedFileCount": 23,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 57.481,
+ "secondElapsedMs": 57.268,
+ "evaluatorMaxRssKb": 84752,
+ "graphResponseBytes": 471062,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:5439a016996708ac6a0f034904b22cd1261ade3107a39adc11b6c074013ff677",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 9,
+ "matchedTruthItemCount": 9
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_kotlin_ktorio_ktor",
+ "batch": "C",
+ "language": "kotlin",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_kotlin_ktorio_ktor@fc6595632e7412abb98b941f926d0ea13c7647d1#ktor-server/ktor-server-core/common/src/io/ktor/server/routing",
+ "repositoryId": "cirepo_kotlin_ktorio_ktor",
+ "commit": "fc6595632e7412abb98b941f926d0ea13c7647d1",
+ "truthPath": "evals/code-intelligence/truth/repositories/kotlin/cirepo_kotlin_ktorio_ktor.json",
+ "graph": {
+ "fingerprint": "sha256:cbaedb913e34c0ecbd81821be54249507a3d360c35af36765f7d42c398ce218e",
+ "nodeCount": 498,
+ "edgeCount": 846,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "kotlin",
+ "support": "partial",
+ "discoveredFileCount": 15,
+ "indexedFileCount": 15,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 74.381,
+ "secondElapsedMs": 73.754,
+ "evaluatorMaxRssKb": 88432,
+ "graphResponseBytes": 647921,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:64678515917323d976499bc19c794dc148d4d95229574f3c6c388fe497ac60e6",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 9,
+ "matchedTruthItemCount": 9
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_csharp_dotnet_aspnetcore",
+ "batch": "C",
+ "language": "csharp",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_csharp_dotnet_aspnetcore@d89ecc425733c5439096864cb9f7f97cab5416a0#src/Http/Routing/src/Patterns",
+ "repositoryId": "cirepo_csharp_dotnet_aspnetcore",
+ "commit": "d89ecc425733c5439096864cb9f7f97cab5416a0",
+ "truthPath": "evals/code-intelligence/truth/repositories/csharp/cirepo_csharp_dotnet_aspnetcore.json",
+ "graph": {
+ "fingerprint": "sha256:85d8485ccd0b106a89af7f739f63cef9b454bfbe35444d7102af0cf69661832d",
+ "nodeCount": 303,
+ "edgeCount": 644,
+ "diagnosticCount": 11,
+ "diagnostics": [
+ {
+ "code": "parse_recovered",
+ "count": 11
+ }
+ ],
+ "coverage": [
+ {
+ "language": "csharp",
+ "support": "partial",
+ "discoveredFileCount": 17,
+ "indexedFileCount": 17,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 75.111,
+ "secondElapsedMs": 72.761,
+ "evaluatorMaxRssKb": 101696,
+ "graphResponseBytes": 481162,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:4b3e9cb70dbacf62b72722d0b2089dbefa5b78ec25591bf509b2d254bbd91876",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 7,
+ "matchedTruthItemCount": 7
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_csharp_dotnet_runtime",
+ "batch": "C",
+ "language": "csharp",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_csharp_dotnet_runtime@e487c08fc5e689918da3e7fbb2747ca8b02c260d#src/libraries/System.Text.Json/src/System/Text/Json/Nodes",
+ "repositoryId": "cirepo_csharp_dotnet_runtime",
+ "commit": "e487c08fc5e689918da3e7fbb2747ca8b02c260d",
+ "truthPath": "evals/code-intelligence/truth/repositories/csharp/cirepo_csharp_dotnet_runtime.json",
+ "graph": {
+ "fingerprint": "sha256:7f7185263a8876aac482108eedd4a3537323bac5e00470f468c0a8009789bdef",
+ "nodeCount": 473,
+ "edgeCount": 746,
+ "diagnosticCount": 4,
+ "diagnostics": [
+ {
+ "code": "parse_recovered",
+ "count": 4
+ }
+ ],
+ "coverage": [
+ {
+ "language": "csharp",
+ "support": "partial",
+ "discoveredFileCount": 17,
+ "indexedFileCount": 17,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 80.035,
+ "secondElapsedMs": 80.341,
+ "evaluatorMaxRssKb": 106176,
+ "graphResponseBytes": 588258,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:4ca087e2643f411948977ca30013655b19113b1488cd115e6ef95bfd7fbf6232",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 7,
+ "matchedTruthItemCount": 7
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_csharp_jamesnk_newtonsoft_json",
+ "batch": "C",
+ "language": "csharp",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_csharp_jamesnk_newtonsoft_json@4f73e74372445108d2c1bda37b36e6f5e43402e0#Src/Newtonsoft.Json/Linq/JsonPath",
+ "repositoryId": "cirepo_csharp_jamesnk_newtonsoft_json",
+ "commit": "4f73e74372445108d2c1bda37b36e6f5e43402e0",
+ "truthPath": "evals/code-intelligence/truth/repositories/csharp/cirepo_csharp_jamesnk_newtonsoft_json.json",
+ "graph": {
+ "fingerprint": "sha256:6c2f77dbc8071ff987c9fc9374f1b56c39eb7088a50276a094c26c55303e7d43",
+ "nodeCount": 180,
+ "edgeCount": 387,
+ "diagnosticCount": 2,
+ "diagnostics": [
+ {
+ "code": "parse_recovered",
+ "count": 2
+ }
+ ],
+ "coverage": [
+ {
+ "language": "csharp",
+ "support": "partial",
+ "discoveredFileCount": 13,
+ "indexedFileCount": 13,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 42.467,
+ "secondElapsedMs": 43.928,
+ "evaluatorMaxRssKb": 106560,
+ "graphResponseBytes": 276583,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:e558f6385a60e8780009af16a65afc4483bbb6a10f01410bf71c1ec021115ebb",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 7,
+ "matchedTruthItemCount": 7
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "fixture_c_batch_d",
+ "batch": "D",
+ "language": "c",
+ "sourceClass": "fixture",
+ "sourceRef": "fixture://sha256:de5378c339ebaf83d8a1967b20b16b0edbf9152c3309235a78b3bb5cf4a629f5",
+ "truthPath": "evals/code-intelligence/truth/fixtures/c.json",
+ "graph": {
+ "fingerprint": "sha256:863bbc75a97c2133ee983ce2895f5f4b986f8051c79168b36e3119f19831961b",
+ "nodeCount": 10,
+ "edgeCount": 12,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "c",
+ "support": "partial",
+ "discoveredFileCount": 3,
+ "indexedFileCount": 3,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 29.16,
+ "secondElapsedMs": 9.43,
+ "evaluatorMaxRssKb": 59552,
+ "graphResponseBytes": 10617,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:a6319d3099e08c4da16a82ff37a7b53c412e2d5e6ee399b177fcdbd624dd7f8f",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 9,
+ "matchedTruthItemCount": 9
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "fixture_cpp_batch_d",
+ "batch": "D",
+ "language": "cpp",
+ "sourceClass": "fixture",
+ "sourceRef": "fixture://sha256:74307b29d88773caeeb559705bf9e8dd49cf7d96ab63ecdbfc2d2fad03a9c06e",
+ "truthPath": "evals/code-intelligence/truth/fixtures/cpp.json",
+ "graph": {
+ "fingerprint": "sha256:cf6d84cb62411295f1486fec6a38d2ca7e53bf53ede1151b17ce9157dfb8e0f6",
+ "nodeCount": 28,
+ "edgeCount": 31,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "cpp",
+ "support": "partial",
+ "discoveredFileCount": 3,
+ "indexedFileCount": 3,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 11.353,
+ "secondElapsedMs": 11.13,
+ "evaluatorMaxRssKb": 66592,
+ "graphResponseBytes": 27886,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:1c8f537965cd79b7e940ec4266fc1bf75c4a00c043367dd2fcb0b1881636f06e",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 6,
+ "denominator": 6,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 13,
+ "matchedTruthItemCount": 13
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "config",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "fixture_swift_batch_d",
+ "batch": "D",
+ "language": "swift",
+ "sourceClass": "fixture",
+ "sourceRef": "fixture://sha256:5cbe7153b65842626587a3c05dcad05ed6ff63129adc1fe4d579dd82460642bf",
+ "truthPath": "evals/code-intelligence/truth/fixtures/swift.json",
+ "graph": {
+ "fingerprint": "sha256:e54e5f14988d7aaf1be0b5ee43b9d4d9091759579a4b8cc7bb56481f3e9297b4",
+ "nodeCount": 19,
+ "edgeCount": 19,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "swift",
+ "support": "partial",
+ "discoveredFileCount": 4,
+ "indexedFileCount": 4,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 10.656,
+ "secondElapsedMs": 10.308,
+ "evaluatorMaxRssKb": 67184,
+ "graphResponseBytes": 18525,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:da9e2dcdf27d2a44372725a5d7df4d4b37f6d1eccc2897187ba84ea997888fea",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 5,
+ "denominator": 5,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 5,
+ "denominator": 5,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 12,
+ "matchedTruthItemCount": 12
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "fixture_dart_batch_d",
+ "batch": "D",
+ "language": "dart",
+ "sourceClass": "fixture",
+ "sourceRef": "fixture://sha256:75ad927a4e8ded1ac3b1c1b7fef6fa3a8d909dd00204d3cc7538731bbcec43da",
+ "truthPath": "evals/code-intelligence/truth/fixtures/dart.json",
+ "graph": {
+ "fingerprint": "sha256:bf447c4574efd18dec76e05c3e778b4266db0e7b397ad9468f79d41361791882",
+ "nodeCount": 27,
+ "edgeCount": 34,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "dart",
+ "support": "partial",
+ "discoveredFileCount": 4,
+ "indexedFileCount": 4,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 10.657,
+ "secondElapsedMs": 10.434,
+ "evaluatorMaxRssKb": 70304,
+ "graphResponseBytes": 28813,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:2988c7d652b6a7444f24140c780e54e0021e6c582a29831725bb842f5cdc5e5c",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 8,
+ "denominator": 8,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 8,
+ "denominator": 8,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 18,
+ "matchedTruthItemCount": 18
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "exports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 5,
+ "matchedItemCount": 5
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "frameworks",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_c_antirez_kilo",
+ "batch": "D",
+ "language": "c",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_c_antirez_kilo@323d93b29bd89a2cb446de90c4ed4fea1764176e#.",
+ "repositoryId": "cirepo_c_antirez_kilo",
+ "commit": "323d93b29bd89a2cb446de90c4ed4fea1764176e",
+ "truthPath": "evals/code-intelligence/truth/repositories/c/cirepo_c_antirez_kilo.json",
+ "graph": {
+ "fingerprint": "sha256:9ee85ce04511dc9b1786da28fe84cde615e95f57c20524e9bafb1febf8bfeba1",
+ "nodeCount": 97,
+ "edgeCount": 238,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "c",
+ "support": "partial",
+ "discoveredFileCount": 1,
+ "indexedFileCount": 1,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 23.389,
+ "secondElapsedMs": 23.148,
+ "evaluatorMaxRssKb": 72880,
+ "graphResponseBytes": 155949,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:90503371e85cba3ae26c62911dec501c1d7236d8393c8a19ed2b6ee3b33fbe14",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 7,
+ "matchedTruthItemCount": 7
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_c_curl_curl",
+ "batch": "D",
+ "language": "c",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_c_curl_curl@4176aba5e4871a2f1c7c120dd76568f80f5d5ddc#lib",
+ "repositoryId": "cirepo_c_curl_curl",
+ "commit": "4176aba5e4871a2f1c7c120dd76568f80f5d5ddc",
+ "truthPath": "evals/code-intelligence/truth/repositories/c/cirepo_c_curl_curl.json",
+ "graph": {
+ "fingerprint": "sha256:0cf9a7a5b1d941551c236bad3ee7a8af9c7185c41574842b9d4bea8c0eff096c",
+ "nodeCount": 5000,
+ "edgeCount": 10000,
+ "diagnosticCount": 115,
+ "diagnostics": [
+ {
+ "code": "edge_budget_reached",
+ "count": 9221
+ },
+ {
+ "code": "node_budget_reached",
+ "count": 5471
+ },
+ {
+ "code": "parse_recovered",
+ "count": 113
+ }
+ ],
+ "coverage": [
+ {
+ "language": "c",
+ "support": "partial",
+ "discoveredFileCount": 380,
+ "indexedFileCount": 380,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 12089.015,
+ "secondElapsedMs": 13018.361,
+ "evaluatorMaxRssKb": 159632,
+ "graphResponseBytes": 7021532,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:8dcab6b813ddbb2d3feec5512d1f35e58847abda8f8cf0e0112645c0f1861559",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 7,
+ "matchedTruthItemCount": 7
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_c_libuv_libuv",
+ "batch": "D",
+ "language": "c",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_c_libuv_libuv@2cadaa40167050baf7c6905ac897e6fb57afb2c6#src",
+ "repositoryId": "cirepo_c_libuv_libuv",
+ "commit": "2cadaa40167050baf7c6905ac897e6fb57afb2c6",
+ "truthPath": "evals/code-intelligence/truth/repositories/c/cirepo_c_libuv_libuv.json",
+ "graph": {
+ "fingerprint": "sha256:448f68ecb3bd4bc9c5ef267da3135c2ee597f94134e99b6a8d86d9b21d1583f3",
+ "nodeCount": 3978,
+ "edgeCount": 10000,
+ "diagnosticCount": 45,
+ "diagnostics": [
+ {
+ "code": "edge_budget_reached",
+ "count": 1195
+ },
+ {
+ "code": "parse_recovered",
+ "count": 44
+ }
+ ],
+ "coverage": [
+ {
+ "language": "c",
+ "support": "partial",
+ "discoveredFileCount": 104,
+ "indexedFileCount": 104,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 1058.495,
+ "secondElapsedMs": 1055.805,
+ "evaluatorMaxRssKb": 182336,
+ "graphResponseBytes": 6638156,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:db353c8af02052e7c93c720c2484e1dd1d101e43af1274538b13e562ad6d4006",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 8,
+ "matchedTruthItemCount": 8
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 4,
+ "matchedItemCount": 4
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_cpp_catchorg_catch2",
+ "batch": "D",
+ "language": "cpp",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_cpp_catchorg_catch2@ae5d271da2c88b859d6365281ac075112115d4b1#src/Catch2",
+ "repositoryId": "cirepo_cpp_catchorg_catch2",
+ "commit": "ae5d271da2c88b859d6365281ac075112115d4b1",
+ "truthPath": "evals/code-intelligence/truth/repositories/cpp/cirepo_cpp_catchorg_catch2.json",
+ "graph": {
+ "fingerprint": "sha256:8bbb60620baf959197c64461f1b0dee3d8ac046a6ab7108f96efd6723ef6c3a6",
+ "nodeCount": 5000,
+ "edgeCount": 8429,
+ "diagnosticCount": 44,
+ "diagnostics": [
+ {
+ "code": "node_budget_reached",
+ "count": 564
+ },
+ {
+ "code": "parse_recovered",
+ "count": 43
+ }
+ ],
+ "coverage": [
+ {
+ "language": "cpp",
+ "support": "partial",
+ "discoveredFileCount": 289,
+ "indexedFileCount": 289,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 1146.802,
+ "secondElapsedMs": 1139.637,
+ "evaluatorMaxRssKb": 202832,
+ "graphResponseBytes": 6678053,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:0497ab5618e6bf384dcb010c2644fa9e5afbfce95d48a483f02d2390dce124fb",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 9,
+ "matchedTruthItemCount": 9
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_cpp_fmtlib_fmt",
+ "batch": "D",
+ "language": "cpp",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_cpp_fmtlib_fmt@a79df4504cd4e42ed004b1113fb82171e62ed822#src",
+ "repositoryId": "cirepo_cpp_fmtlib_fmt",
+ "commit": "a79df4504cd4e42ed004b1113fb82171e62ed822",
+ "truthPath": "evals/code-intelligence/truth/repositories/cpp/cirepo_cpp_fmtlib_fmt.json",
+ "graph": {
+ "fingerprint": "sha256:5051612622ce3ffbdc75690be3f3fb50f34ec505b85b12953e25e7876a5cc79d",
+ "nodeCount": 162,
+ "edgeCount": 293,
+ "diagnosticCount": 4,
+ "diagnostics": [
+ {
+ "code": "parse_recovered",
+ "count": 4
+ }
+ ],
+ "coverage": [
+ {
+ "language": "cpp",
+ "support": "partial",
+ "discoveredFileCount": 4,
+ "indexedFileCount": 4,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 27.399,
+ "secondElapsedMs": 26.881,
+ "evaluatorMaxRssKb": 204368,
+ "graphResponseBytes": 207810,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:a6318d0c279bae65783c4540b63921ea209a08bfb38118ced60450fce8212f72",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 11,
+ "matchedTruthItemCount": 11
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_cpp_nlohmann_json",
+ "batch": "D",
+ "language": "cpp",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_cpp_nlohmann_json@722c03495f9978eb727f480b6ea0742f652e06a9#include/nlohmann/detail",
+ "repositoryId": "cirepo_cpp_nlohmann_json",
+ "commit": "722c03495f9978eb727f480b6ea0742f652e06a9",
+ "truthPath": "evals/code-intelligence/truth/repositories/cpp/cirepo_cpp_nlohmann_json.json",
+ "graph": {
+ "fingerprint": "sha256:821e4fbf49d1fe1faed74fc1e7bc71e66d6159ab0cd8fc01ea89199a47366c15",
+ "nodeCount": 1302,
+ "edgeCount": 4859,
+ "diagnosticCount": 39,
+ "diagnostics": [
+ {
+ "code": "parse_recovered",
+ "count": 39
+ }
+ ],
+ "coverage": [
+ {
+ "language": "cpp",
+ "support": "partial",
+ "discoveredFileCount": 40,
+ "indexedFileCount": 40,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 405.852,
+ "secondElapsedMs": 411.63,
+ "evaluatorMaxRssKb": 225040,
+ "graphResponseBytes": 3084309,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:ffe84b1fd365d8f13fad5fda7e37faf681118596d6b8e8ff8a711973fd4e1286",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 10,
+ "matchedTruthItemCount": 10
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_swift_alamofire_alamofire",
+ "batch": "D",
+ "language": "swift",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_swift_alamofire_alamofire@903c53c710d1cbbac0b4b9c2527aefb791e1fee3#Source/Core",
+ "repositoryId": "cirepo_swift_alamofire_alamofire",
+ "commit": "903c53c710d1cbbac0b4b9c2527aefb791e1fee3",
+ "truthPath": "evals/code-intelligence/truth/repositories/swift/cirepo_swift_alamofire_alamofire.json",
+ "graph": {
+ "fingerprint": "sha256:27f9924b84bc3b50ecb9c5bb698c0cabfd5e270410634864959a6de538fdd36e",
+ "nodeCount": 837,
+ "edgeCount": 1754,
+ "diagnosticCount": 4,
+ "diagnostics": [
+ {
+ "code": "parse_recovered",
+ "count": 4
+ }
+ ],
+ "coverage": [
+ {
+ "language": "swift",
+ "support": "partial",
+ "discoveredFileCount": 18,
+ "indexedFileCount": 18,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 184.68,
+ "secondElapsedMs": 186.114,
+ "evaluatorMaxRssKb": 232064,
+ "graphResponseBytes": 1264956,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:13189d626c0b286f8ad917b9fb17821aa7c504e2956ffe180cae089613dcce70",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 7,
+ "matchedTruthItemCount": 7
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "calls",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_swift_apple_swift_nio",
+ "batch": "D",
+ "language": "swift",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_swift_apple_swift_nio@0b18836bd8b0162e7e17a995a3fbee20ed8f3b2b#Sources/NIOCore",
+ "repositoryId": "cirepo_swift_apple_swift_nio",
+ "commit": "0b18836bd8b0162e7e17a995a3fbee20ed8f3b2b",
+ "truthPath": "evals/code-intelligence/truth/repositories/swift/cirepo_swift_apple_swift_nio.json",
+ "graph": {
+ "fingerprint": "sha256:b3093b4936bb8d9b60d7495eff8fc048aff6e4b09126cc204f2b43a11145dab1",
+ "nodeCount": 2680,
+ "edgeCount": 6654,
+ "diagnosticCount": 24,
+ "diagnostics": [
+ {
+ "code": "parse_recovered",
+ "count": 24
+ }
+ ],
+ "coverage": [
+ {
+ "language": "swift",
+ "support": "partial",
+ "discoveredFileCount": 71,
+ "indexedFileCount": 71,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 723.103,
+ "secondElapsedMs": 718.041,
+ "evaluatorMaxRssKb": 254752,
+ "graphResponseBytes": 4681614,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:dc14e0c83ff1760d7b0e4d969efe810bc1657eae420036998a7112a088494678",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 7,
+ "matchedTruthItemCount": 7
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "calls",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_swift_vapor_vapor",
+ "batch": "D",
+ "language": "swift",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_swift_vapor_vapor@059b578bde8a037a42543914b8e14041fbec01e7#Sources/Vapor/Routing",
+ "repositoryId": "cirepo_swift_vapor_vapor",
+ "commit": "059b578bde8a037a42543914b8e14041fbec01e7",
+ "truthPath": "evals/code-intelligence/truth/repositories/swift/cirepo_swift_vapor_vapor.json",
+ "graph": {
+ "fingerprint": "sha256:df69bcf6aaf8094795f0841b48019b736b847b502bb48e875c15ef295e3f57c9",
+ "nodeCount": 125,
+ "edgeCount": 200,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "swift",
+ "support": "partial",
+ "discoveredFileCount": 11,
+ "indexedFileCount": 11,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 25.593,
+ "secondElapsedMs": 24.516,
+ "evaluatorMaxRssKb": 254752,
+ "graphResponseBytes": 157592,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:6a0abe68c2f95c1b1f0dab69430e192690d9f54d8baffaae2db54db6d8021a30",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 6,
+ "matchedTruthItemCount": 6
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_dart_dart_lang_http",
+ "batch": "D",
+ "language": "dart",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_dart_dart_lang_http@fe4aaa900d50f0423200dd333314729d2c0650b9#pkgs/http/lib",
+ "repositoryId": "cirepo_dart_dart_lang_http",
+ "commit": "fe4aaa900d50f0423200dd333314729d2c0650b9",
+ "truthPath": "evals/code-intelligence/truth/repositories/dart/cirepo_dart_dart_lang_http.json",
+ "graph": {
+ "fingerprint": "sha256:70c439ad823597bdf07cc3fe6fdd862352af428f13ef112be16511c0dee3d139",
+ "nodeCount": 351,
+ "edgeCount": 622,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "dart",
+ "support": "partial",
+ "discoveredFileCount": 27,
+ "indexedFileCount": 27,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 62.057,
+ "secondElapsedMs": 61.155,
+ "evaluatorMaxRssKb": 254752,
+ "graphResponseBytes": 463395,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:14d44b5d55e5a5b4e56dca96ce6acea6ad3174d256c5c25f867bccaac853de30",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 8,
+ "matchedTruthItemCount": 8
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "exports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_dart_dart_lang_shelf",
+ "batch": "D",
+ "language": "dart",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_dart_dart_lang_shelf@833433edf813df24e9a48e01fc38647d53b979f8#pkgs/shelf_router/lib",
+ "repositoryId": "cirepo_dart_dart_lang_shelf",
+ "commit": "833433edf813df24e9a48e01fc38647d53b979f8",
+ "truthPath": "evals/code-intelligence/truth/repositories/dart/cirepo_dart_dart_lang_shelf.json",
+ "graph": {
+ "fingerprint": "sha256:e0aeddfddc5fbb0589af75df8f47517e952adc0876d064ed593818587266e840",
+ "nodeCount": 92,
+ "edgeCount": 133,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "dart",
+ "support": "partial",
+ "discoveredFileCount": 5,
+ "indexedFileCount": 5,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 20.538,
+ "secondElapsedMs": 19.249,
+ "evaluatorMaxRssKb": 254752,
+ "graphResponseBytes": 105473,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:f1f4457121106b4454692026770526b07fc8948eaf613650fc43256a64736d97",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 9,
+ "matchedTruthItemCount": 9
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "exports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_dart_flutter_samples",
+ "batch": "D",
+ "language": "dart",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_dart_flutter_samples@09335b0c7a84ae29bf5454bd54f4e15c2cdd79a1#navigation_and_routing/lib",
+ "repositoryId": "cirepo_dart_flutter_samples",
+ "commit": "09335b0c7a84ae29bf5454bd54f4e15c2cdd79a1",
+ "truthPath": "evals/code-intelligence/truth/repositories/dart/cirepo_dart_flutter_samples.json",
+ "graph": {
+ "fingerprint": "sha256:e41b33c7c0e38caf183b3120781fc0846a1b947a449b018df95d1241e939e81f",
+ "nodeCount": 184,
+ "edgeCount": 347,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "dart",
+ "support": "partial",
+ "discoveredFileCount": 17,
+ "indexedFileCount": 17,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 38.099,
+ "secondElapsedMs": 36.72,
+ "evaluatorMaxRssKb": 254752,
+ "graphResponseBytes": 256771,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:ca0e648dd747e29b0eef5c952a4f67dc6fe510462e4a88be3dd3bc6ddc422eb1",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 6,
+ "denominator": 6,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 13,
+ "matchedTruthItemCount": 13
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "exports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "config",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "fixture_php_batch_e",
+ "batch": "E",
+ "language": "php",
+ "sourceClass": "fixture",
+ "sourceRef": "fixture://sha256:f140770e8d32cf6ce01974a9440753f70d3a86c83ab387fcad2ee00c886f8b7d",
+ "truthPath": "evals/code-intelligence/truth/fixtures/php.json",
+ "graph": {
+ "fingerprint": "sha256:6238f8a87503f5322c30f3fe60771739c8808b862c6ebbc9de1faf07329b6758",
+ "nodeCount": 38,
+ "edgeCount": 42,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "php",
+ "support": "partial",
+ "discoveredFileCount": 7,
+ "indexedFileCount": 7,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 32.426,
+ "secondElapsedMs": 12.397,
+ "evaluatorMaxRssKb": 62384,
+ "graphResponseBytes": 38145,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:590ab343cc0aafd72f16d2c7c85d194b7acabbe33031f3b139f8f907a0406f58",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 6,
+ "denominator": 6,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 8,
+ "denominator": 8,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 16,
+ "matchedTruthItemCount": 16
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 5,
+ "matchedItemCount": 5
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "fixture_ruby_batch_e",
+ "batch": "E",
+ "language": "ruby",
+ "sourceClass": "fixture",
+ "sourceRef": "fixture://sha256:9d2476002e24bfb25100929232e11de66c5f3d46ad92761250d150506713f434",
+ "truthPath": "evals/code-intelligence/truth/fixtures/ruby.json",
+ "graph": {
+ "fingerprint": "sha256:c458f7a45f3cd6027a0d590a924a53d72962a25d8dfcfba7ae56c9e8ba04f211",
+ "nodeCount": 28,
+ "edgeCount": 30,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "ruby",
+ "support": "partial",
+ "discoveredFileCount": 5,
+ "indexedFileCount": 5,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 11.049,
+ "secondElapsedMs": 10.636,
+ "evaluatorMaxRssKb": 66480,
+ "graphResponseBytes": 27592,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:b546047f18d2fcc8d7c41b143e8625eaaafafa8d154c86149b5501fba5b32ae6",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 5,
+ "denominator": 5,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 5,
+ "denominator": 5,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 12,
+ "matchedTruthItemCount": 12
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 3,
+ "matchedItemCount": 3
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_php_laravel_framework",
+ "batch": "E",
+ "language": "php",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_php_laravel_framework@ee0296f03a02b8f890c6323f18bdf4669468c0c2#src/Illuminate/Routing",
+ "repositoryId": "cirepo_php_laravel_framework",
+ "commit": "ee0296f03a02b8f890c6323f18bdf4669468c0c2",
+ "truthPath": "evals/code-intelligence/truth/repositories/php/cirepo_php_laravel_framework.json",
+ "graph": {
+ "fingerprint": "sha256:ce465d82e8a9e4c486cd2e6f78e965df88cee487d495a9d0547ad8ce7f9b2f21",
+ "nodeCount": 1630,
+ "edgeCount": 2811,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "php",
+ "support": "partial",
+ "discoveredFileCount": 63,
+ "indexedFileCount": 63,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 224.731,
+ "secondElapsedMs": 233.812,
+ "evaluatorMaxRssKb": 101504,
+ "graphResponseBytes": 2141385,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:5e146c5e48ed489f81741bf77778f584b45f292c9ffdf03c230eae93c5724827",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 10,
+ "matchedTruthItemCount": 10
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 5,
+ "matchedItemCount": 5
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_php_slimphp_slim",
+ "batch": "E",
+ "language": "php",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_php_slimphp_slim@80900fb39cafce3ae53b18a2c4f642a122f03095#Slim",
+ "repositoryId": "cirepo_php_slimphp_slim",
+ "commit": "80900fb39cafce3ae53b18a2c4f642a122f03095",
+ "truthPath": "evals/code-intelligence/truth/repositories/php/cirepo_php_slimphp_slim.json",
+ "graph": {
+ "fingerprint": "sha256:29afe2fd908cb9c4695304644ff14b789bf7589a2f5fe97b9aee9e85c79e1e66",
+ "nodeCount": 960,
+ "edgeCount": 1498,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "php",
+ "support": "partial",
+ "discoveredFileCount": 72,
+ "indexedFileCount": 72,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 126.969,
+ "secondElapsedMs": 120.965,
+ "evaluatorMaxRssKb": 126704,
+ "graphResponseBytes": 1209148,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:43507b96a8b791fbf109c99b544cf7bd39b221913d2bbcf70c7c952d45a05d32",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 10,
+ "matchedTruthItemCount": 10
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 5,
+ "matchedItemCount": 5
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_php_symfony_symfony",
+ "batch": "E",
+ "language": "php",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_php_symfony_symfony@7dbebd843d25b2f72e2f7dfbe044c632941ea924#src/Symfony/Component/Routing",
+ "repositoryId": "cirepo_php_symfony_symfony",
+ "commit": "7dbebd843d25b2f72e2f7dfbe044c632941ea924",
+ "truthPath": "evals/code-intelligence/truth/repositories/php/cirepo_php_symfony_symfony.json",
+ "graph": {
+ "fingerprint": "sha256:b1260bd4daf880dacc4b99089d436297bd0766fdfdb74c9acb2e7cf90546641e",
+ "nodeCount": 2819,
+ "edgeCount": 8888,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "php",
+ "support": "partial",
+ "discoveredFileCount": 242,
+ "indexedFileCount": 242,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 902.928,
+ "secondElapsedMs": 906.572,
+ "evaluatorMaxRssKb": 180176,
+ "graphResponseBytes": 6120670,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:92afc7b361e8cce9171704758f68f7454e0ee588f381c69874c88322de750fcb",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 10,
+ "matchedTruthItemCount": 10
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 5,
+ "matchedItemCount": 5
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_ruby_rails_rails",
+ "batch": "E",
+ "language": "ruby",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_ruby_rails_rails@f011d1218bdd77857f30ce3964eef186f0f14de5#actionpack/lib/action_dispatch/routing",
+ "repositoryId": "cirepo_ruby_rails_rails",
+ "commit": "f011d1218bdd77857f30ce3964eef186f0f14de5",
+ "truthPath": "evals/code-intelligence/truth/repositories/ruby/cirepo_ruby_rails_rails.json",
+ "graph": {
+ "fingerprint": "sha256:f56a2dc73a8e3539168dd22f54c7492add60fbdf264dd46afadb073d9138e88a",
+ "nodeCount": 773,
+ "edgeCount": 1798,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "ruby",
+ "support": "partial",
+ "discoveredFileCount": 8,
+ "indexedFileCount": 8,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 125.912,
+ "secondElapsedMs": 133.003,
+ "evaluatorMaxRssKb": 180176,
+ "graphResponseBytes": 1244016,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:feb61d7727ea435657166ad7efbc3ecaf91129664e1d65137b23ba3dfe1f7452",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 9,
+ "matchedTruthItemCount": 9
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 6,
+ "matchedItemCount": 6
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_ruby_ruby_rake",
+ "batch": "E",
+ "language": "ruby",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_ruby_ruby_rake@162f9f80cad8121c6427d3031a2a85e62e2d570d#lib/rake",
+ "repositoryId": "cirepo_ruby_ruby_rake",
+ "commit": "162f9f80cad8121c6427d3031a2a85e62e2d570d",
+ "truthPath": "evals/code-intelligence/truth/repositories/ruby/cirepo_ruby_ruby_rake.json",
+ "graph": {
+ "fingerprint": "sha256:0a910b710b350fab1c5631c379c868be7099e7e054597179afd64fb102ad8d85",
+ "nodeCount": 888,
+ "edgeCount": 1558,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "ruby",
+ "support": "partial",
+ "discoveredFileCount": 43,
+ "indexedFileCount": 43,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 117.612,
+ "secondElapsedMs": 116.433,
+ "evaluatorMaxRssKb": 180176,
+ "graphResponseBytes": 1139920,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:a2c06571c670e4da518db991c6d4a018afa18430c847b44be4f68edfca2f45fc",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 9,
+ "matchedTruthItemCount": 9
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 5,
+ "matchedItemCount": 5
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ },
+ {
+ "id": "cirepo_ruby_sinatra_sinatra",
+ "batch": "E",
+ "language": "ruby",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_ruby_sinatra_sinatra@0c88089be7668326ec5ed52671732f8565a16353#lib/sinatra",
+ "repositoryId": "cirepo_ruby_sinatra_sinatra",
+ "commit": "0c88089be7668326ec5ed52671732f8565a16353",
+ "truthPath": "evals/code-intelligence/truth/repositories/ruby/cirepo_ruby_sinatra_sinatra.json",
+ "graph": {
+ "fingerprint": "sha256:5b218dcb838b755037fb71d77cf74f7d7536800633f32633c13fe378846eb8a3",
+ "nodeCount": 483,
+ "edgeCount": 1172,
+ "diagnosticCount": 0,
+ "diagnostics": [],
+ "coverage": [
+ {
+ "language": "ruby",
+ "support": "partial",
+ "discoveredFileCount": 6,
+ "indexedFileCount": 6,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": [
+ "native_preview"
+ ]
+ }
+ ]
+ },
+ "measurements": {
+ "firstElapsedMs": 79.162,
+ "secondElapsedMs": 80.894,
+ "evaluatorMaxRssKb": 180176,
+ "graphResponseBytes": 781752,
+ "workspaceFingerprintUnchanged": true
+ },
+ "report": {
+ "reportFingerprint": "sha256:70f04b5301f12825022921f4dae0f3541983aba9cd555bc1a7e5c63aceaa9aeb",
+ "metrics": {
+ "declarationRecall": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 9,
+ "matchedTruthItemCount": 9
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "structure",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 5,
+ "matchedItemCount": 5
+ },
+ {
+ "id": "imports",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 2,
+ "matchedItemCount": 2
+ },
+ {
+ "id": "exports",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "heritage",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "types",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "calls",
+ "claim": "partial",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 1,
+ "matchedItemCount": 1
+ },
+ {
+ "id": "config",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "frameworks",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "impact",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ },
+ {
+ "id": "processes",
+ "claim": "unmeasured",
+ "benchmarkStatus": "unmeasured",
+ "itemCount": 0,
+ "matchedItemCount": 0
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass"
+ }
+ }
+ ],
+ "languages": [
+ {
+ "language": "typescript",
+ "fixtureCount": 1,
+ "repositoryCount": 3,
+ "caseCount": 4,
+ "benchmarkStatus": "unmeasured",
+ "accuracy": {
+ "declarationRecall": {
+ "numerator": 6,
+ "denominator": 6,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 10,
+ "denominator": 10,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 6,
+ "denominator": 6,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "structure",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 6,
+ "denominator": 6,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "imports",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "exports",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "heritage",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "types",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "calls",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 6,
+ "denominator": 6,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "config",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "frameworks",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "impact",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "processes",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ }
+ ]
+ },
+ {
+ "language": "javascript",
+ "fixtureCount": 1,
+ "repositoryCount": 3,
+ "caseCount": 4,
+ "benchmarkStatus": "unmeasured",
+ "accuracy": {
+ "declarationRecall": {
+ "numerator": 8,
+ "denominator": 8,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 8,
+ "denominator": 8,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "structure",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "imports",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "exports",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "heritage",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "types",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "calls",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "config",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "frameworks",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "impact",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "processes",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ }
+ ]
+ },
+ {
+ "language": "python",
+ "fixtureCount": 1,
+ "repositoryCount": 4,
+ "caseCount": 7,
+ "benchmarkStatus": "unmeasured",
+ "accuracy": {
+ "declarationRecall": {
+ "numerator": 20,
+ "denominator": 20,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 22,
+ "denominator": 22,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 4,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "structure",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 16,
+ "denominator": 16,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "imports",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 5,
+ "denominator": 5,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "exports",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "heritage",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "types",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "calls",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "config",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 8,
+ "denominator": 8,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "frameworks",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 5,
+ "denominator": 5,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "impact",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "processes",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ }
+ ]
+ },
+ {
+ "language": "java",
+ "fixtureCount": 1,
+ "repositoryCount": 3,
+ "caseCount": 4,
+ "benchmarkStatus": "unmeasured",
+ "accuracy": {
+ "declarationRecall": {
+ "numerator": 21,
+ "denominator": 21,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 10,
+ "denominator": 10,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 5,
+ "denominator": 5,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "structure",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 20,
+ "denominator": 20,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "imports",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "exports",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "heritage",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "types",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "calls",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 5,
+ "denominator": 5,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "config",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "frameworks",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 1,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 5,
+ "denominator": 5,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "impact",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "processes",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ }
+ ]
+ },
+ {
+ "language": "kotlin",
+ "fixtureCount": 1,
+ "repositoryCount": 3,
+ "caseCount": 4,
+ "benchmarkStatus": "unmeasured",
+ "accuracy": {
+ "declarationRecall": {
+ "numerator": 20,
+ "denominator": 20,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 13,
+ "denominator": 13,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 5,
+ "denominator": 5,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "structure",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 21,
+ "denominator": 21,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "imports",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 8,
+ "denominator": 8,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "exports",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "heritage",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "types",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 6,
+ "denominator": 6,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "calls",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 5,
+ "denominator": 5,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "config",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "frameworks",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "impact",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "processes",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ }
+ ]
+ },
+ {
+ "language": "csharp",
+ "fixtureCount": 1,
+ "repositoryCount": 3,
+ "caseCount": 4,
+ "benchmarkStatus": "unmeasured",
+ "accuracy": {
+ "declarationRecall": {
+ "numerator": 23,
+ "denominator": 23,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 10,
+ "denominator": 10,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 5,
+ "denominator": 5,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "structure",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 24,
+ "denominator": 24,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "imports",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 8,
+ "denominator": 8,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "exports",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "heritage",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "types",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "calls",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 5,
+ "denominator": 5,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "config",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "frameworks",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "impact",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "processes",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ }
+ ]
+ },
+ {
+ "language": "go",
+ "fixtureCount": 1,
+ "repositoryCount": 3,
+ "caseCount": 4,
+ "benchmarkStatus": "unmeasured",
+ "accuracy": {
+ "declarationRecall": {
+ "numerator": 19,
+ "denominator": 19,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 15,
+ "denominator": 15,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "structure",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 19,
+ "denominator": 19,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "imports",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 8,
+ "denominator": 8,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "exports",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 8,
+ "denominator": 8,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "heritage",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "types",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "calls",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "config",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "frameworks",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 1,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "impact",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "processes",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ }
+ ]
+ },
+ {
+ "language": "rust",
+ "fixtureCount": 1,
+ "repositoryCount": 3,
+ "caseCount": 4,
+ "benchmarkStatus": "unmeasured",
+ "accuracy": {
+ "declarationRecall": {
+ "numerator": 23,
+ "denominator": 23,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 18,
+ "denominator": 18,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "structure",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 23,
+ "denominator": 23,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "imports",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 8,
+ "denominator": 8,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "exports",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 8,
+ "denominator": 8,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "heritage",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 1,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "types",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 5,
+ "denominator": 5,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "calls",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "config",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "frameworks",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "impact",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "processes",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ }
+ ]
+ },
+ {
+ "language": "php",
+ "fixtureCount": 1,
+ "repositoryCount": 3,
+ "caseCount": 4,
+ "benchmarkStatus": "unmeasured",
+ "accuracy": {
+ "declarationRecall": {
+ "numerator": 18,
+ "denominator": 18,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 20,
+ "denominator": 20,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "structure",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 20,
+ "denominator": 20,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "imports",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 8,
+ "denominator": 8,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "exports",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "heritage",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 6,
+ "denominator": 6,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "types",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 6,
+ "denominator": 6,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "calls",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "config",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "frameworks",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "impact",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "processes",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ }
+ ]
+ },
+ {
+ "language": "ruby",
+ "fixtureCount": 1,
+ "repositoryCount": 3,
+ "caseCount": 4,
+ "benchmarkStatus": "unmeasured",
+ "accuracy": {
+ "declarationRecall": {
+ "numerator": 17,
+ "denominator": 17,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 14,
+ "denominator": 14,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "structure",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 19,
+ "denominator": 19,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "imports",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 8,
+ "denominator": 8,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "exports",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "heritage",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 1,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "types",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 1,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "calls",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "config",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "frameworks",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "impact",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "processes",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ }
+ ]
+ },
+ {
+ "language": "swift",
+ "fixtureCount": 1,
+ "repositoryCount": 3,
+ "caseCount": 4,
+ "benchmarkStatus": "unmeasured",
+ "accuracy": {
+ "declarationRecall": {
+ "numerator": 16,
+ "denominator": 16,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 11,
+ "denominator": 11,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "structure",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 6,
+ "denominator": 6,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "imports",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 8,
+ "denominator": 8,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "exports",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "heritage",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 8,
+ "denominator": 8,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "types",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 7,
+ "denominator": 7,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "calls",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "config",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "frameworks",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "impact",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "processes",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ }
+ ]
+ },
+ {
+ "language": "c",
+ "fixtureCount": 1,
+ "repositoryCount": 3,
+ "caseCount": 4,
+ "benchmarkStatus": "unmeasured",
+ "accuracy": {
+ "declarationRecall": {
+ "numerator": 14,
+ "denominator": 14,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 9,
+ "denominator": 9,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "structure",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 15,
+ "denominator": 15,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "imports",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 8,
+ "denominator": 8,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "exports",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "heritage",
+ "applicability": "not-applicable",
+ "applicabilityRationale": "C has no language-level inheritance, interface, trait, protocol, or mixin relationship.",
+ "applicable": false,
+ "benchmarkStatus": "not-applicable",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "C has no language-level inheritance, interface, trait, protocol, or mixin relationship."
+ ]
+ },
+ {
+ "id": "types",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 1,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "calls",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "config",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 3,
+ "denominator": 3,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "frameworks",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "impact",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "processes",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ }
+ ]
+ },
+ {
+ "language": "cpp",
+ "fixtureCount": 1,
+ "repositoryCount": 3,
+ "caseCount": 4,
+ "benchmarkStatus": "unmeasured",
+ "accuracy": {
+ "declarationRecall": {
+ "numerator": 16,
+ "denominator": 16,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 12,
+ "denominator": 12,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "structure",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 13,
+ "denominator": 13,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "imports",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 9,
+ "denominator": 9,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "exports",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "heritage",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 9,
+ "denominator": 9,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "types",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 5,
+ "denominator": 5,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "calls",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "config",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 2,
+ "denominator": 2,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "frameworks",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "impact",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "processes",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ }
+ ]
+ },
+ {
+ "language": "dart",
+ "fixtureCount": 1,
+ "repositoryCount": 3,
+ "caseCount": 4,
+ "benchmarkStatus": "unmeasured",
+ "accuracy": {
+ "declarationRecall": {
+ "numerator": 17,
+ "denominator": 17,
+ "value": 1
+ },
+ "relationshipRecall": {
+ "numerator": 21,
+ "denominator": 21,
+ "value": 1
+ },
+ "reviewedCallPrecision": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "capabilities": [
+ {
+ "id": "parse",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "structure",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 10,
+ "denominator": 10,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "imports",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "exports",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 8,
+ "denominator": 8,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "heritage",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 10,
+ "denominator": 10,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "types",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "calls",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "meets-floor",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 3,
+ "sourceCoverageMet": true,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 4,
+ "denominator": 4,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "Sampled fixture and at least three pinned repository sources meet the published Phase 2 floor. Native remains preview-only."
+ ]
+ },
+ {
+ "id": "config",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 1,
+ "denominator": 1,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "frameworks",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 1,
+ "repositoryEvidenceCount": 1,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 6,
+ "denominator": 6,
+ "value": 1
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "impact",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ },
+ {
+ "id": "processes",
+ "applicability": "applicable",
+ "applicabilityRationale": "This capability is part of the published Tier 1 language contract.",
+ "applicable": true,
+ "benchmarkStatus": "unmeasured",
+ "fixtureEvidenceCount": 0,
+ "repositoryEvidenceCount": 0,
+ "sourceCoverageMet": false,
+ "metrics": {
+ "reviewedTruth": {
+ "numerator": 0,
+ "denominator": 0,
+ "value": null
+ },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true
+ },
+ "limitations": [
+ "The capability lacks qualifying reviewed evidence from the fixture and at least three pinned repositories, or a measured sample missed a floor."
+ ]
+ }
+ ]
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "publicDefault": {
+ "engine": "js",
+ "changed": false
+ },
+ "claims": {
+ "allBatchGatesPass": true,
+ "allTier1CapabilitiesMeetFloor": false,
+ "parity": false,
+ "leadership": false,
+ "reason": "Phase 2 records sampled Tier 1 native-preview evidence. Unmeasured capability rows, the JS public default, unbundled native binaries, and unmeasured competitors remain explicit."
+ },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absoluteCheckoutPathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:74d064df9b659e09aadc364e5104dadaea4adca33f94be751fd139aec9922a1d"
+}
diff --git a/evals/code-intelligence/results/phase3-source-index.json b/evals/code-intelligence/results/phase3-source-index.json
new file mode 100644
index 00000000..66a6e256
--- /dev/null
+++ b/evals/code-intelligence/results/phase3-source-index.json
@@ -0,0 +1,971 @@
+{
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-phase3-source-index-2",
+ "phase": 3,
+ "generatedAt": "2026-07-19T17:18:54.297Z",
+ "environment": {
+ "platform": "darwin",
+ "release": "25.5.0",
+ "architecture": "arm64",
+ "cpu": "Apple M2 Max",
+ "logicalCpuCount": 12,
+ "totalMemoryBytes": 34359738368,
+ "nodeVersion": "v22.22.3",
+ "engineVersion": "2.0.0"
+ },
+ "checkout": {
+ "commit": "ac5c023011b03ae1e8c82eeb663331f96bc39e85",
+ "dirtyBeforeRun": false
+ },
+ "inputs": {
+ "corpusFingerprint": "sha256:7e0544963c5b00e0b6d55830e1251262e6f132d4b0e28bfd4c36b64587b26c96",
+ "implementationFingerprint": "sha256:c6cec8251541710e40c29e9e17a9dac49923668b4bd1836c35dacc61b9a24cb8",
+ "bounds": {
+ "maxFiles": 5000,
+ "maxFileBytes": 524288,
+ "maxNodes": 100000,
+ "maxEdges": 250000
+ },
+ "queryRepetitions": 5,
+ "repositoryRefs": [
+ "corpus://cirepo_go_hashicorp_go_multierror@6d4d48630db25c3c83fa83ecd41dd8438b82963c#.",
+ "corpus://cirepo_javascript_expressjs_express@ae6dd37680e3a00618d6c8a3e522f0ee4eeba1a4#.",
+ "corpus://cirepo_typescript_microsoft_typescript@637d5746b70257028fb95aad32ddec6b26ab0a14#src/compiler/transformers"
+ ],
+ "fixtureRefs": [
+ "fixture://sha256:19b4cc8b09e8efefcb74a8b22524207fc17ed1c2dd78d0a9fbba1443d8e76e67"
+ ]
+ },
+ "summary": {
+ "caseCount": 4,
+ "fixtureCount": 1,
+ "repositoryCount": 3,
+ "totalFileCount": 781,
+ "totalNodeCount": 6660,
+ "totalEdgeCount": 15600,
+ "totalUnresolvedCount": 0,
+ "totalOmittedCount": 0,
+ "totalDatabaseBytes": 29806592,
+ "coldBuildWallMs": {
+ "minimum": 60.707,
+ "p50": 222.944,
+ "p95": 1113.945,
+ "maximum": 1113.945
+ },
+ "warmStatusWallMs": {
+ "minimum": 11.602,
+ "p50": 25.241,
+ "p95": 30.412,
+ "maximum": 30.412
+ },
+ "noChangeRefreshWallMs": {
+ "minimum": 14.131,
+ "p50": 21.887,
+ "p95": 44.68,
+ "maximum": 44.68
+ },
+ "oneFileRefreshWallMs": {
+ "minimum": 29.098,
+ "p50": 81.679,
+ "p95": 371.779,
+ "maximum": 371.779
+ },
+ "dependencyClosureRefreshWallMs": {
+ "minimum": 28.872,
+ "p50": 106.571,
+ "p95": 460.801,
+ "maximum": 460.801
+ },
+ "peakEvaluatorRssKb": 108304
+ },
+ "cases": [
+ {
+ "id": "phase3_fixture_typescript_dependency_chain",
+ "language": "typescript",
+ "sourceClass": "fixture",
+ "sourceRef": "fixture://sha256:19b4cc8b09e8efefcb74a8b22524207fc17ed1c2dd78d0a9fbba1443d8e76e67",
+ "graph": {
+ "fileCount": 600,
+ "nodeCount": 1800,
+ "edgeCount": 2998,
+ "unresolvedCount": 0,
+ "omittedCount": 0,
+ "databaseBytes": 6520832,
+ "activeGeneration": 3,
+ "generationCountObserved": 3
+ },
+ "operations": {
+ "coldBuild": {
+ "wallMs": 282.515,
+ "engineDurationMs": 241,
+ "responseBytes": 981,
+ "parsedFileCount": 600,
+ "reusedFileCount": 0,
+ "changedFileCount": 600,
+ "deletedFileCount": 0,
+ "localFilesWritten": 1,
+ "activeGeneration": 1,
+ "state": "ready",
+ "freshness": "current"
+ },
+ "warmStatus": {
+ "wallMs": 30.412,
+ "engineDurationMs": 22,
+ "responseBytes": 1017,
+ "parsedFileCount": 0,
+ "reusedFileCount": 600,
+ "changedFileCount": 0,
+ "deletedFileCount": 0,
+ "localFilesWritten": 0,
+ "activeGeneration": 1,
+ "state": "ready",
+ "freshness": "current"
+ },
+ "noChangeRefresh": {
+ "wallMs": 35.292,
+ "engineDurationMs": 26,
+ "responseBytes": 980,
+ "parsedFileCount": 0,
+ "reusedFileCount": 600,
+ "changedFileCount": 0,
+ "deletedFileCount": 0,
+ "localFilesWritten": 0,
+ "activeGeneration": 1,
+ "state": "ready",
+ "freshness": "current"
+ },
+ "oneFileRefresh": {
+ "wallMs": 179.206,
+ "engineDurationMs": 169,
+ "responseBytes": 982,
+ "parsedFileCount": 11,
+ "reusedFileCount": 599,
+ "changedFileCount": 1,
+ "deletedFileCount": 0,
+ "localFilesWritten": 1,
+ "activeGeneration": 2,
+ "state": "ready",
+ "freshness": "current"
+ },
+ "dependencyClosureRefresh": {
+ "wallMs": 176.833,
+ "engineDurationMs": 166,
+ "responseBytes": 981,
+ "parsedFileCount": 6,
+ "reusedFileCount": 599,
+ "changedFileCount": 1,
+ "deletedFileCount": 0,
+ "localFilesWritten": 1,
+ "activeGeneration": 3,
+ "state": "ready",
+ "freshness": "current",
+ "preChangeImpactNodeCount": 17,
+ "postChangeSeedStillQueryable": true
+ },
+ "exactLookup": {
+ "available": true,
+ "repetitions": 5,
+ "resultCount": 2,
+ "wallMs": {
+ "minimum": 30.239,
+ "p50": 32.985,
+ "p95": 34.218,
+ "maximum": 34.218
+ },
+ "engineDurationMs": {
+ "minimum": 22,
+ "p50": 22,
+ "p95": 24,
+ "maximum": 24
+ },
+ "responseBytes": {
+ "minimum": 1381,
+ "p50": 1381,
+ "p95": 1381,
+ "maximum": 1381
+ },
+ "localFilesWritten": 0
+ },
+ "neighborhood": {
+ "available": true,
+ "repetitions": 5,
+ "resultCount": 5,
+ "wallMs": {
+ "minimum": 33.662,
+ "p50": 35.967,
+ "p95": 36.133,
+ "maximum": 36.133
+ },
+ "engineDurationMs": {
+ "minimum": 23,
+ "p50": 23,
+ "p95": 25,
+ "maximum": 25
+ },
+ "responseBytes": {
+ "minimum": 3615,
+ "p50": 3615,
+ "p95": 3615,
+ "maximum": 3615
+ },
+ "localFilesWritten": 0
+ },
+ "impact": {
+ "available": true,
+ "repetitions": 5,
+ "resultCount": 17,
+ "wallMs": {
+ "minimum": 36.587,
+ "p50": 40.771,
+ "p95": 48.468,
+ "maximum": 48.468
+ },
+ "engineDurationMs": {
+ "minimum": 26,
+ "p50": 28,
+ "p95": 35,
+ "maximum": 35
+ },
+ "responseBytes": {
+ "minimum": 12623,
+ "p50": 12623,
+ "p95": 12623,
+ "maximum": 12623
+ },
+ "localFilesWritten": 0
+ },
+ "trace": {
+ "available": true,
+ "repetitions": 5,
+ "resultCount": 2,
+ "wallMs": {
+ "minimum": 33.599,
+ "p50": 35.522,
+ "p95": 46.552,
+ "maximum": 46.552
+ },
+ "engineDurationMs": {
+ "minimum": 23,
+ "p50": 25,
+ "p95": 29,
+ "maximum": 29
+ },
+ "responseBytes": {
+ "minimum": 1731,
+ "p50": 1731,
+ "p95": 1731,
+ "maximum": 1731
+ },
+ "localFilesWritten": 0
+ }
+ },
+ "invariants": {
+ "noChangeGenerationPreserved": true,
+ "noChangeParsedFileCount": 0,
+ "noChangeLocalFilesWritten": 0,
+ "noChangeDatabaseUnchanged": true,
+ "readQueriesDatabaseUnchanged": true,
+ "oneFileParsedFileCount": 11,
+ "oneFileChangedFileCount": 1,
+ "dependencyParsedFileCount": 6,
+ "dependencyChangedFileCount": 1,
+ "finalState": "ready",
+ "finalFreshness": "current"
+ },
+ "resources": {
+ "evaluatorMaxRssKbBefore": 54560,
+ "evaluatorMaxRssKbAfter": 78288,
+ "databaseFileBytes": 6520832
+ },
+ "diagnostics": [
+ {
+ "code": "source_index_ready",
+ "count": 1
+ }
+ ],
+ "safeguards": {
+ "readOnly": true,
+ "localFilesWritten": 0,
+ "canonicalMemoryWrites": 0,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "rawSourceBodiesIncluded": false,
+ "absolutePathsIncluded": false,
+ "repairPerformed": false
+ }
+ },
+ {
+ "id": "phase3_go_multierror",
+ "language": "go",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_go_hashicorp_go_multierror@6d4d48630db25c3c83fa83ecd41dd8438b82963c#.",
+ "commit": "6d4d48630db25c3c83fa83ecd41dd8438b82963c",
+ "graph": {
+ "fileCount": 14,
+ "nodeCount": 165,
+ "edgeCount": 425,
+ "unresolvedCount": 0,
+ "omittedCount": 0,
+ "databaseBytes": 823296,
+ "activeGeneration": 3,
+ "generationCountObserved": 3
+ },
+ "operations": {
+ "coldBuild": {
+ "wallMs": 60.707,
+ "engineDurationMs": 27,
+ "responseBytes": 974,
+ "parsedFileCount": 14,
+ "reusedFileCount": 0,
+ "changedFileCount": 14,
+ "deletedFileCount": 0,
+ "localFilesWritten": 1,
+ "activeGeneration": 1,
+ "state": "ready",
+ "freshness": "current"
+ },
+ "warmStatus": {
+ "wallMs": 11.602,
+ "engineDurationMs": 2,
+ "responseBytes": 1011,
+ "parsedFileCount": 0,
+ "reusedFileCount": 14,
+ "changedFileCount": 0,
+ "deletedFileCount": 0,
+ "localFilesWritten": 0,
+ "activeGeneration": 1,
+ "state": "ready",
+ "freshness": "current"
+ },
+ "noChangeRefresh": {
+ "wallMs": 14.131,
+ "engineDurationMs": 2,
+ "responseBytes": 974,
+ "parsedFileCount": 0,
+ "reusedFileCount": 14,
+ "changedFileCount": 0,
+ "deletedFileCount": 0,
+ "localFilesWritten": 0,
+ "activeGeneration": 1,
+ "state": "ready",
+ "freshness": "current"
+ },
+ "oneFileRefresh": {
+ "wallMs": 29.098,
+ "engineDurationMs": 22,
+ "responseBytes": 975,
+ "parsedFileCount": 5,
+ "reusedFileCount": 13,
+ "changedFileCount": 1,
+ "deletedFileCount": 0,
+ "localFilesWritten": 1,
+ "activeGeneration": 2,
+ "state": "ready",
+ "freshness": "current"
+ },
+ "dependencyClosureRefresh": {
+ "wallMs": 28.872,
+ "engineDurationMs": 20,
+ "responseBytes": 975,
+ "parsedFileCount": 3,
+ "reusedFileCount": 13,
+ "changedFileCount": 1,
+ "deletedFileCount": 0,
+ "localFilesWritten": 1,
+ "activeGeneration": 3,
+ "state": "ready",
+ "freshness": "current",
+ "preChangeImpactNodeCount": 43,
+ "postChangeSeedStillQueryable": true
+ },
+ "exactLookup": {
+ "available": true,
+ "repetitions": 5,
+ "resultCount": 2,
+ "wallMs": {
+ "minimum": 9.047,
+ "p50": 9.831,
+ "p95": 11.127,
+ "maximum": 11.127
+ },
+ "engineDurationMs": {
+ "minimum": 2,
+ "p50": 2,
+ "p95": 3,
+ "maximum": 3
+ },
+ "responseBytes": {
+ "minimum": 1346,
+ "p50": 1346,
+ "p95": 1346,
+ "maximum": 1346
+ },
+ "localFilesWritten": 0
+ },
+ "neighborhood": {
+ "available": true,
+ "repetitions": 5,
+ "resultCount": 5,
+ "wallMs": {
+ "minimum": 9.506,
+ "p50": 13.085,
+ "p95": 14.943,
+ "maximum": 14.943
+ },
+ "engineDurationMs": {
+ "minimum": 2,
+ "p50": 2,
+ "p95": 5,
+ "maximum": 5
+ },
+ "responseBytes": {
+ "minimum": 3195,
+ "p50": 3195,
+ "p95": 3195,
+ "maximum": 3195
+ },
+ "localFilesWritten": 0
+ },
+ "impact": {
+ "available": true,
+ "repetitions": 5,
+ "resultCount": 43,
+ "wallMs": {
+ "minimum": 9.956,
+ "p50": 11.525,
+ "p95": 13.6,
+ "maximum": 13.6
+ },
+ "engineDurationMs": {
+ "minimum": 3,
+ "p50": 3,
+ "p95": 4,
+ "maximum": 4
+ },
+ "responseBytes": {
+ "minimum": 25695,
+ "p50": 25695,
+ "p95": 25695,
+ "maximum": 25695
+ },
+ "localFilesWritten": 0
+ },
+ "trace": {
+ "available": true,
+ "repetitions": 5,
+ "resultCount": 3,
+ "wallMs": {
+ "minimum": 8.738,
+ "p50": 10.51,
+ "p95": 11.422,
+ "maximum": 11.422
+ },
+ "engineDurationMs": {
+ "minimum": 2,
+ "p50": 2,
+ "p95": 2,
+ "maximum": 2
+ },
+ "responseBytes": {
+ "minimum": 2192,
+ "p50": 2192,
+ "p95": 2192,
+ "maximum": 2192
+ },
+ "localFilesWritten": 0
+ }
+ },
+ "invariants": {
+ "noChangeGenerationPreserved": true,
+ "noChangeParsedFileCount": 0,
+ "noChangeLocalFilesWritten": 0,
+ "noChangeDatabaseUnchanged": true,
+ "readQueriesDatabaseUnchanged": true,
+ "oneFileParsedFileCount": 5,
+ "oneFileChangedFileCount": 1,
+ "dependencyParsedFileCount": 3,
+ "dependencyChangedFileCount": 1,
+ "finalState": "ready",
+ "finalFreshness": "current"
+ },
+ "resources": {
+ "evaluatorMaxRssKbBefore": 78336,
+ "evaluatorMaxRssKbAfter": 81104,
+ "databaseFileBytes": 823296
+ },
+ "diagnostics": [
+ {
+ "code": "source_index_ready",
+ "count": 1
+ }
+ ],
+ "safeguards": {
+ "readOnly": true,
+ "localFilesWritten": 0,
+ "canonicalMemoryWrites": 0,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "rawSourceBodiesIncluded": false,
+ "absolutePathsIncluded": false,
+ "repairPerformed": false
+ }
+ },
+ {
+ "id": "phase3_javascript_express",
+ "language": "javascript",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_javascript_expressjs_express@ae6dd37680e3a00618d6c8a3e522f0ee4eeba1a4#.",
+ "commit": "ae6dd37680e3a00618d6c8a3e522f0ee4eeba1a4",
+ "graph": {
+ "fileCount": 141,
+ "nodeCount": 866,
+ "edgeCount": 1327,
+ "unresolvedCount": 0,
+ "omittedCount": 0,
+ "databaseBytes": 3018752,
+ "activeGeneration": 3,
+ "generationCountObserved": 3
+ },
+ "operations": {
+ "coldBuild": {
+ "wallMs": 222.944,
+ "engineDurationMs": 187,
+ "responseBytes": 980,
+ "parsedFileCount": 141,
+ "reusedFileCount": 0,
+ "changedFileCount": 141,
+ "deletedFileCount": 0,
+ "localFilesWritten": 1,
+ "activeGeneration": 1,
+ "state": "ready",
+ "freshness": "current"
+ },
+ "warmStatus": {
+ "wallMs": 25.241,
+ "engineDurationMs": 13,
+ "responseBytes": 1016,
+ "parsedFileCount": 0,
+ "reusedFileCount": 141,
+ "changedFileCount": 0,
+ "deletedFileCount": 0,
+ "localFilesWritten": 0,
+ "activeGeneration": 1,
+ "state": "ready",
+ "freshness": "current"
+ },
+ "noChangeRefresh": {
+ "wallMs": 21.887,
+ "engineDurationMs": 14,
+ "responseBytes": 979,
+ "parsedFileCount": 0,
+ "reusedFileCount": 141,
+ "changedFileCount": 0,
+ "deletedFileCount": 0,
+ "localFilesWritten": 0,
+ "activeGeneration": 1,
+ "state": "ready",
+ "freshness": "current"
+ },
+ "oneFileRefresh": {
+ "wallMs": 81.679,
+ "engineDurationMs": 74,
+ "responseBytes": 979,
+ "parsedFileCount": 2,
+ "reusedFileCount": 140,
+ "changedFileCount": 1,
+ "deletedFileCount": 0,
+ "localFilesWritten": 1,
+ "activeGeneration": 2,
+ "state": "ready",
+ "freshness": "current"
+ },
+ "dependencyClosureRefresh": {
+ "wallMs": 106.571,
+ "engineDurationMs": 96,
+ "responseBytes": 979,
+ "parsedFileCount": 5,
+ "reusedFileCount": 140,
+ "changedFileCount": 1,
+ "deletedFileCount": 0,
+ "localFilesWritten": 1,
+ "activeGeneration": 3,
+ "state": "ready",
+ "freshness": "current",
+ "preChangeImpactNodeCount": 50,
+ "postChangeSeedStillQueryable": true
+ },
+ "exactLookup": {
+ "available": true,
+ "repetitions": 5,
+ "resultCount": 2,
+ "wallMs": {
+ "minimum": 19.899,
+ "p50": 21,
+ "p95": 24.845,
+ "maximum": 24.845
+ },
+ "engineDurationMs": {
+ "minimum": 11,
+ "p50": 11,
+ "p95": 14,
+ "maximum": 14
+ },
+ "responseBytes": {
+ "minimum": 1406,
+ "p50": 1406,
+ "p95": 1406,
+ "maximum": 1406
+ },
+ "localFilesWritten": 0
+ },
+ "neighborhood": {
+ "available": true,
+ "repetitions": 5,
+ "resultCount": 5,
+ "wallMs": {
+ "minimum": 19.391,
+ "p50": 23.298,
+ "p95": 27.601,
+ "maximum": 27.601
+ },
+ "engineDurationMs": {
+ "minimum": 11,
+ "p50": 14,
+ "p95": 18,
+ "maximum": 18
+ },
+ "responseBytes": {
+ "minimum": 3359,
+ "p50": 3359,
+ "p95": 3359,
+ "maximum": 3359
+ },
+ "localFilesWritten": 0
+ },
+ "impact": {
+ "available": true,
+ "repetitions": 5,
+ "resultCount": 50,
+ "wallMs": {
+ "minimum": 25.545,
+ "p50": 26.885,
+ "p95": 28.869,
+ "maximum": 28.869
+ },
+ "engineDurationMs": {
+ "minimum": 13,
+ "p50": 15,
+ "p95": 17,
+ "maximum": 17
+ },
+ "responseBytes": {
+ "minimum": 28130,
+ "p50": 28130,
+ "p95": 28130,
+ "maximum": 28130
+ },
+ "localFilesWritten": 0
+ },
+ "trace": {
+ "available": true,
+ "repetitions": 5,
+ "resultCount": 3,
+ "wallMs": {
+ "minimum": 19.362,
+ "p50": 23.245,
+ "p95": 24.974,
+ "maximum": 24.974
+ },
+ "engineDurationMs": {
+ "minimum": 11,
+ "p50": 14,
+ "p95": 15,
+ "maximum": 15
+ },
+ "responseBytes": {
+ "minimum": 2293,
+ "p50": 2293,
+ "p95": 2293,
+ "maximum": 2293
+ },
+ "localFilesWritten": 0
+ }
+ },
+ "invariants": {
+ "noChangeGenerationPreserved": true,
+ "noChangeParsedFileCount": 0,
+ "noChangeLocalFilesWritten": 0,
+ "noChangeDatabaseUnchanged": true,
+ "readQueriesDatabaseUnchanged": true,
+ "oneFileParsedFileCount": 2,
+ "oneFileChangedFileCount": 1,
+ "dependencyParsedFileCount": 5,
+ "dependencyChangedFileCount": 1,
+ "finalState": "ready",
+ "finalFreshness": "current"
+ },
+ "resources": {
+ "evaluatorMaxRssKbBefore": 81120,
+ "evaluatorMaxRssKbAfter": 88688,
+ "databaseFileBytes": 3018752
+ },
+ "diagnostics": [
+ {
+ "code": "source_index_ready",
+ "count": 1
+ }
+ ],
+ "safeguards": {
+ "readOnly": true,
+ "localFilesWritten": 0,
+ "canonicalMemoryWrites": 0,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "rawSourceBodiesIncluded": false,
+ "absolutePathsIncluded": false,
+ "repairPerformed": false
+ }
+ },
+ {
+ "id": "phase3_typescript_compiler_transformers",
+ "language": "typescript",
+ "sourceClass": "real-repo",
+ "sourceRef": "corpus://cirepo_typescript_microsoft_typescript@637d5746b70257028fb95aad32ddec6b26ab0a14#src/compiler/transformers",
+ "commit": "637d5746b70257028fb95aad32ddec6b26ab0a14",
+ "graph": {
+ "fileCount": 26,
+ "nodeCount": 3829,
+ "edgeCount": 10850,
+ "unresolvedCount": 0,
+ "omittedCount": 0,
+ "databaseBytes": 19443712,
+ "activeGeneration": 3,
+ "generationCountObserved": 3
+ },
+ "operations": {
+ "coldBuild": {
+ "wallMs": 1113.945,
+ "engineDurationMs": 1078,
+ "responseBytes": 1016,
+ "parsedFileCount": 26,
+ "reusedFileCount": 0,
+ "changedFileCount": 26,
+ "deletedFileCount": 0,
+ "localFilesWritten": 1,
+ "activeGeneration": 1,
+ "state": "ready",
+ "freshness": "current"
+ },
+ "warmStatus": {
+ "wallMs": 26.54,
+ "engineDurationMs": 17,
+ "responseBytes": 1016,
+ "parsedFileCount": 0,
+ "reusedFileCount": 26,
+ "changedFileCount": 0,
+ "deletedFileCount": 0,
+ "localFilesWritten": 0,
+ "activeGeneration": 1,
+ "state": "ready",
+ "freshness": "current"
+ },
+ "noChangeRefresh": {
+ "wallMs": 44.68,
+ "engineDurationMs": 35,
+ "responseBytes": 979,
+ "parsedFileCount": 0,
+ "reusedFileCount": 26,
+ "changedFileCount": 0,
+ "deletedFileCount": 0,
+ "localFilesWritten": 0,
+ "activeGeneration": 1,
+ "state": "ready",
+ "freshness": "current"
+ },
+ "oneFileRefresh": {
+ "wallMs": 371.779,
+ "engineDurationMs": 355,
+ "responseBytes": 1017,
+ "parsedFileCount": 3,
+ "reusedFileCount": 25,
+ "changedFileCount": 1,
+ "deletedFileCount": 0,
+ "localFilesWritten": 1,
+ "activeGeneration": 2,
+ "state": "ready",
+ "freshness": "current"
+ },
+ "dependencyClosureRefresh": {
+ "wallMs": 460.801,
+ "engineDurationMs": 448,
+ "responseBytes": 1017,
+ "parsedFileCount": 3,
+ "reusedFileCount": 25,
+ "changedFileCount": 1,
+ "deletedFileCount": 0,
+ "localFilesWritten": 1,
+ "activeGeneration": 3,
+ "state": "ready",
+ "freshness": "current",
+ "preChangeImpactNodeCount": 46,
+ "postChangeSeedStillQueryable": true
+ },
+ "exactLookup": {
+ "available": true,
+ "repetitions": 5,
+ "resultCount": 2,
+ "wallMs": {
+ "minimum": 28.598,
+ "p50": 29.741,
+ "p95": 30.988,
+ "maximum": 30.988
+ },
+ "engineDurationMs": {
+ "minimum": 18,
+ "p50": 20,
+ "p95": 23,
+ "maximum": 23
+ },
+ "responseBytes": {
+ "minimum": 1353,
+ "p50": 1353,
+ "p95": 1353,
+ "maximum": 1353
+ },
+ "localFilesWritten": 0
+ },
+ "neighborhood": {
+ "available": true,
+ "repetitions": 5,
+ "resultCount": 4,
+ "wallMs": {
+ "minimum": 28.166,
+ "p50": 31.398,
+ "p95": 36.474,
+ "maximum": 36.474
+ },
+ "engineDurationMs": {
+ "minimum": 20,
+ "p50": 21,
+ "p95": 25,
+ "maximum": 25
+ },
+ "responseBytes": {
+ "minimum": 3048,
+ "p50": 3048,
+ "p95": 3048,
+ "maximum": 3048
+ },
+ "localFilesWritten": 0
+ },
+ "impact": {
+ "available": true,
+ "repetitions": 5,
+ "resultCount": 46,
+ "wallMs": {
+ "minimum": 64.99,
+ "p50": 69.618,
+ "p95": 75.327,
+ "maximum": 75.327
+ },
+ "engineDurationMs": {
+ "minimum": 56,
+ "p50": 58,
+ "p95": 61,
+ "maximum": 61
+ },
+ "responseBytes": {
+ "minimum": 26523,
+ "p50": 26523,
+ "p95": 26523,
+ "maximum": 26523
+ },
+ "localFilesWritten": 0
+ },
+ "trace": {
+ "available": true,
+ "repetitions": 5,
+ "resultCount": 3,
+ "wallMs": {
+ "minimum": 36.657,
+ "p50": 37.81,
+ "p95": 39.084,
+ "maximum": 39.084
+ },
+ "engineDurationMs": {
+ "minimum": 24,
+ "p50": 27,
+ "p95": 29,
+ "maximum": 29
+ },
+ "responseBytes": {
+ "minimum": 2553,
+ "p50": 2553,
+ "p95": 2553,
+ "maximum": 2553
+ },
+ "localFilesWritten": 0
+ }
+ },
+ "invariants": {
+ "noChangeGenerationPreserved": true,
+ "noChangeParsedFileCount": 0,
+ "noChangeLocalFilesWritten": 0,
+ "noChangeDatabaseUnchanged": true,
+ "readQueriesDatabaseUnchanged": true,
+ "oneFileParsedFileCount": 3,
+ "oneFileChangedFileCount": 1,
+ "dependencyParsedFileCount": 3,
+ "dependencyChangedFileCount": 1,
+ "finalState": "ready",
+ "finalFreshness": "current"
+ },
+ "resources": {
+ "evaluatorMaxRssKbBefore": 88688,
+ "evaluatorMaxRssKbAfter": 108304,
+ "databaseFileBytes": 19443712
+ },
+ "diagnostics": [
+ {
+ "code": "source_index_ready",
+ "count": 1
+ }
+ ],
+ "safeguards": {
+ "readOnly": true,
+ "localFilesWritten": 0,
+ "canonicalMemoryWrites": 0,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "rawSourceBodiesIncluded": false,
+ "absolutePathsIncluded": false,
+ "repairPerformed": false
+ }
+ }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "publicDefault": {
+ "engine": "js",
+ "changed": false
+ },
+ "claims": {
+ "persistentIndexLifecycleProven": true,
+ "fourteenLanguageLifecycleProven": true,
+ "multiRepository": false,
+ "millionNodeScale": false,
+ "competitorParity": false,
+ "leadership": false,
+ "reason": "Phase 3 measures a local native-preview SQLite lifecycle on one dependency fixture and three pinned repository scopes. It does not measure competitors, multi-repository indexes, packaged native binaries, or million-node scale."
+ },
+ "safeguards": {
+ "engineNetworkCalls": 0,
+ "benchmarkSetupNetworkFetches": 3,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "rawSourceStoredInReport": false,
+ "absoluteCheckoutPathsStoredInReport": false,
+ "publicDefaultChanged": false
+ },
+ "reportFingerprint": "sha256:d54187b4d6a2ec115ff76f8979b5ad8f13e909d76d18fab38824cf538dbada80"
+}
diff --git a/evals/code-intelligence/results/phase4-intelligence.json b/evals/code-intelligence/results/phase4-intelligence.json
new file mode 100644
index 00000000..b3b3bee0
--- /dev/null
+++ b/evals/code-intelligence/results/phase4-intelligence.json
@@ -0,0 +1,1360 @@
+{
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-phase4-intelligence-6",
+ "phase": 4,
+ "generatedAt": "2026-07-19T17:19:08.619Z",
+ "environment": {
+ "platform": "darwin",
+ "architecture": "arm64",
+ "nodeVersion": "v22.22.3"
+ },
+ "inputs": {
+ "fixtureRef": "fixture://sha256:af154c4a9074ac46477b7415d9e0ac1cde6c9c857d354b955161c0365244af8f",
+ "pinnedRepositories": [
+ "corpus://cirepo_javascript_expressjs_express@ae6dd37680e3a00618d6c8a3e522f0ee4eeba1a4#.",
+ "corpus://cirepo_typescript_nestjs_nest_cats_sample@7cdb8f498e7723f5e2e89b6befc693bf07f171b0#sample/01-cats-app/src",
+ "corpus://cirepo_go_gin_gonic_gin@34dac209ffb6ef85cc78c5d217bbb7ad001d68fd#."
+ ],
+ "implementationFingerprint": "sha256:d8fdea5f0eaea39901246875622d82c6d82a84a04c4b8a984d8e3984f8d923a9",
+ "repetitions": 5,
+ "queryLimit": 50,
+ "queryDeadlineMs": 2000,
+ "constrainedQuery": {
+ "kind": "dependencies",
+ "query": "GET",
+ "direction": "outbound",
+ "depth": 2,
+ "edgeKinds": [
+ "calls"
+ ],
+ "limit": 50
+ }
+ },
+ "index": {
+ "fileCount": 4,
+ "nodeCount": 21,
+ "edgeCount": 27,
+ "databaseBytes": 81920
+ },
+ "results": {
+ "communityCount": 4,
+ "processCount": 1,
+ "routeCount": 1,
+ "impactNodeCount": 5,
+ "impactRelationshipCount": 7,
+ "constrainedQueryNodeCount": 3,
+ "constrainedQueryRelationshipCount": 2,
+ "communityAlgorithm": "label-propagation-v1",
+ "processAlgorithm": "entry-path-v1",
+ "communityQueryWallMs": {
+ "minimum": 8.229,
+ "p50": 8.729,
+ "p95": 10.156,
+ "maximum": 10.156
+ },
+ "processQueryWallMs": {
+ "minimum": 10.919,
+ "p50": 11.505,
+ "p95": 13.392,
+ "maximum": 13.392
+ },
+ "routeQueryWallMs": {
+ "minimum": 7.266,
+ "p50": 8.61,
+ "p95": 10.563,
+ "maximum": 10.563
+ },
+ "impactQueryWallMs": {
+ "minimum": 8.861,
+ "p50": 10.497,
+ "p95": 13.575,
+ "maximum": 13.575
+ },
+ "searchQueryWallMs": {
+ "minimum": 7.955,
+ "p50": 10.618,
+ "p95": 10.892,
+ "maximum": 10.892
+ },
+ "constrainedQueryWallMs": {
+ "minimum": 7.27,
+ "p50": 8.763,
+ "p95": 11.946,
+ "maximum": 11.946
+ },
+ "deterministicProjectionFingerprint": "sha256:a006d4d6dd442589f42ae24cfa5d27f8b1bab56d584b530cf81a44fd8b8d251a",
+ "readQueriesPreservedIndex": true,
+ "evidenceComplete": true,
+ "representativeProcess": {
+ "processId": "ciprocess_e4062ef541bb3bc28d61cbce77397c25",
+ "entryNodeId": "cinode_0a6766c57aa6fe04016a31775a4c7c82",
+ "entryRelationshipId": "ciedge_15a63bc12c6821845cbf597d5f26dcdb",
+ "sinkNodeId": "cinode_85094285f619b36928e8e9e5b8a9415a",
+ "sinkKind": "listens",
+ "nodeIds": [
+ "cinode_0a6766c57aa6fe04016a31775a4c7c82",
+ "cinode_b1d9033581223f492d71170fff0c3e34",
+ "cinode_b5f2ec1dd78e2e5969fbdfa0253c17a3",
+ "cinode_85094285f619b36928e8e9e5b8a9415a"
+ ],
+ "relationshipIds": [
+ "ciedge_15a63bc12c6821845cbf597d5f26dcdb",
+ "ciedge_3c2f44f961a8e4b3ee861679a46599c6",
+ "ciedge_39df168f0f66d16fd2b64aca3de198f9",
+ "ciedge_24e50b0e9de3d85a7f97338820b0b48e"
+ ],
+ "confidence": 0.75,
+ "truncated": false,
+ "entryEvidence": {
+ "relationshipId": "ciedge_15a63bc12c6821845cbf597d5f26dcdb",
+ "kind": "handles_route",
+ "fromNodeId": "cinode_0a6766c57aa6fe04016a31775a4c7c82",
+ "toNodeId": "cinode_6900700ca3d90a107e36f0dac9a3397a",
+ "confidence": 0.95,
+ "resolution": "exact"
+ },
+ "executionSteps": [
+ {
+ "relationshipId": "ciedge_3c2f44f961a8e4b3ee861679a46599c6",
+ "kind": "calls",
+ "fromNodeId": "cinode_0a6766c57aa6fe04016a31775a4c7c82",
+ "toNodeId": "cinode_b1d9033581223f492d71170fff0c3e34",
+ "confidence": 0.75,
+ "resolution": "inferred"
+ },
+ {
+ "relationshipId": "ciedge_39df168f0f66d16fd2b64aca3de198f9",
+ "kind": "calls",
+ "fromNodeId": "cinode_b1d9033581223f492d71170fff0c3e34",
+ "toNodeId": "cinode_b5f2ec1dd78e2e5969fbdfa0253c17a3",
+ "confidence": 0.75,
+ "resolution": "inferred"
+ },
+ {
+ "relationshipId": "ciedge_24e50b0e9de3d85a7f97338820b0b48e",
+ "kind": "listens",
+ "fromNodeId": "cinode_b5f2ec1dd78e2e5969fbdfa0253c17a3",
+ "toNodeId": "cinode_85094285f619b36928e8e9e5b8a9415a",
+ "confidence": 1,
+ "resolution": "exact"
+ }
+ ]
+ },
+ "representativeRoute": {
+ "routeNodeId": "cinode_6900700ca3d90a107e36f0dac9a3397a",
+ "routeLabel": "GET_api_users",
+ "routeLocator": "workspace://app/api/users/route.ts#L2-L2",
+ "relationshipId": "ciedge_15a63bc12c6821845cbf597d5f26dcdb",
+ "relationshipKind": "handles_route",
+ "fromNodeId": "cinode_0a6766c57aa6fe04016a31775a4c7c82",
+ "toNodeId": "cinode_6900700ca3d90a107e36f0dac9a3397a",
+ "confidence": 0.95,
+ "resolution": "exact"
+ },
+ "representativeImpact": {
+ "seedNodeId": "cinode_b5f2ec1dd78e2e5969fbdfa0253c17a3",
+ "seedLabel": "persistUser",
+ "dependantNodeId": "cinode_b1d9033581223f492d71170fff0c3e34",
+ "dependantLabel": "handleUser",
+ "relationshipId": "ciedge_39df168f0f66d16fd2b64aca3de198f9",
+ "relationshipKind": "calls",
+ "confidence": 0.75,
+ "resolution": "inferred"
+ },
+ "representativeSearch": {
+ "exactNodeId": "cinode_b1d9033581223f492d71170fff0c3e34",
+ "exactLabel": "handleUser",
+ "lexicalNodeId": "cinode_159b08eb9c9f4fa65138f50504832dc4",
+ "lexicalLabel": "handleUserUtility",
+ "neighborNodeId": "cinode_b5f2ec1dd78e2e5969fbdfa0253c17a3",
+ "neighborLabel": "persistUser",
+ "relationshipId": "ciedge_39df168f0f66d16fd2b64aca3de198f9",
+ "relationshipKind": "calls",
+ "confidence": 0.75,
+ "locator": "workspace://app/api/users/route.ts#L3-L3"
+ },
+ "representativeConstrainedQuery": {
+ "direction": "outbound",
+ "depth": 2,
+ "edgeKinds": [
+ "calls"
+ ],
+ "nodeIds": [
+ "cinode_0a6766c57aa6fe04016a31775a4c7c82",
+ "cinode_b1d9033581223f492d71170fff0c3e34",
+ "cinode_b5f2ec1dd78e2e5969fbdfa0253c17a3"
+ ],
+ "relationships": [
+ {
+ "relationshipId": "ciedge_3c2f44f961a8e4b3ee861679a46599c6",
+ "kind": "calls",
+ "fromNodeId": "cinode_0a6766c57aa6fe04016a31775a4c7c82",
+ "toNodeId": "cinode_b1d9033581223f492d71170fff0c3e34",
+ "locator": "workspace://app/api/users/route.ts#L2-L2",
+ "confidence": 0.75,
+ "resolution": "inferred"
+ },
+ {
+ "relationshipId": "ciedge_39df168f0f66d16fd2b64aca3de198f9",
+ "kind": "calls",
+ "fromNodeId": "cinode_b1d9033581223f492d71170fff0c3e34",
+ "toNodeId": "cinode_b5f2ec1dd78e2e5969fbdfa0253c17a3",
+ "locator": "workspace://app/api/users/route.ts#L3-L3",
+ "confidence": 0.75,
+ "resolution": "inferred"
+ }
+ ],
+ "evidenceEndpointsComplete": true
+ },
+ "confidenceEvidence": {
+ "range": [
+ 0,
+ 1
+ ],
+ "routeConfidence": 0.95,
+ "impactConfidence": 0.75,
+ "processRelationshipConfidences": [
+ 0.95,
+ 0.75,
+ 0.75,
+ 1
+ ],
+ "processMinimumConfidence": 0.75,
+ "processReportedConfidence": 0.75,
+ "processUsesMinimumRelationshipConfidence": true
+ },
+ "realRepositories": [
+ {
+ "repositoryId": "cirepo_javascript_expressjs_express",
+ "sourceRef": "corpus://cirepo_javascript_expressjs_express@ae6dd37680e3a00618d6c8a3e522f0ee4eeba1a4#.",
+ "language": "javascript",
+ "acquisitionKind": "codeload-exact-commit",
+ "query": "router",
+ "index": {
+ "fileCount": 141,
+ "nodeCount": 866,
+ "edgeCount": 1327,
+ "unresolvedCount": 0,
+ "omittedCount": 0,
+ "databaseBytes": 3133440
+ },
+ "stageMs": {
+ "clone": 0.7,
+ "index": 207.2
+ },
+ "deterministic": true,
+ "pagination": {
+ "communities": {
+ "firstCursor": "idxcur_01000000000000050000000000000001",
+ "secondCursor": "idxcur_01000000000000050000000000000002",
+ "firstIds": [
+ "cicommunity_04bfdc527917032c6d3002a7e2a9ebb4"
+ ],
+ "secondIds": [
+ "cicommunity_ce9796fc2b4beda7b133f09bc44a03da"
+ ],
+ "continuous": true
+ },
+ "processes": {
+ "firstCursor": "idxcur_02000000000000050000000000000001",
+ "secondCursor": null,
+ "firstIds": [
+ "ciprocess_43fbb9f14b86a3dc1c406270e7e45c6d"
+ ],
+ "secondIds": [
+ "ciprocess_516f3d29b78829f98c9636c19cd84ea3"
+ ],
+ "continuous": true
+ },
+ "routes": {
+ "firstCursor": "idxcur_79e4a07c4aebe54a3d09b581b7a4793f",
+ "secondCursor": "idxcur_dcaaf41518fe66978a18d2aa9e5090e1",
+ "firstIds": [
+ "cinode_01635e561cf1ec5ad44dec8ee56677de",
+ "cinode_05e6145627edc9c10d3ec8622f4cd69d",
+ "cinode_06db1dd15112a88db9fc8283a6a20f28",
+ "cinode_0d89d9e019ddee200028b0e025e4f67e",
+ "cinode_14dede2061f55d19d90585a7d0d3b96b",
+ "cinode_158c65d5c17c2a4118bc7ce47b6310ef",
+ "cinode_17ce31343970b1492ecef064eec0a98a",
+ "cinode_184be5982022a8436f51679499a6f122",
+ "cinode_19ad6d38832d983c44d14a1c73f57bc3",
+ "cinode_1cb42e6fbd3d3b115d19e525f49b7652",
+ "cinode_1d412efe67b2197a2a51bfc33ba33103",
+ "cinode_299cff766729edccb8d97eb5aa134b5c",
+ "cinode_2c9f0aba10e6bbd3b99d71e425ea26c4",
+ "cinode_30b95186e3833b8caa91ab8d4abd166a",
+ "cinode_30eb7e79a3d04855a21268eba815f687",
+ "cinode_318d3dc124788d40c63a2c94fb8a2d4f",
+ "cinode_32af7c5c33bd337fd2e8d4ae2fa13e90",
+ "cinode_35172ff117abe60061734e6ab995111f",
+ "cinode_37ca9e70ab7eb99f302ee2e3ed08da89",
+ "cinode_38f86e955c249abb132503f660273dd7",
+ "cinode_3c35b4800ed4fe590802bdbd39a168a9",
+ "cinode_3ee8c0261892b187eed81d5ce00551aa",
+ "cinode_3ff58ddf6b422e0222c23b05ff61118a",
+ "cinode_3ff848b0c8793441db0ed637e87ae14c",
+ "cinode_41397b289f34871bdfdaf81ef2416f5b",
+ "cinode_41dc555c1332a0dc3b71747417072ef0",
+ "cinode_44b1ce9cedada1e76da6c92e78bc28cc",
+ "cinode_4515ff2a3416c57d240bc4fd00c5240f",
+ "cinode_451d6778afcec46fdde73449d65d20bd",
+ "cinode_4be94f462023054a1421de665160b07d",
+ "cinode_4cf44329ef3b2b2c3cea284fb4f88a13",
+ "cinode_4f4a6eba916145ca1a9cb288930aefa6",
+ "cinode_4feae1ec7b6174218fb9eb9afc73b90b",
+ "cinode_51156846db2dafde59705be2d3bdd7e4",
+ "cinode_52144097330718673cc13f0bbb1814ce",
+ "cinode_531f0017ccb8353b383cfa3aae84abd6",
+ "cinode_55e5e4d990904b2d7d1b0bef1b1f95f1",
+ "cinode_568279b1f73cad7756326ba1f55a9b1a",
+ "cinode_5723d410ee6e9206601d8ac5821cc07f",
+ "cinode_5cc6db44ff17e5794ea962e159086737",
+ "cinode_5e74debb3683341a0d6cb4c7e119e417",
+ "cinode_6111e387c8bcf9d0816a5bf914df3641",
+ "cinode_61340ff0655cb062efb5d35d4b422346",
+ "cinode_61738ae7330da75113327d9fb685a18c",
+ "cinode_62805e712b847f31a34c64819c89bb9f",
+ "cinode_63dda9bfb128dc2e5ce61e93e0773ca3",
+ "cinode_67ba852b5880d195d5c3cc523ace4516",
+ "cinode_703816f2e649fd00ee01f55a3e50e6ff",
+ "cinode_79b3e2f9a37470c035f4b79a79f3c712",
+ "cinode_79e4a07c4aebe54a3d09b581b7a4793f"
+ ],
+ "secondIds": [
+ "cinode_7a2a9d9de53da9a0d0a1709b37ff442f",
+ "cinode_7ade510ee07b237e384c89d23751d832",
+ "cinode_7e4b32c810670dd5eca6b4508b888cc9",
+ "cinode_836b0f4632d4e746a650055b91566dd0",
+ "cinode_8389c2cfa395258969dc37ef09623745",
+ "cinode_84ecf4c77f65e9517a29d1c24a26baaf",
+ "cinode_8cc727d250cbda3c5cccbf985edbbc27",
+ "cinode_9056a67efe740788f2d659e1ef83510f",
+ "cinode_927d2bc0982d107c396ef7188c79a8b1",
+ "cinode_961cd95933187202ae195e6287f121cf",
+ "cinode_979e1198d9da20885eae066c4a6c2bef",
+ "cinode_97adfb7bcfbb0a1cc62f3778d2d4f2c1",
+ "cinode_9b08c851fa082a8f3bbc0c5910040770",
+ "cinode_9fb13f842c68281001b46c21550b6ffa",
+ "cinode_a33c7d518ae3a9029f8ef571eb62d5b1",
+ "cinode_a348352ac5a6c91913ce7bb7a203f8bd",
+ "cinode_a3df400c5c525a0ed4cd482d43be587e",
+ "cinode_a87f512dcc210dae68ae24937dd5a29c",
+ "cinode_ace04a65065ab56ec23cea8aae5238bf",
+ "cinode_ada90bce6189afe34a6016d7da0a5dca",
+ "cinode_b19822115121ee9607ac82f9c87b52a9",
+ "cinode_b1fc7c59a0a8177b8143e705c27b7322",
+ "cinode_b33f1418e26b74a7c5fad92e5a2caeaa",
+ "cinode_b528e46f55a183e6b8440f16e730c79a",
+ "cinode_b5342696b547658af0efb74f97738747",
+ "cinode_b5d591c05b50788cb5503a942a049726",
+ "cinode_b95ae9e2e0a31c4a810dd473787a91a9",
+ "cinode_ba4a0ab5ce4113c8219377b100fb3937",
+ "cinode_c1779480ea33977f64296f86b5b8d780",
+ "cinode_c1b919a4c20f180627659d551e26d7a1",
+ "cinode_c383c7c393972d22bc0bcee6a48fcabd",
+ "cinode_c4b12ba4fbaad4ae94e2b8b052bcd26b",
+ "cinode_c545011d9c823a9038da2dab0239869e",
+ "cinode_c5544a9cba517c352c95ec53ccc651a1",
+ "cinode_c5b9432447f211dbf77dc394b6822df2",
+ "cinode_c843fa28d18c7bf0ff0db95bd6d49b48",
+ "cinode_c8ea3a5c2fdcff25ff196ea8e2e2ef46",
+ "cinode_c9202622c52f6b5a87cb0b0f190bf726",
+ "cinode_ca621b53de10afbbfa76927447dbb1b9",
+ "cinode_cb9a3d1cac4924cf859c80dbfd891e70",
+ "cinode_ccfe5161b5bc3097d1ffb8c6c49c9b16",
+ "cinode_d06ac1a4237d7fdf533d0ce53e24b48e",
+ "cinode_d0adfe786fef4e41fe32e00edb783698",
+ "cinode_d3156f2b7ce9f6665964374ee97e468b",
+ "cinode_d547cd763dd1b156107736af90bcd12e",
+ "cinode_d7f749fa66b71557181d0091fc7b52bd",
+ "cinode_d9ac8d5017d40798753e219847177ea9",
+ "cinode_dc7bd34fdb51eaabb4f9e9be2de49831",
+ "cinode_dc8464dba1e06687ad2dd2918eca5568",
+ "cinode_dcaaf41518fe66978a18d2aa9e5090e1"
+ ],
+ "continuous": true
+ },
+ "search": {
+ "firstCursor": "idxcur_c843fa28d18c7bf0ff0db95bd6d49b48",
+ "secondCursor": null,
+ "firstIds": [
+ "cinode_7b4f936297a554beba91dcf0ed7c08e1",
+ "cinode_0b44ce91475fbf78f2374cc660d1744f",
+ "cinode_0ba52de902f1744f0da506d3c2726d17",
+ "cinode_0d89d9e019ddee200028b0e025e4f67e",
+ "cinode_126ca9365a6ec3a9d0f1cb3874981760",
+ "cinode_146904c04f04e60f85d1c9a097bdbe18",
+ "cinode_158c65d5c17c2a4118bc7ce47b6310ef",
+ "cinode_1748e1f23b64c6a9bc459da29ee145c9",
+ "cinode_1cb42e6fbd3d3b115d19e525f49b7652",
+ "cinode_1cf7ad52e786ecc1f71072352cbdfd59",
+ "cinode_1d412efe67b2197a2a51bfc33ba33103",
+ "cinode_26a4fa462044b5118d473fff684285d6",
+ "cinode_2c5faffa221dc7371ab6dfd50ff53f35",
+ "cinode_2c9f0aba10e6bbd3b99d71e425ea26c4",
+ "cinode_30b95186e3833b8caa91ab8d4abd166a",
+ "cinode_32af7c5c33bd337fd2e8d4ae2fa13e90",
+ "cinode_336ac6a017c192419c32c61704c66d75",
+ "cinode_34b64700443b236fdf16793665a7add9",
+ "cinode_38f86e955c249abb132503f660273dd7",
+ "cinode_3e7677a52f7bae67212c42215b194855",
+ "cinode_3ff58ddf6b422e0222c23b05ff61118a",
+ "cinode_451d6778afcec46fdde73449d65d20bd",
+ "cinode_4756569fe7a8b407df176696e94cbb74",
+ "cinode_4be94f462023054a1421de665160b07d",
+ "cinode_51156846db2dafde59705be2d3bdd7e4",
+ "cinode_531f0017ccb8353b383cfa3aae84abd6",
+ "cinode_55e5e4d990904b2d7d1b0bef1b1f95f1",
+ "cinode_568279b1f73cad7756326ba1f55a9b1a",
+ "cinode_5c0c5c731c06c411d0f2a703d179cae2",
+ "cinode_6348561773a54ef98d466c1351fe3dd0",
+ "cinode_65ed3009f15008e84fbb4a1f58a540a2",
+ "cinode_6dd82882a29e976a144a5f5f27ef1de4",
+ "cinode_7208ceeeebded5ed0fa4c70726362663",
+ "cinode_7456a917fd6ad7b9f486882f3b1fb784",
+ "cinode_7ade510ee07b237e384c89d23751d832",
+ "cinode_7db4eb249af548d31cba2b81bd24d657",
+ "cinode_836b0f4632d4e746a650055b91566dd0",
+ "cinode_8420ed3a4da495ac81ce9cf88ad78083",
+ "cinode_9b4ad2cc8666d1d95113ac36d01bc606",
+ "cinode_a348352ac5a6c91913ce7bb7a203f8bd",
+ "cinode_a78c1a98f71238aa2a5b3484eb8ff2f6",
+ "cinode_aa8862c8ba4129f1a497b0610b753c1d",
+ "cinode_c1779480ea33977f64296f86b5b8d780",
+ "cinode_c1b919a4c20f180627659d551e26d7a1",
+ "cinode_c316a6f23e97bab613504b26849d1641",
+ "cinode_c383c7c393972d22bc0bcee6a48fcabd",
+ "cinode_c4b12ba4fbaad4ae94e2b8b052bcd26b",
+ "cinode_c5b9432447f211dbf77dc394b6822df2",
+ "cinode_c745d29aa801218f3f0750ec8d504a2d",
+ "cinode_c843fa28d18c7bf0ff0db95bd6d49b48"
+ ],
+ "secondIds": [
+ "cinode_c9294d2ad32d1eb02212f6c5bbbc7604",
+ "cinode_ccfe5161b5bc3097d1ffb8c6c49c9b16",
+ "cinode_d06ac1a4237d7fdf533d0ce53e24b48e",
+ "cinode_d547cd763dd1b156107736af90bcd12e",
+ "cinode_e1db6396efd8a4ae2e56e2a9313e08d7",
+ "cinode_e291473a52b48dbb7e8501923f630aec",
+ "cinode_e84e9ef26a8eba89e8a6d8f7998dff6a",
+ "cinode_ec8492b5f8565d96f98929506a5e72db",
+ "cinode_f1cf45247297bea526c872b1befd8c18",
+ "cinode_f21ffe567d1b12173fc9aa8451b91edf",
+ "cinode_f4ffc26771708f68ca2789d8989b71e5",
+ "cinode_f6f1b4600e5384901bc2885b33853b44",
+ "cinode_f94c1bd1f0e486ee3908a0c2dfef40d3"
+ ],
+ "continuous": true
+ }
+ },
+ "queries": {
+ "communities": {
+ "wallMs": {
+ "minimum": 32.676,
+ "p50": 37.11,
+ "p95": 43.58,
+ "maximum": 43.58
+ },
+ "resultCount": 100,
+ "locatedResultCount": 100,
+ "relationshipCount": 100,
+ "evidenceRelationshipCount": 100,
+ "minimumRelationshipConfidence": 0.75,
+ "communityCount": 1,
+ "processCount": 0,
+ "processEvidenceCount": 0,
+ "minimumProcessConfidence": null,
+ "truncated": true,
+ "deadlineMs": 2000,
+ "deadlineMet": true,
+ "deliveredBytes": 63308,
+ "deliveredTokensEstimate": 15827,
+ "nextCursor": "idxcur_01000000000000050000000000000001",
+ "representative": "cinode_0378da1f6bfadd20b01b1e7b9a971686"
+ },
+ "processes": {
+ "wallMs": {
+ "minimum": 20.485,
+ "p50": 24.047,
+ "p95": 25.545,
+ "maximum": 25.545
+ },
+ "resultCount": 4,
+ "locatedResultCount": 4,
+ "relationshipCount": 3,
+ "evidenceRelationshipCount": 3,
+ "minimumRelationshipConfidence": 0.75,
+ "communityCount": 0,
+ "processCount": 1,
+ "processEvidenceCount": 1,
+ "minimumProcessConfidence": 0.75,
+ "truncated": true,
+ "deadlineMs": 2000,
+ "deadlineMet": true,
+ "deliveredBytes": 3463,
+ "deliveredTokensEstimate": 866,
+ "nextCursor": "idxcur_02000000000000050000000000000001",
+ "representative": "cinode_0cb8000898fa010d505e94630c8ec314"
+ },
+ "routes": {
+ "wallMs": {
+ "minimum": 22.584,
+ "p50": 22.716,
+ "p95": 35.908,
+ "maximum": 35.908
+ },
+ "resultCount": 50,
+ "locatedResultCount": 50,
+ "relationshipCount": 1,
+ "evidenceRelationshipCount": 1,
+ "minimumRelationshipConfidence": 0.95,
+ "communityCount": 0,
+ "processCount": 0,
+ "processEvidenceCount": 0,
+ "minimumProcessConfidence": null,
+ "truncated": true,
+ "deadlineMs": 2000,
+ "deadlineMet": true,
+ "deliveredBytes": 10054,
+ "deliveredTokensEstimate": 2514,
+ "nextCursor": "idxcur_79e4a07c4aebe54a3d09b581b7a4793f",
+ "representative": "cinode_01635e561cf1ec5ad44dec8ee56677de"
+ },
+ "impact": {
+ "wallMs": {
+ "minimum": 18.394,
+ "p50": 18.865,
+ "p95": 19.542,
+ "maximum": 19.542
+ },
+ "resultCount": 13,
+ "locatedResultCount": 13,
+ "relationshipCount": 13,
+ "evidenceRelationshipCount": 13,
+ "minimumRelationshipConfidence": 0.75,
+ "communityCount": 0,
+ "processCount": 0,
+ "processEvidenceCount": 0,
+ "minimumProcessConfidence": null,
+ "truncated": false,
+ "deadlineMs": 2000,
+ "deadlineMet": true,
+ "deliveredBytes": 8034,
+ "deliveredTokensEstimate": 2009,
+ "nextCursor": null,
+ "representative": "cinode_17d0ff9a791f9e19c5ca0503b3cf94bc"
+ },
+ "search": {
+ "wallMs": {
+ "minimum": 18.211,
+ "p50": 18.478,
+ "p95": 18.751,
+ "maximum": 18.751
+ },
+ "resultCount": 50,
+ "locatedResultCount": 50,
+ "relationshipCount": 0,
+ "evidenceRelationshipCount": 0,
+ "minimumRelationshipConfidence": null,
+ "communityCount": 0,
+ "processCount": 0,
+ "processEvidenceCount": 0,
+ "minimumProcessConfidence": null,
+ "truncated": true,
+ "deadlineMs": 2000,
+ "deadlineMet": true,
+ "deliveredBytes": 9818,
+ "deliveredTokensEstimate": 2455,
+ "nextCursor": "idxcur_c843fa28d18c7bf0ff0db95bd6d49b48",
+ "representative": "cinode_7b4f936297a554beba91dcf0ed7c08e1"
+ },
+ "dependencies": {
+ "wallMs": {
+ "minimum": 17.614,
+ "p50": 17.881,
+ "p95": 18.577,
+ "maximum": 18.577
+ },
+ "resultCount": 16,
+ "locatedResultCount": 16,
+ "relationshipCount": 27,
+ "evidenceRelationshipCount": 27,
+ "minimumRelationshipConfidence": 0.25,
+ "communityCount": 0,
+ "processCount": 0,
+ "processEvidenceCount": 0,
+ "minimumProcessConfidence": null,
+ "truncated": false,
+ "deadlineMs": 2000,
+ "deadlineMet": true,
+ "deliveredBytes": 13197,
+ "deliveredTokensEstimate": 3300,
+ "nextCursor": null,
+ "representative": "cinode_0beb76c273c6d8d8d4a04772ecfdb13b"
+ },
+ "safeQuery": {
+ "wallMs": {
+ "minimum": 17.231,
+ "p50": 17.543,
+ "p95": 18.111,
+ "maximum": 18.111
+ },
+ "resultCount": 2,
+ "locatedResultCount": 2,
+ "relationshipCount": 1,
+ "evidenceRelationshipCount": 1,
+ "minimumRelationshipConfidence": 0.95,
+ "communityCount": 0,
+ "processCount": 0,
+ "processEvidenceCount": 0,
+ "minimumProcessConfidence": null,
+ "truncated": false,
+ "deadlineMs": 2000,
+ "deadlineMet": true,
+ "deliveredBytes": 1727,
+ "deliveredTokensEstimate": 432,
+ "nextCursor": null,
+ "representative": "cinode_3ff58ddf6b422e0222c23b05ff61118a"
+ },
+ "trace": {
+ "wallMs": {
+ "minimum": 20.364,
+ "p50": 20.392,
+ "p95": 20.535,
+ "maximum": 20.535
+ },
+ "resultCount": 2,
+ "locatedResultCount": 2,
+ "relationshipCount": 1,
+ "evidenceRelationshipCount": 1,
+ "minimumRelationshipConfidence": 0.95,
+ "communityCount": 0,
+ "processCount": 0,
+ "processEvidenceCount": 0,
+ "minimumProcessConfidence": null,
+ "truncated": false,
+ "deadlineMs": 2000,
+ "deadlineMet": true,
+ "deliveredBytes": 1727,
+ "deliveredTokensEstimate": 432,
+ "nextCursor": null,
+ "representative": "cinode_3ff58ddf6b422e0222c23b05ff61118a"
+ }
+ }
+ },
+ {
+ "repositoryId": "cirepo_typescript_nestjs_nest_cats_sample",
+ "sourceRef": "corpus://cirepo_typescript_nestjs_nest_cats_sample@7cdb8f498e7723f5e2e89b6befc693bf07f171b0#sample/01-cats-app/src",
+ "language": "typescript",
+ "acquisitionKind": "github-contents-exact-scope",
+ "query": "cats",
+ "index": {
+ "fileCount": 20,
+ "nodeCount": 143,
+ "edgeCount": 193,
+ "unresolvedCount": 0,
+ "omittedCount": 0,
+ "databaseBytes": 569344
+ },
+ "stageMs": {
+ "clone": 0.3,
+ "index": 26.5
+ },
+ "deterministic": true,
+ "pagination": {
+ "communities": {
+ "firstCursor": "idxcur_01000000000000050000000000000001",
+ "secondCursor": "idxcur_01000000000000050000000000000002",
+ "firstIds": [
+ "cicommunity_78b6ee37571b9136fe9164a654be2ebb"
+ ],
+ "secondIds": [
+ "cicommunity_f1eb6f6eed7379f9d2715946e97e0589"
+ ],
+ "continuous": true
+ },
+ "processes": {
+ "firstCursor": "idxcur_02000000000000050000000000000001",
+ "secondCursor": null,
+ "firstIds": [
+ "ciprocess_57696fa402005ab6d7c1a9e74f0f29d3"
+ ],
+ "secondIds": [
+ "ciprocess_8d1a62cec7cd0f87a1674fce433a9364"
+ ],
+ "continuous": true
+ }
+ },
+ "queries": {
+ "communities": {
+ "wallMs": {
+ "minimum": 10.262,
+ "p50": 10.906,
+ "p95": 11.6,
+ "maximum": 11.6
+ },
+ "resultCount": 64,
+ "locatedResultCount": 64,
+ "relationshipCount": 100,
+ "evidenceRelationshipCount": 100,
+ "minimumRelationshipConfidence": 0.25,
+ "communityCount": 1,
+ "processCount": 0,
+ "processEvidenceCount": 0,
+ "minimumProcessConfidence": null,
+ "truncated": true,
+ "deadlineMs": 2000,
+ "deadlineMet": true,
+ "deliveredBytes": 56995,
+ "deliveredTokensEstimate": 14249,
+ "nextCursor": "idxcur_01000000000000050000000000000001",
+ "representative": "cinode_01911b19660d26959a8efd3d1cfce814"
+ },
+ "processes": {
+ "wallMs": {
+ "minimum": 7.701,
+ "p50": 8.075,
+ "p95": 10.061,
+ "maximum": 10.061
+ },
+ "resultCount": 2,
+ "locatedResultCount": 2,
+ "relationshipCount": 1,
+ "evidenceRelationshipCount": 1,
+ "minimumRelationshipConfidence": 0.95,
+ "communityCount": 0,
+ "processCount": 1,
+ "processEvidenceCount": 1,
+ "minimumProcessConfidence": 0.95,
+ "truncated": true,
+ "deadlineMs": 2000,
+ "deadlineMet": true,
+ "deliveredBytes": 2297,
+ "deliveredTokensEstimate": 575,
+ "nextCursor": "idxcur_02000000000000050000000000000001",
+ "representative": "cinode_452fbb842e33ecd4762d9cc29e1f3dcc"
+ },
+ "routes": {
+ "wallMs": {
+ "minimum": 7.871,
+ "p50": 8.417,
+ "p95": 8.723,
+ "maximum": 8.723
+ },
+ "resultCount": 1,
+ "locatedResultCount": 1,
+ "relationshipCount": 2,
+ "evidenceRelationshipCount": 2,
+ "minimumRelationshipConfidence": 0.95,
+ "communityCount": 0,
+ "processCount": 0,
+ "processEvidenceCount": 0,
+ "minimumProcessConfidence": null,
+ "truncated": false,
+ "deadlineMs": 2000,
+ "deadlineMet": true,
+ "deliveredBytes": 1922,
+ "deliveredTokensEstimate": 481,
+ "nextCursor": null,
+ "representative": "cinode_452fbb842e33ecd4762d9cc29e1f3dcc"
+ },
+ "impact": {
+ "wallMs": {
+ "minimum": 8.556,
+ "p50": 8.906,
+ "p95": 9.089,
+ "maximum": 9.089
+ },
+ "resultCount": 13,
+ "locatedResultCount": 13,
+ "relationshipCount": 18,
+ "evidenceRelationshipCount": 18,
+ "minimumRelationshipConfidence": 0.75,
+ "communityCount": 0,
+ "processCount": 0,
+ "processEvidenceCount": 0,
+ "minimumProcessConfidence": null,
+ "truncated": false,
+ "deadlineMs": 2000,
+ "deadlineMet": true,
+ "deliveredBytes": 9817,
+ "deliveredTokensEstimate": 2455,
+ "nextCursor": null,
+ "representative": "cinode_0e7c6bbf03532714596098940f855246"
+ },
+ "search": {
+ "wallMs": {
+ "minimum": 9.491,
+ "p50": 9.889,
+ "p95": 9.958,
+ "maximum": 9.958
+ },
+ "resultCount": 43,
+ "locatedResultCount": 43,
+ "relationshipCount": 7,
+ "evidenceRelationshipCount": 7,
+ "minimumRelationshipConfidence": 0.75,
+ "communityCount": 0,
+ "processCount": 0,
+ "processEvidenceCount": 0,
+ "minimumProcessConfidence": null,
+ "truncated": false,
+ "deadlineMs": 2000,
+ "deadlineMet": true,
+ "deliveredBytes": 11223,
+ "deliveredTokensEstimate": 2806,
+ "nextCursor": null,
+ "representative": "cinode_0e7c6bbf03532714596098940f855246"
+ },
+ "dependencies": {
+ "wallMs": {
+ "minimum": 7.606,
+ "p50": 7.992,
+ "p95": 8.265,
+ "maximum": 8.265
+ },
+ "resultCount": 3,
+ "locatedResultCount": 3,
+ "relationshipCount": 2,
+ "evidenceRelationshipCount": 2,
+ "minimumRelationshipConfidence": 0.25,
+ "communityCount": 0,
+ "processCount": 0,
+ "processEvidenceCount": 0,
+ "minimumProcessConfidence": null,
+ "truncated": false,
+ "deadlineMs": 2000,
+ "deadlineMet": true,
+ "deliveredBytes": 2258,
+ "deliveredTokensEstimate": 565,
+ "nextCursor": null,
+ "representative": "cinode_452fbb842e33ecd4762d9cc29e1f3dcc"
+ },
+ "safeQuery": {
+ "wallMs": {
+ "minimum": 7.769,
+ "p50": 8.106,
+ "p95": 8.202,
+ "maximum": 8.202
+ },
+ "resultCount": 2,
+ "locatedResultCount": 2,
+ "relationshipCount": 1,
+ "evidenceRelationshipCount": 1,
+ "minimumRelationshipConfidence": 0.95,
+ "communityCount": 0,
+ "processCount": 0,
+ "processEvidenceCount": 0,
+ "minimumProcessConfidence": null,
+ "truncated": false,
+ "deadlineMs": 2000,
+ "deadlineMet": true,
+ "deliveredBytes": 1728,
+ "deliveredTokensEstimate": 432,
+ "nextCursor": null,
+ "representative": "cinode_452fbb842e33ecd4762d9cc29e1f3dcc"
+ },
+ "trace": {
+ "wallMs": {
+ "minimum": 8.238,
+ "p50": 8.335,
+ "p95": 8.691,
+ "maximum": 8.691
+ },
+ "resultCount": 2,
+ "locatedResultCount": 2,
+ "relationshipCount": 1,
+ "evidenceRelationshipCount": 1,
+ "minimumRelationshipConfidence": 0.95,
+ "communityCount": 0,
+ "processCount": 0,
+ "processEvidenceCount": 0,
+ "minimumProcessConfidence": null,
+ "truncated": false,
+ "deadlineMs": 2000,
+ "deadlineMet": true,
+ "deliveredBytes": 1728,
+ "deliveredTokensEstimate": 432,
+ "nextCursor": null,
+ "representative": "cinode_452fbb842e33ecd4762d9cc29e1f3dcc"
+ }
+ }
+ },
+ {
+ "repositoryId": "cirepo_go_gin_gonic_gin",
+ "sourceRef": "corpus://cirepo_go_gin_gonic_gin@34dac209ffb6ef85cc78c5d217bbb7ad001d68fd#.",
+ "language": "go",
+ "acquisitionKind": "codeload-exact-commit",
+ "query": "GET",
+ "index": {
+ "fileCount": 99,
+ "nodeCount": 3654,
+ "edgeCount": 13406,
+ "unresolvedCount": 0,
+ "omittedCount": 0,
+ "databaseBytes": 23404544
+ },
+ "stageMs": {
+ "clone": 0.2,
+ "index": 1174.2
+ },
+ "deterministic": true,
+ "pagination": {
+ "communities": {
+ "firstCursor": "idxcur_01000000000000050000000000000001",
+ "secondCursor": "idxcur_01000000000000050000000000000002",
+ "firstIds": [
+ "cicommunity_5e29536b693bb51d359b3ccc893d38aa"
+ ],
+ "secondIds": [
+ "cicommunity_08d0aad802114f7c2871c94fbf60382e"
+ ],
+ "continuous": true
+ },
+ "processes": {
+ "firstCursor": "idxcur_02000000000000050000000000000001",
+ "secondCursor": "idxcur_02000000000000050000000000000002",
+ "firstIds": [
+ "ciprocess_c91901b93b627cc717d33cad02653203"
+ ],
+ "secondIds": [
+ "ciprocess_f03298673a06c854e93c70351ff269c9"
+ ],
+ "continuous": true
+ },
+ "routes": {
+ "firstCursor": "idxcur_6bd95ba9e00f8b374677f2eda6ac07c0",
+ "secondCursor": "idxcur_defbe9f7c515fed52b180062d3092837",
+ "firstIds": [
+ "cinode_0489d38ddca298b56649894d3415a024",
+ "cinode_06e7ba93ac4047a04d07ba735eb5038b",
+ "cinode_07957650448ef6a42dbad072784a0311",
+ "cinode_0ad2b550ceccaa4fb8c3277e1589cf8d",
+ "cinode_0df779860af17b2a6942827503c61f0c",
+ "cinode_0e87ed550517f165ae7f2dd99194d1c0",
+ "cinode_0e8c325aae50997e8236ed9e03ffc0db",
+ "cinode_11d83487ce6a8513dc69d52598a28872",
+ "cinode_177744669b5a79cb4b3f1e8285f0b571",
+ "cinode_1811ae38fc564658ed643f5767ea05bc",
+ "cinode_1ab77f6354c50d57d68ce9f378a5fba8",
+ "cinode_24723199c79066303e59511be7d0caf3",
+ "cinode_262bbae724f99c6060c354bdfa4f84ec",
+ "cinode_28cd28d60e68176baed03a9339ca62e7",
+ "cinode_2d2d40c2f77a74d3a811396eae246952",
+ "cinode_2ef4073f17e7235b96c7b8cb8cb53e1c",
+ "cinode_2fd42cae3f4046d77d8bf01007374b79",
+ "cinode_2fd7855e38e152ad1c2118bf609ab04c",
+ "cinode_2fd8247fc80608c4aca66b675a321a2b",
+ "cinode_303d83f47e4d6e00654cc18a3d2da785",
+ "cinode_30486b46452ce9784c5769e673195c53",
+ "cinode_319c34550bd1787f221eb5404f9632a7",
+ "cinode_31a3722ce7afc20e35212cf68e626cf5",
+ "cinode_327911848628ac985eff79567f24c3b9",
+ "cinode_32b83b701971ee09c90f3c84d513edb1",
+ "cinode_33a6f4483b9978e77cc5b0fde2cb9e30",
+ "cinode_35468d04a3c5ef5f789847dbb1809919",
+ "cinode_3814e9592b2fb570dad351758e9e4e00",
+ "cinode_3900d2c601eaf1e5d1dcb30d8f221051",
+ "cinode_3a2ac3efb820e0f7c4bee921c5cbff94",
+ "cinode_4370ccd2ddfa404c3e7be72d3f9481e5",
+ "cinode_43cb427fcc0397f9d9f9475d82f98f7d",
+ "cinode_43ec0b9a756308ebfe25de7b40583a8e",
+ "cinode_4621607fc85ba9e42a5191331f8bc031",
+ "cinode_46cfc20a6b9c56f70cb214eb009d8f70",
+ "cinode_4b53b2b1bb4065a0d8f249fa6498ac6e",
+ "cinode_4b967f0b1e2c1f59d988efca87e6f7ca",
+ "cinode_4e8f331784fe1f3ea1bfc3f491da01a0",
+ "cinode_4f9553f4123185396b06849a1e2d6554",
+ "cinode_4fac2a94d7e796ffab9fc2bccddfc902",
+ "cinode_54f260dd0d7d2947ceceab7ceab422fa",
+ "cinode_57082e7e491f6e640725561592fc7071",
+ "cinode_5926407fad73bd0db550ec31939afab9",
+ "cinode_5ce13898ec4fcaace75dab936dbc9118",
+ "cinode_5df646449f000016aea7b4f27e29152c",
+ "cinode_6033bb0404fb7191b00b2999422308a1",
+ "cinode_645e5ebca1e32c4eb3541fb5a222bf79",
+ "cinode_666f59c93db4f04ac117068dfca31c29",
+ "cinode_69131c3fc020315f2b96036612ec073c",
+ "cinode_6bd95ba9e00f8b374677f2eda6ac07c0"
+ ],
+ "secondIds": [
+ "cinode_6ccded9dd8c8dcadb096c594a3eecc36",
+ "cinode_6e8cf364880747f47fffe0ad8467120b",
+ "cinode_6ef8f92f018917485d8b3f3bf718869b",
+ "cinode_6f5ed99f2d0ea1f1b78ce7991479b633",
+ "cinode_7257ae52b2e916757f8fae31542f4fe0",
+ "cinode_740e4a3ebb13aa777662feaa73902659",
+ "cinode_74b27f398ef26d5b2abff4b6c1ded144",
+ "cinode_76614c28646cacf2611217307a516e63",
+ "cinode_7802f29ef18edbfa6621118c949d9287",
+ "cinode_78209237520f95cd6e16dfedf0e0750a",
+ "cinode_78de84fe7dd0f89e7768a14f3fc886ce",
+ "cinode_7f9fb15362ce526a3e21847d63b55d19",
+ "cinode_800533eb46c81824771be320d378f2f8",
+ "cinode_81130791c91c22f2bbb6f1adad57c5ef",
+ "cinode_85fec4a2f532e1fdd735d7e8407d8324",
+ "cinode_87ce99eb02e08701ab6f7e9e142ae568",
+ "cinode_89eecab509a7b0c345e93d650047a439",
+ "cinode_8befce6b9b89ef43db09c37319e44266",
+ "cinode_8f89335506ba90d886a8cf35d8513217",
+ "cinode_8fb6270a5441a791636760c39530f360",
+ "cinode_8fe94f931db04de7682118d81b6e7e86",
+ "cinode_90b7a388c63a30459d020f30a2d81341",
+ "cinode_924a39a21e1a5b9b5eaaff004b4799c2",
+ "cinode_96ea3d2af92a324cc361f722ef062921",
+ "cinode_a10f1c4c281857d3c7f36d0e34ab0be7",
+ "cinode_a2ab081db871c90c0fe4bf88d524e4d8",
+ "cinode_a57968f7d0bdf8c02369c2dda5dd040f",
+ "cinode_a5aacaa2c429c22d9b4272ecb81f2fb5",
+ "cinode_aa9021dc1074583d2acee7d3aa723429",
+ "cinode_aae169340a0ac3e273e44b51f65fef30",
+ "cinode_b05cb0b0f7a4f60923a288e99368b909",
+ "cinode_b06439a3be0f8b9f67cb1e59e3168214",
+ "cinode_b50e4a79b34ade3bbe98fe3387a79ab2",
+ "cinode_b59c39c0241ca31cda89d9f0a11eb334",
+ "cinode_bc5ef073e2c91544b493f12e84e9e190",
+ "cinode_bff62088cdd4aecceae98962a54a54b5",
+ "cinode_c1c05676a1707fcc77b4412c51abb0e5",
+ "cinode_c5380cd72bee5492aa37567b7badf002",
+ "cinode_c7ade319b878522dc1471060b450b4cf",
+ "cinode_cf4a91605c6e307a248e8708440bf418",
+ "cinode_d19e8959d7c3e4ebb7e3f76c3a63308f",
+ "cinode_d21aa8b9606609dfa02ad6eeb27065e1",
+ "cinode_d27905b3d15c688ab0aca0dcad7f4ee0",
+ "cinode_d69afc3966e5b06d57acd5358f1163e9",
+ "cinode_d6b27d70b01f86133754d1ebe9db7e4c",
+ "cinode_d8989052b6888c8eb46e47cb86d12cc3",
+ "cinode_d8d4b9b9ab77aea7a9d30af47ab0706d",
+ "cinode_ddff666ea466c985e49115445582a876",
+ "cinode_dee1761f7f0ba762e90ce84deda2b7b2",
+ "cinode_defbe9f7c515fed52b180062d3092837"
+ ],
+ "continuous": true
+ },
+ "search": {
+ "firstCursor": "idxcur_2f5e5a66a6ff671c26c874fc2b2374d3",
+ "secondCursor": "idxcur_599e6e2649384480495061c86a2f391a",
+ "firstIds": [
+ "cinode_13e4297cd1d3e24814e41b523fa59644",
+ "cinode_001290994686b1db518808b167fae09d",
+ "cinode_03f6e327755ae954f81fcf3d143ff635",
+ "cinode_06e7ba93ac4047a04d07ba735eb5038b",
+ "cinode_07dfd4647ec65bf7522ee55048ddba79",
+ "cinode_0a0e73cf9583360a770db81b65e93796",
+ "cinode_0ad2b550ceccaa4fb8c3277e1589cf8d",
+ "cinode_0c13eb5a7cc2b512ee9a4cdb83284266",
+ "cinode_0c5cf5b028ec070a52d177097d5b3258",
+ "cinode_0ce3bdad8b6434ac134f695319086ecc",
+ "cinode_0df779860af17b2a6942827503c61f0c",
+ "cinode_0e87ed550517f165ae7f2dd99194d1c0",
+ "cinode_0e8c325aae50997e8236ed9e03ffc0db",
+ "cinode_0ec191156a38a4a02dcddd83434cb6e2",
+ "cinode_0f3e14093102421cd1ed0fdc27313325",
+ "cinode_107764c0b1efe434fe4a49be7448fa2f",
+ "cinode_10f0cd6b30977e82b2436d75e069d763",
+ "cinode_1136d1a8b2b6d17c72d3d566058aa61f",
+ "cinode_11d83487ce6a8513dc69d52598a28872",
+ "cinode_12c4584f50a5e4cbdadae72ef0205070",
+ "cinode_13702122c409aa12f66a86cbd20fc955",
+ "cinode_141c85d43483086c3f47dbcfc4519853",
+ "cinode_14e60106470f6d281db8f58ba8811d66",
+ "cinode_158e5f23413596558d5b07c924a93042",
+ "cinode_16ce28b2defe1124f38af3f2a75ba01a",
+ "cinode_177744669b5a79cb4b3f1e8285f0b571",
+ "cinode_17b4acedf4707f007a8d9d0e8d6c54a8",
+ "cinode_182cda70368d6cdcd33f91ac54c114b7",
+ "cinode_1992d3e56d3f53434760aa86136eb425",
+ "cinode_1a21530d83f4fa008dd26361442832c7",
+ "cinode_1ab77f6354c50d57d68ce9f378a5fba8",
+ "cinode_1bcaf9d2331fed56acfbcb9e77bb8f14",
+ "cinode_1c44ef012f278e45b0e4e520cfbfdda6",
+ "cinode_1e5ad67226b173784fe80b50f56d8de1",
+ "cinode_1f552622ff68d75dbe4e2e0078c73abf",
+ "cinode_1f656987f49c978c76059f00314fff2d",
+ "cinode_1fd4f945511712f2afa33890d6706c05",
+ "cinode_207a364289334a196fd2c69718bc5147",
+ "cinode_207e12d9ecc031215d8144cd16823a9b",
+ "cinode_22ebca004d858fdded1f831b3063699c",
+ "cinode_23469c8d24bf7d8b7cc1f19109cde040",
+ "cinode_2350333651d1489d1f357981eddf2b7d",
+ "cinode_262bbae724f99c6060c354bdfa4f84ec",
+ "cinode_2656458bf3d223484af4b96941082c5b",
+ "cinode_28cd28d60e68176baed03a9339ca62e7",
+ "cinode_2b194260690f37f0d0676165368f4321",
+ "cinode_2d2d40c2f77a74d3a811396eae246952",
+ "cinode_2ef4073f17e7235b96c7b8cb8cb53e1c",
+ "cinode_2f588dfc48644cdf1dbe124f33320dec",
+ "cinode_2f5e5a66a6ff671c26c874fc2b2374d3"
+ ],
+ "secondIds": [
+ "cinode_2fd42cae3f4046d77d8bf01007374b79",
+ "cinode_303d83f47e4d6e00654cc18a3d2da785",
+ "cinode_30486b46452ce9784c5769e673195c53",
+ "cinode_319c34550bd1787f221eb5404f9632a7",
+ "cinode_31a3722ce7afc20e35212cf68e626cf5",
+ "cinode_31ae34a4970657ae516b31b0a57d05e2",
+ "cinode_325140b014a6346151dde0b49e4b0a4d",
+ "cinode_327911848628ac985eff79567f24c3b9",
+ "cinode_32becd4b7cdffcf713e2b4885f4f53b4",
+ "cinode_33a6f4483b9978e77cc5b0fde2cb9e30",
+ "cinode_33d343b518b10dc5c6f83a9bbbc2e0b0",
+ "cinode_34a7c6079a91e933eae41be9fe60805d",
+ "cinode_35e8a3171f1ccb78c6da7a6b4eef3b5a",
+ "cinode_3605fb0fc3e0474f6f73a821bd378d61",
+ "cinode_37106b1103d7b8ad945ce38a8cb47fa3",
+ "cinode_3814e9592b2fb570dad351758e9e4e00",
+ "cinode_3900d2c601eaf1e5d1dcb30d8f221051",
+ "cinode_3942c04a35f652b915ff6f7330e5518d",
+ "cinode_39b76f661296b526524b03e104751ebd",
+ "cinode_3a2ec5321a4a7f6ae4b1e1086898360f",
+ "cinode_3b59ac339b432ddfe2f5fb735c0957c2",
+ "cinode_3d0ff93f119a36ac31e656cc11be7eee",
+ "cinode_3e93fc843f8237749743bd56dc2fa8ab",
+ "cinode_43335b9b99749336eb503f9b9ba196ce",
+ "cinode_4370ccd2ddfa404c3e7be72d3f9481e5",
+ "cinode_43a376539f412f6d4ab8e96bce2c6595",
+ "cinode_43cb427fcc0397f9d9f9475d82f98f7d",
+ "cinode_45b2cfa74857c807a7e9ad6b3ed7284d",
+ "cinode_4621607fc85ba9e42a5191331f8bc031",
+ "cinode_46cfc20a6b9c56f70cb214eb009d8f70",
+ "cinode_4766a34d4416b43dada22624cebf4cc6",
+ "cinode_48a0e8be7c26b83b90557ebf5f2139d1",
+ "cinode_49da4187c5bf34c2e02c286cafeb5ce3",
+ "cinode_4b1e6d37e9eabac302172edf114b7f59",
+ "cinode_4b53b2b1bb4065a0d8f249fa6498ac6e",
+ "cinode_4dfd61cdccb98288a975d4993f497883",
+ "cinode_4dfeb54a60a6e8a0adf863fd0b5536b7",
+ "cinode_4e8d1d9a7dfd016b5e57c711c399f407",
+ "cinode_4e8f331784fe1f3ea1bfc3f491da01a0",
+ "cinode_4f9553f4123185396b06849a1e2d6554",
+ "cinode_4fac2a94d7e796ffab9fc2bccddfc902",
+ "cinode_52a24fe9f752f560604bbe1f6935ab43",
+ "cinode_53104c6ced31827c3b4730d513dd0bcd",
+ "cinode_5444db886acc860df537cd101d67c413",
+ "cinode_54f260dd0d7d2947ceceab7ceab422fa",
+ "cinode_563358bd52111398d60ddcf25766e2bf",
+ "cinode_57082e7e491f6e640725561592fc7071",
+ "cinode_58d4d36eeb0e59f54957ff149611bffb",
+ "cinode_5926407fad73bd0db550ec31939afab9",
+ "cinode_599e6e2649384480495061c86a2f391a"
+ ],
+ "continuous": true
+ }
+ },
+ "queries": {
+ "communities": {
+ "wallMs": {
+ "minimum": 107.935,
+ "p50": 110.292,
+ "p95": 112.429,
+ "maximum": 112.429
+ },
+ "resultCount": 100,
+ "locatedResultCount": 100,
+ "relationshipCount": 100,
+ "evidenceRelationshipCount": 100,
+ "minimumRelationshipConfidence": 1,
+ "communityCount": 1,
+ "processCount": 0,
+ "processEvidenceCount": 0,
+ "minimumProcessConfidence": null,
+ "truncated": true,
+ "deadlineMs": 2000,
+ "deadlineMet": true,
+ "deliveredBytes": 63240,
+ "deliveredTokensEstimate": 15810,
+ "nextCursor": "idxcur_01000000000000050000000000000001",
+ "representative": "cinode_001290994686b1db518808b167fae09d"
+ },
+ "processes": {
+ "wallMs": {
+ "minimum": 35.955,
+ "p50": 36.4,
+ "p95": 36.979,
+ "maximum": 36.979
+ },
+ "resultCount": 2,
+ "locatedResultCount": 2,
+ "relationshipCount": 2,
+ "evidenceRelationshipCount": 2,
+ "minimumRelationshipConfidence": 0.95,
+ "communityCount": 0,
+ "processCount": 1,
+ "processEvidenceCount": 1,
+ "minimumProcessConfidence": 0.95,
+ "truncated": true,
+ "deadlineMs": 2000,
+ "deadlineMet": true,
+ "deliveredBytes": 2684,
+ "deliveredTokensEstimate": 671,
+ "nextCursor": "idxcur_02000000000000050000000000000001",
+ "representative": "cinode_21887e5ac1043c0b9dccfe71b6d9c504"
+ },
+ "routes": {
+ "wallMs": {
+ "minimum": 98.83,
+ "p50": 99.736,
+ "p95": 108.948,
+ "maximum": 108.948
+ },
+ "resultCount": 50,
+ "locatedResultCount": 50,
+ "relationshipCount": 9,
+ "evidenceRelationshipCount": 9,
+ "minimumRelationshipConfidence": 0.95,
+ "communityCount": 0,
+ "processCount": 0,
+ "processEvidenceCount": 0,
+ "minimumProcessConfidence": null,
+ "truncated": true,
+ "deadlineMs": 2000,
+ "deadlineMet": true,
+ "deliveredBytes": 12784,
+ "deliveredTokensEstimate": 3196,
+ "nextCursor": "idxcur_6bd95ba9e00f8b374677f2eda6ac07c0",
+ "representative": "cinode_0489d38ddca298b56649894d3415a024"
+ },
+ "impact": {
+ "wallMs": {
+ "minimum": 49.476,
+ "p50": 53.169,
+ "p95": 53.762,
+ "maximum": 53.762
+ },
+ "resultCount": 9,
+ "locatedResultCount": 9,
+ "relationshipCount": 18,
+ "evidenceRelationshipCount": 18,
+ "minimumRelationshipConfidence": 0.25,
+ "communityCount": 0,
+ "processCount": 0,
+ "processEvidenceCount": 0,
+ "minimumProcessConfidence": null,
+ "truncated": false,
+ "deadlineMs": 2000,
+ "deadlineMet": true,
+ "deliveredBytes": 8911,
+ "deliveredTokensEstimate": 2228,
+ "nextCursor": null,
+ "representative": "cinode_13e4297cd1d3e24814e41b523fa59644"
+ },
+ "search": {
+ "wallMs": {
+ "minimum": 39.82,
+ "p50": 44.333,
+ "p95": 51.691,
+ "maximum": 51.691
+ },
+ "resultCount": 50,
+ "locatedResultCount": 50,
+ "relationshipCount": 0,
+ "evidenceRelationshipCount": 0,
+ "minimumRelationshipConfidence": null,
+ "communityCount": 0,
+ "processCount": 0,
+ "processEvidenceCount": 0,
+ "minimumProcessConfidence": null,
+ "truncated": true,
+ "deadlineMs": 2000,
+ "deadlineMet": true,
+ "deliveredBytes": 9599,
+ "deliveredTokensEstimate": 2400,
+ "nextCursor": "idxcur_2f5e5a66a6ff671c26c874fc2b2374d3",
+ "representative": "cinode_13e4297cd1d3e24814e41b523fa59644"
+ },
+ "dependencies": {
+ "wallMs": {
+ "minimum": 41.514,
+ "p50": 47.83,
+ "p95": 52.432,
+ "maximum": 52.432
+ },
+ "resultCount": 5,
+ "locatedResultCount": 5,
+ "relationshipCount": 5,
+ "evidenceRelationshipCount": 5,
+ "minimumRelationshipConfidence": 0.95,
+ "communityCount": 0,
+ "processCount": 0,
+ "processEvidenceCount": 0,
+ "minimumProcessConfidence": null,
+ "truncated": false,
+ "deadlineMs": 2000,
+ "deadlineMet": true,
+ "deliveredBytes": 3608,
+ "deliveredTokensEstimate": 902,
+ "nextCursor": null,
+ "representative": "cinode_177744669b5a79cb4b3f1e8285f0b571"
+ },
+ "safeQuery": {
+ "wallMs": {
+ "minimum": 35.884,
+ "p50": 36.436,
+ "p95": 36.714,
+ "maximum": 36.714
+ },
+ "resultCount": 5,
+ "locatedResultCount": 5,
+ "relationshipCount": 5,
+ "evidenceRelationshipCount": 5,
+ "minimumRelationshipConfidence": 0.95,
+ "communityCount": 0,
+ "processCount": 0,
+ "processEvidenceCount": 0,
+ "minimumProcessConfidence": null,
+ "truncated": false,
+ "deadlineMs": 2000,
+ "deadlineMet": true,
+ "deliveredBytes": 3608,
+ "deliveredTokensEstimate": 902,
+ "nextCursor": null,
+ "representative": "cinode_177744669b5a79cb4b3f1e8285f0b571"
+ },
+ "trace": {
+ "wallMs": {
+ "minimum": 41.525,
+ "p50": 42.133,
+ "p95": 43.007,
+ "maximum": 43.007
+ },
+ "resultCount": 2,
+ "locatedResultCount": 2,
+ "relationshipCount": 2,
+ "evidenceRelationshipCount": 2,
+ "minimumRelationshipConfidence": 0.95,
+ "communityCount": 0,
+ "processCount": 0,
+ "processEvidenceCount": 0,
+ "minimumProcessConfidence": null,
+ "truncated": false,
+ "deadlineMs": 2000,
+ "deadlineMet": true,
+ "deliveredBytes": 2067,
+ "deliveredTokensEstimate": 517,
+ "nextCursor": null,
+ "representative": "cinode_21887e5ac1043c0b9dccfe71b6d9c504"
+ }
+ }
+ }
+ ]
+ },
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "phase4EvidenceSliceProven": true,
+ "phase4IntelligenceProven": false,
+ "competitorParity": false,
+ "leadership": false,
+ "millionNodeScale": false,
+ "reason": "The fixture and pinned-repository slice prove deterministic bounded query behavior. Real-repository results are evidence only and do not prove competitor parity, packaged native binaries, multi-repository behavior, or million-node scale."
+ },
+ "safeguards": {
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "rawSourceStoredInReport": false,
+ "absolutePathsStoredInReport": false
+ },
+ "reportFingerprint": "sha256:5468b896fcd4cf40b3d7473aa5da07584b9716fcfa1d038abc530de047481951"
+}
diff --git a/evals/code-intelligence/results/phase5-cross-service.json b/evals/code-intelligence/results/phase5-cross-service.json
new file mode 100644
index 00000000..bc5f72e6
--- /dev/null
+++ b/evals/code-intelligence/results/phase5-cross-service.json
@@ -0,0 +1,81 @@
+{
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-phase5-cross-service-1",
+ "phase": 5,
+ "generatedAt": "2026-07-19T12:06:49.421Z",
+ "environment": {
+ "platform": "darwin",
+ "architecture": "arm64",
+ "nodeVersion": "v22.22.3"
+ },
+ "inputs": {
+ "fixtureRef": "fixture://sha256:7dad06cf60b8cb2a90996634607cf81a7fc1a1bdc7e87660b6f63002ce325155",
+ "fixtureFingerprint": "sha256:7dad06cf60b8cb2a90996634607cf81a7fc1a1bdc7e87660b6f63002ce325155",
+ "implementationFingerprint": "sha256:6cd06dca738f0b5d5801d8d943dab2ad470196ea785b0f005c1adcf6d869d4a0",
+ "workspaceId": "ws_phase5_cross_service",
+ "serviceBoundaries": [
+ {
+ "name": "@fixture/gateway",
+ "prefix": "workspace://services/gateway/"
+ },
+ {
+ "name": "@fixture/orders",
+ "prefix": "workspace://services/orders/"
+ },
+ {
+ "name": "@fixture/zzz-decoy",
+ "prefix": "workspace://services/zzz-decoy/"
+ }
+ ],
+ "repetitions": 5,
+ "queryLimit": 32,
+ "queryDepth": 4,
+ "queryDeadlineMs": 2000
+ },
+ "index": {
+ "repositoryIdentityHash": "sha256:1536f2b32ad6d213375bf692a1df9fac31335ccb412609d29945bad17dcc293c",
+ "fileCount": 4,
+ "nodeCount": 17,
+ "edgeCount": 20,
+ "databaseBytes": 81920
+ },
+ "results": {
+ "processCount": 1,
+ "crossServiceCallEvidenceId": "ciedge_71cff4fe203e2d21dfb1abb8c6a5b6b8",
+ "crossServiceImportEvidenceId": "ciedge_cc08b5f713181d8a6b49f127912b5564",
+ "crossServiceTraceRelationshipIds": [
+ "ciedge_71cff4fe203e2d21dfb1abb8c6a5b6b8"
+ ],
+ "sameNameDecoyIndexed": true,
+ "sameNameDecoyExcluded": true,
+ "unresolvedTargetExcluded": true,
+ "evidenceIdsComplete": true,
+ "bounded": true,
+ "deterministicFingerprint": "sha256:7ed21423cf7ea6f0a47ae02106f87b3bfd4f8ecb22ca60a00d3ccf77577b0594",
+ "queryWallMs": {
+ "minimum": 6.65,
+ "p50": 8.416,
+ "p95": 8.939,
+ "maximum": 8.939
+ },
+ "readQueriesPreservedIndex": true
+ },
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": {
+ "crossServiceMonorepoFixture": true,
+ "multiRepository": false,
+ "competitorParity": false,
+ "leadership": false,
+ "millionNodeScale": false,
+ "reason": "This bounded local fixture proves source-backed import, call, trace, and process evidence across two declared service prefixes inside one repository. It does not prove independent repository indexes, a repository registry, cross-repository search, competitor parity, leadership, or large-scale behavior."
+ },
+ "safeguards": {
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "rawSourceStoredInReport": false,
+ "absolutePathsStoredInReport": false
+ },
+ "reportFingerprint": "sha256:7ec880ea0793d992ea8e276b04d7c6b5ca8b9066483159c5bd3e37b75648ceba"
+}
diff --git a/evals/code-intelligence/results/phase5-go-cross-repository.json b/evals/code-intelligence/results/phase5-go-cross-repository.json
new file mode 100644
index 00000000..4492d3f9
--- /dev/null
+++ b/evals/code-intelligence/results/phase5-go-cross-repository.json
@@ -0,0 +1,107 @@
+{
+ "schemaVersion": "1.0.0",
+ "receiptVersion": "memory-recall-phase5-go-cross-repository-1",
+ "phase": 5,
+ "generatedAt": "2026-07-19T14:16:39.363Z",
+ "environment": {
+ "platform": "darwin",
+ "architecture": "arm64",
+ "nodeVersion": "v22.22.3",
+ "nativeTarget": "darwin-arm64"
+ },
+ "implementation": {
+ "files": [
+ "apps/cli/oaf.mjs",
+ "packages/protocol/schemas/code-intelligence-repository-request.schema.json",
+ "packages/protocol/schemas/code-intelligence-repository-response.schema.json",
+ "providers/native/code-intelligence-rust/src/binary-resolver.mjs",
+ "providers/native/code-intelligence-rust/src/index.mjs",
+ "rust/oaf-index/src/registry.rs",
+ "rust/oaf/src/code_intelligence.rs",
+ "rust/oaf/src/repository_protocol.rs",
+ "scripts/native-code-intelligence-consumer-smoke.mjs"
+ ],
+ "fingerprint": "sha256:d940e82c602030d79c734cfffc4fb065f1c94b8e8c5404b9b99c51b115377f87",
+ "releaseBinarySha256": "sha256:d19b85bd2110d31fc58fdbad2e40024f83e49c714453cc343e8e8c5c5ab39982"
+ },
+ "packageEvidence": {
+ "rootPackage": "memory-recall@2.0.0",
+ "rootTarballSha256": "sha256:124d38a0dada7db362dbf95d45e018d0052f8397f8d04369753aae8939a67464",
+ "nativePackage": "@memory-recall/native-darwin-arm64@2.0.0",
+ "nativeTarballSha256": "sha256:3e7554532e4da30f93bdb92a0cbcce85d4c0875084aa7a11a8006db5965b8571",
+ "installed": true,
+ "providerSource": "platform-package",
+ "providerVerified": true,
+ "mcpEngine": "native"
+ },
+ "fixture": {
+ "language": "go",
+ "selectedIndependentGitRepositoryCount": 2,
+ "selectedGitHeadCommits": [
+ "340fa147d6bfbd4c390dfe57eeceff34c2abb9e5",
+ "2a640d32591b4d74e64052293ada1cb25ee4c328"
+ ],
+ "decoyRepositoryCount": 1,
+ "identicalDecoyNativeId": true,
+ "clientModuleCoordinate": "example.com/client",
+ "requiredModuleCoordinate": "example.com/demo",
+ "decoyModuleCoordinate": "example.com/wrong"
+ },
+ "results": {
+ "selectedRepositoryCount": 2,
+ "openedRepositoryCount": 2,
+ "selectedRepositoryFreshness": [
+ "current",
+ "current"
+ ],
+ "exactModuleEvidenceSelected": true,
+ "identicalDecoyExcluded": true,
+ "bounded": true,
+ "sourceBacked": true,
+ "sqliteBundlesPreserved": true,
+ "relationshipEvidence": [
+ {
+ "id": "mrrel_970a76d6d2fc7a3ac84813f502f89b78",
+ "kind": "imports",
+ "resolution": "exact_module_coordinate",
+ "evidenceLocator": "workspace://api/routes.go#L7-L7",
+ "evidenceNativeRelationshipIds": [
+ "ciedge_e955510eea2c76980fc59ff38ef910c0"
+ ]
+ },
+ {
+ "id": "mrrel_f7a06cc0412ab920ee02f137414a7565",
+ "kind": "constructs",
+ "resolution": "exact_module_coordinate",
+ "evidenceLocator": "workspace://api/routes.go#L18-L18",
+ "evidenceNativeRelationshipIds": [
+ "ciedge_e955510eea2c76980fc59ff38ef910c0",
+ "ciedge_65349a055f7d00ddc0299aea0b8e40b8"
+ ]
+ }
+ ],
+ "traceRelationshipIds": [
+ "mrrel_970a76d6d2fc7a3ac84813f502f89b78",
+ "mrrel_f7a06cc0412ab920ee02f137414a7565"
+ ],
+ "impactNativeNodeIds": [
+ "cinode_f01e41d6ce66dade402cd8760c3b235e"
+ ]
+ },
+ "safeguards": {
+ "readOnlyQueries": true,
+ "localFilesWrittenByQueries": 0,
+ "rawSourceBodiesIncluded": false,
+ "absolutePathsIncluded": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "published": false
+ },
+ "claims": {
+ "exactGoCrossRepositoryBehavior": true,
+ "generalCrossLanguageBehavior": false,
+ "competitorParity": false,
+ "productionPublishReady": false
+ },
+ "receiptFingerprint": "sha256:7aa6b4053a98b2691b82331e97def6b679d0228c603a6de6b7ffe1fbca5648af"
+}
diff --git a/evals/code-intelligence/truth/README.md b/evals/code-intelligence/truth/README.md
new file mode 100644
index 00000000..a9912ee1
--- /dev/null
+++ b/evals/code-intelligence/truth/README.md
@@ -0,0 +1,81 @@
+# Code intelligence truth review
+
+This directory holds the reviewed facts used to measure language support. An
+engine result is never its own ground truth.
+
+## Evidence classes
+
+- Fixture truth covers every declaration and applicable relationship in the
+ fixture. Fixture review coverage is normally `exhaustive`.
+- Repository truth covers one bounded scope from a pinned corpus repository.
+ Its source reference records the corpus ID, exact 40-character commit, and
+ workspace-relative scope.
+- Each Tier 1 language needs fixture truth and reviewed truth from all three
+ pinned repositories before a capability can move beyond `unmeasured`.
+- A single report is case evidence. Language and capability claims are decided
+ from the complete evidence set, never from the best case or a macro average.
+
+## Selecting repository facts
+
+For each pinned repository, select stable facts that exercise the language and
+framework behavior under review:
+
+- declarations across top-level and nested scopes;
+- imports, exports, re-exports, modules, packages, or includes as applicable;
+- inheritance, implementation, traits, protocols, mixins, and type relations;
+- resolved and intentionally unresolved calls, including receiver-sensitive
+ cases;
+- routes, handlers, framework components, configuration resources, and process
+ steps when the repository contains them;
+- explicit negative facts for reviewed false-positive precision samples.
+
+The sample must include ordinary code and hard cases. Do not select only facts
+already found by the current engine. Keep the bounded scope stable unless a
+reviewed corpus update explains why it changed.
+
+## Review procedure
+
+1. Pin the repository to the corpus commit and record the bounded relative
+ scope in `source.ref`.
+2. A generator may propose candidate locators, but it may not label truth or
+ use the engine under evaluation as the authority.
+3. Review every checked-in item against source at its recorded locator. Confirm
+ its kind, name, relationship endpoints, expected presence or absence, and
+ resolution class.
+4. Set declaration, relationship, and call coverage separately to
+ `exhaustive`, `sampled`, or `not-applicable`.
+5. Record the reviewer identity and UTC review time. Recompute the canonical
+ truth fingerprint after the final edit.
+6. Run the schema validator, semantic truth audit, and the graph evaluator at
+ least twice against identical input.
+
+Generated source text, copied engine output, unreviewed inferred relationships,
+absolute paths, environment values, credentials, and raw parser errors are not
+allowed in truth records.
+
+## Metric and claim rules
+
+- Declaration recall is matched expected declarations divided by reviewed
+ expected declarations.
+- Relationship recall excludes calls and uses reviewed expected relationships.
+- Reviewed call precision is matched expected calls divided by matched expected
+ calls plus reviewed present-but-forbidden calls.
+- A denominator of zero produces `null`, not 0 or 1.
+- Any duplicate canonical symbol, repository parse failure, nondeterministic
+ graph fingerprint, or truth mismatch fails the case.
+- Published floors are declaration and symbol recall at least 0.95, resolved
+ call precision at least 0.90, duplicate canonical symbols equal to zero,
+ repository parse failures equal to zero, and deterministic output.
+- Missing or partial evidence stays explicit. Grammar availability alone is
+ not language support.
+- Per-language status uses the weakest required applicable capability across
+ all required fixtures and repository cases.
+- Parity and leadership are release-level decisions. No individual truth or
+ language report may claim them.
+
+## Change review
+
+Truth changes require the same scrutiny as parser changes. A change should state
+which pinned source locator changed, why the previous fact was wrong or stale,
+and whether the change affects historical comparison. Never weaken truth to make
+a failing engine pass.
diff --git a/evals/code-intelligence/truth/fixtures/c.json b/evals/code-intelligence/truth/fixtures/c.json
new file mode 100644
index 00000000..c0cb661b
--- /dev/null
+++ b/evals/code-intelligence/truth/fixtures/c.json
@@ -0,0 +1,22 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_c_batch_d_fixture",
+ "language": "c",
+ "source": { "class": "fixture", "ref": "fixture://sha256:de5378c339ebaf83d8a1967b20b16b0edbf9152c3309235a78b3bb5cf4a629f5" },
+ "review": { "status": "reviewed", "method": "source-locator", "reviewedBy": "memory-recall-maintainer", "reviewedAt": "2026-07-16T00:00:00.000Z" },
+ "reviewCoverage": { "declarations": "sampled", "relationships": "sampled", "calls": "sampled" },
+ "capabilityClaims": { "parse": "partial", "structure": "partial", "imports": "partial", "exports": "unmeasured", "heritage": "unmeasured", "types": "unmeasured", "calls": "partial", "config": "partial", "frameworks": "unmeasured", "impact": "unmeasured", "processes": "unmeasured" },
+ "items": [
+ { "id": "cititem_c_target_items", "semanticKey": "node:build-target:items", "capability": "config", "expectation": "present", "recordKind": "node", "kind": "build_target", "name": "items", "qualifiedName": "CMakeLists.txt::items", "locator": "workspace://CMakeLists.txt#L3-L3" },
+ { "id": "cititem_c_struct_item", "semanticKey": "node:struct:Item", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "struct", "name": "Item", "qualifiedName": "include/item.h::Item", "locator": "workspace://include/item.h#L4-L6" },
+ { "id": "cititem_c_function_find", "semanticKey": "node:function:item-find", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "function", "name": "item_find", "qualifiedName": "src/item.c::item_find", "locator": "workspace://src/item.c#L3-L6" },
+ { "id": "cititem_c_function_main", "semanticKey": "node:function:main", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "function", "name": "main", "qualifiedName": "src/main.c::main", "locator": "workspace://src/main.c#L3-L6" },
+ { "id": "cititem_c_import_header", "semanticKey": "edge:imports:item-source:item-header", "capability": "imports", "expectation": "present", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "src_item", "locator": "workspace://src/item.c#L1-L7" }, "to": { "kind": "module", "name": "include_item", "locator": "workspace://include/item.h#L1-L11" }, "locator": "workspace://src/item.c#L1-L2", "resolution": "exact" },
+ { "id": "cititem_c_import_header_not_self", "semanticKey": "edge:imports:item-source:item-header-line:not-self", "capability": "imports", "expectation": "absent", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "src_item", "locator": "workspace://src/item.c#L1-L7" }, "to": { "kind": "module", "name": "src_item", "locator": "workspace://src/item.c#L1-L7" }, "locator": "workspace://src/item.c#L1-L2", "resolution": "exact" },
+ { "id": "cititem_c_call_find", "semanticKey": "edge:calls:main:item-find", "capability": "calls", "expectation": "present", "recordKind": "edge", "kind": "calls", "from": { "kind": "function", "name": "main", "locator": "workspace://src/main.c#L3-L6" }, "to": { "kind": "function", "name": "item_find", "locator": "workspace://src/item.c#L3-L6" }, "locator": "workspace://src/main.c#L4-L4", "resolution": "inferred" },
+ { "id": "cititem_c_target_depends_item", "semanticKey": "edge:depends-on:items:item-module", "capability": "config", "expectation": "present", "recordKind": "edge", "kind": "depends_on", "from": { "kind": "build_target", "name": "items", "locator": "workspace://CMakeLists.txt#L3-L3" }, "to": { "kind": "module", "name": "src_item", "locator": "workspace://src/item.c#L1-L7" }, "locator": "workspace://CMakeLists.txt#L3-L3", "resolution": "exact" },
+ { "id": "cititem_c_entry_main", "semanticKey": "edge:entry-point:main:items", "capability": "config", "expectation": "present", "recordKind": "edge", "kind": "entry_point", "from": { "kind": "function", "name": "main", "locator": "workspace://src/main.c#L3-L6" }, "to": { "kind": "build_target", "name": "items", "locator": "workspace://CMakeLists.txt#L3-L3" }, "locator": "workspace://CMakeLists.txt#L3-L3", "resolution": "exact" }
+ ],
+ "truthFingerprint": "sha256:de371ecfd9cad7bdd9b37df9e35ea376be31d5d9220a2854802aac122e45ec49"
+}
diff --git a/evals/code-intelligence/truth/fixtures/cpp.json b/evals/code-intelligence/truth/fixtures/cpp.json
new file mode 100644
index 00000000..11ec9005
--- /dev/null
+++ b/evals/code-intelligence/truth/fixtures/cpp.json
@@ -0,0 +1,26 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_cpp_batch_d_fixture",
+ "language": "cpp",
+ "source": { "class": "fixture", "ref": "fixture://sha256:74307b29d88773caeeb559705bf9e8dd49cf7d96ab63ecdbfc2d2fad03a9c06e" },
+ "review": { "status": "reviewed", "method": "source-locator", "reviewedBy": "memory-recall-maintainer", "reviewedAt": "2026-07-16T00:00:00.000Z" },
+ "reviewCoverage": { "declarations": "sampled", "relationships": "sampled", "calls": "sampled" },
+ "capabilityClaims": { "parse": "partial", "structure": "partial", "imports": "partial", "exports": "unmeasured", "heritage": "partial", "types": "partial", "calls": "partial", "config": "partial", "frameworks": "unmeasured", "impact": "unmeasured", "processes": "unmeasured" },
+ "items": [
+ { "id": "cititem_cpp_target_items", "semanticKey": "node:build-target:items-cpp", "capability": "config", "expectation": "present", "recordKind": "node", "kind": "build_target", "name": "items_cpp", "qualifiedName": "CMakeLists.txt::items_cpp", "locator": "workspace://CMakeLists.txt#L3-L3" },
+ { "id": "cititem_cpp_namespace_demo", "semanticKey": "node:namespace:demo", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "namespace", "name": "demo", "qualifiedName": "include/item_service.hpp::demo", "locator": "workspace://include/item_service.hpp#L5-L22" },
+ { "id": "cititem_cpp_class_loader", "semanticKey": "node:class:ItemLoader", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "class", "name": "ItemLoader", "qualifiedName": "include/item_service.hpp::demo::ItemLoader", "locator": "workspace://include/item_service.hpp#L10-L13" },
+ { "id": "cititem_cpp_class_service", "semanticKey": "node:class:ItemService", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "class", "name": "ItemService", "qualifiedName": "include/item_service.hpp::demo::ItemService", "locator": "workspace://include/item_service.hpp#L15-L21" },
+ { "id": "cititem_cpp_lookup_source", "semanticKey": "node:method:lookup-string-source", "capability": "types", "expectation": "present", "recordKind": "node", "kind": "method", "name": "lookup(string)", "qualifiedName": "src/item_service.cpp::demo.ItemService::lookup(string)", "locator": "workspace://src/item_service.cpp#L4-L4" },
+ { "id": "cititem_cpp_load_item", "semanticKey": "node:function:load-item", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "function", "name": "load_item(ItemService,string)", "qualifiedName": "src/item_service.cpp::demo::load_item(ItemService,string)", "locator": "workspace://src/item_service.cpp#L8-L10" },
+ { "id": "cititem_cpp_import_header", "semanticKey": "edge:imports:source:header", "capability": "imports", "expectation": "present", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "src_item_service", "locator": "workspace://src/item_service.cpp#L1-L14" }, "to": { "kind": "module", "name": "include_item_service", "locator": "workspace://include/item_service.hpp#L1-L23" }, "locator": "workspace://src/item_service.cpp#L1-L2", "resolution": "exact" },
+ { "id": "cititem_cpp_import_header_not_self", "semanticKey": "edge:imports:source:header-line:not-self", "capability": "imports", "expectation": "absent", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "src_item_service", "locator": "workspace://src/item_service.cpp#L1-L14" }, "to": { "kind": "module", "name": "src_item_service", "locator": "workspace://src/item_service.cpp#L1-L14" }, "locator": "workspace://src/item_service.cpp#L1-L2", "resolution": "exact" },
+ { "id": "cititem_cpp_extends_loader", "semanticKey": "edge:extends:ItemService:ItemLoader", "capability": "heritage", "expectation": "present", "recordKind": "edge", "kind": "extends", "from": { "kind": "class", "name": "ItemService", "locator": "workspace://include/item_service.hpp#L15-L21" }, "to": { "kind": "class", "name": "ItemLoader", "locator": "workspace://include/item_service.hpp#L10-L13" }, "locator": "workspace://include/item_service.hpp#L15-L21", "resolution": "exact" },
+ { "id": "cititem_cpp_extends_loader_not_item_argument", "semanticKey": "edge:extends:ItemService:not-Item-argument", "capability": "heritage", "expectation": "absent", "recordKind": "edge", "kind": "extends", "from": { "kind": "class", "name": "ItemService", "locator": "workspace://include/item_service.hpp#L15-L21" }, "to": { "kind": "struct", "name": "Item", "qualifiedName": "include/item_service.hpp::demo::Item", "locator": "workspace://include/item_service.hpp#L6-L8" }, "locator": "workspace://include/item_service.hpp#L15-L21", "resolution": "exact" },
+ { "id": "cititem_cpp_call_lookup", "semanticKey": "edge:calls:load-item:lookup", "capability": "calls", "expectation": "present", "recordKind": "edge", "kind": "calls", "from": { "kind": "function", "name": "load_item(ItemService,string)", "locator": "workspace://src/item_service.cpp#L8-L10" }, "to": { "kind": "method", "name": "lookup(string)", "qualifiedName": "src/item_service.cpp::demo.ItemService::lookup(string)", "locator": "workspace://src/item_service.cpp#L4-L4" }, "locator": "workspace://src/item_service.cpp#L9-L9", "resolution": "typed" },
+ { "id": "cititem_cpp_call_ambiguous_absent", "semanticKey": "edge:calls:ambiguous:find-string", "capability": "calls", "expectation": "absent", "recordKind": "edge", "kind": "calls", "from": { "kind": "function", "name": "ambiguous(string)", "locator": "workspace://src/item_service.cpp#L12-L12" }, "to": { "kind": "method", "name": "find(string)", "locator": "workspace://src/item_service.cpp#L5-L5" }, "locator": "workspace://src/item_service.cpp#L12-L12", "resolution": "typed" },
+ { "id": "cititem_cpp_entry_main", "semanticKey": "edge:entry-point:main:items-cpp", "capability": "config", "expectation": "present", "recordKind": "edge", "kind": "entry_point", "from": { "kind": "function", "name": "main", "locator": "workspace://src/main.cpp#L3-L6" }, "to": { "kind": "build_target", "name": "items_cpp", "locator": "workspace://CMakeLists.txt#L3-L3" }, "locator": "workspace://CMakeLists.txt#L3-L3", "resolution": "exact" }
+ ],
+ "truthFingerprint": "sha256:1479fc72383d8c1e931a9218c118b898ff9fd4fe4fbfd0e3dfbefa687362780b"
+}
diff --git a/evals/code-intelligence/truth/fixtures/csharp.json b/evals/code-intelligence/truth/fixtures/csharp.json
new file mode 100644
index 00000000..48a57996
--- /dev/null
+++ b/evals/code-intelligence/truth/fixtures/csharp.json
@@ -0,0 +1,35 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_csharp_batch_c_fixture",
+ "language": "csharp",
+ "source": { "class": "fixture", "ref": "fixture://sha256:fb5825d7f930972c667cd4d519daaa8afe058367eeba76a07a88fa67e42f88b1" },
+ "review": { "status": "reviewed", "method": "source-locator", "reviewedBy": "memory-recall-maintainer", "reviewedAt": "2026-07-16T00:00:00.000Z" },
+ "reviewCoverage": { "declarations": "sampled", "relationships": "sampled", "calls": "sampled" },
+ "capabilityClaims": { "parse": "partial", "structure": "partial", "imports": "partial", "exports": "unmeasured", "heritage": "partial", "types": "partial", "calls": "partial", "config": "unmeasured", "frameworks": "partial", "impact": "unmeasured", "processes": "unmeasured" },
+ "items": [
+ { "id": "cititem_csharp_namespace_services", "semanticKey": "node:namespace:services", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "namespace", "name": "Demo.Services", "qualifiedName": "src/Demo/Services.cs::Demo.Services", "locator": "workspace://src/Demo/Services.cs#L1-L1" },
+ { "id": "cititem_csharp_item_record", "semanticKey": "node:class:models:Item", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "class", "name": "Item", "qualifiedName": "src/Demo/Models.cs::Demo.Models::Item", "locator": "workspace://src/Demo/Models.cs#L3-L3" },
+ { "id": "cititem_csharp_loader", "semanticKey": "node:interface:services:IItemLoader", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "interface", "name": "IItemLoader", "qualifiedName": "src/Demo/Services.cs::Demo.Services::IItemLoader", "locator": "workspace://src/Demo/Services.cs#L5-L8" },
+ { "id": "cititem_csharp_service", "semanticKey": "node:class:services:ItemService", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "class", "name": "ItemService", "qualifiedName": "src/Demo/Services.cs::Demo.Services::ItemService", "locator": "workspace://src/Demo/Services.cs#L10-L17" },
+ { "id": "cititem_csharp_find", "semanticKey": "node:method:services:find-string", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "Find(string)", "qualifiedName": "src/Demo/Services.cs::Demo.Services::ItemService::Find(string)", "locator": "workspace://src/Demo/Services.cs#L12-L12" },
+ { "id": "cititem_csharp_load_string", "semanticKey": "node:method:services:load-string", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "Load(string)", "qualifiedName": "src/Demo/Services.cs::Demo.Services::ItemService::Load(string)", "locator": "workspace://src/Demo/Services.cs#L14-L14" },
+ { "id": "cititem_csharp_load_long", "semanticKey": "node:method:services:load-long", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "Load(long)", "qualifiedName": "src/Demo/Services.cs::Demo.Services::ItemService::Load(long)", "locator": "workspace://src/Demo/Services.cs#L16-L16" },
+ { "id": "cititem_csharp_extension_class", "semanticKey": "node:class:services:ItemExtensions", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "class", "name": "ItemExtensions", "qualifiedName": "src/Demo/Services.cs::Demo.Services::ItemExtensions", "locator": "workspace://src/Demo/Services.cs#L19-L22" },
+ { "id": "cititem_csharp_extension_summary", "semanticKey": "node:method:services:summary-item", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "Summary(Item)", "qualifiedName": "src/Demo/Services.cs::Demo.Services::ItemExtensions::Summary(Item)", "locator": "workspace://src/Demo/Services.cs#L21-L21" },
+ { "id": "cititem_csharp_controller", "semanticKey": "node:class:api:ItemsController", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "class", "name": "ItemsController", "qualifiedName": "src/Demo/Api.cs::Demo.Api::ItemsController", "locator": "workspace://src/Demo/Api.cs#L7-L24" },
+ { "id": "cititem_csharp_get", "semanticKey": "node:method:api:get-string", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "Get(string)", "qualifiedName": "src/Demo/Api.cs::Demo.Api::ItemsController::Get(string)", "locator": "workspace://src/Demo/Api.cs#L18-L19" },
+ { "id": "cititem_csharp_describe", "semanticKey": "node:method:api:describe-item", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "Describe(Item)", "qualifiedName": "src/Demo/Api.cs::Demo.Api::ItemsController::Describe(Item)", "locator": "workspace://src/Demo/Api.cs#L23-L23" },
+ { "id": "cititem_csharp_route_items", "semanticKey": "node:route:GET-items-param", "capability": "frameworks", "expectation": "present", "recordKind": "node", "kind": "route", "name": "GET_items_param", "qualifiedName": "src/Demo/Api.cs::GET_items_param", "locator": "workspace://src/Demo/Api.cs#L18-L19" },
+ { "id": "cititem_csharp_route_health", "semanticKey": "node:route:GET-health", "capability": "frameworks", "expectation": "present", "recordKind": "node", "kind": "route", "name": "GET_health", "qualifiedName": "src/Demo/Api.cs::GET_health", "locator": "workspace://src/Demo/Api.cs#L30-L30" },
+ { "id": "cititem_csharp_import_models", "semanticKey": "edge:imports:services:models", "capability": "imports", "expectation": "present", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "src_Demo_Services", "locator": "workspace://src/Demo/Services.cs#L1-L23" }, "to": { "kind": "namespace", "name": "Demo.Models", "locator": "workspace://src/Demo/Models.cs#L1-L1" }, "locator": "workspace://src/Demo/Services.cs#L3-L3", "resolution": "exact" },
+ { "id": "cititem_csharp_import_models_not_services", "semanticKey": "edge:imports:services:models-line:not-services", "capability": "imports", "expectation": "absent", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "src_Demo_Services", "locator": "workspace://src/Demo/Services.cs#L1-L23" }, "to": { "kind": "namespace", "name": "Demo.Services", "locator": "workspace://src/Demo/Services.cs#L1-L1" }, "locator": "workspace://src/Demo/Services.cs#L3-L3", "resolution": "exact" },
+ { "id": "cititem_csharp_implements_loader", "semanticKey": "edge:implements:ItemService:IItemLoader", "capability": "heritage", "expectation": "present", "recordKind": "edge", "kind": "implements", "from": { "kind": "class", "name": "ItemService", "locator": "workspace://src/Demo/Services.cs#L10-L17" }, "to": { "kind": "interface", "name": "IItemLoader", "locator": "workspace://src/Demo/Services.cs#L5-L8" }, "locator": "workspace://src/Demo/Services.cs#L10-L17", "resolution": "exact" },
+ { "id": "cititem_csharp_call_get_find", "semanticKey": "edge:calls:get:find", "capability": "calls", "expectation": "present", "recordKind": "edge", "kind": "calls", "from": { "kind": "method", "name": "Get(string)", "locator": "workspace://src/Demo/Api.cs#L18-L19" }, "to": { "kind": "method", "name": "Find(string)", "qualifiedName": "src/Demo/Services.cs::Demo.Services::ItemService::Find(string)", "locator": "workspace://src/Demo/Services.cs#L12-L12" }, "locator": "workspace://src/Demo/Api.cs#L19-L19", "resolution": "typed" },
+ { "id": "cititem_csharp_call_extension", "semanticKey": "edge:calls:describe:summary", "capability": "calls", "expectation": "present", "recordKind": "edge", "kind": "calls", "from": { "kind": "method", "name": "Describe(Item)", "locator": "workspace://src/Demo/Api.cs#L23-L23" }, "to": { "kind": "method", "name": "Summary(Item)", "locator": "workspace://src/Demo/Services.cs#L21-L21" }, "locator": "workspace://src/Demo/Api.cs#L23-L23", "resolution": "typed" },
+ { "id": "cititem_csharp_call_ambiguous_absent", "semanticKey": "edge:calls:ambiguous:load-string", "capability": "calls", "expectation": "absent", "recordKind": "edge", "kind": "calls", "from": { "kind": "method", "name": "Ambiguous(string)", "locator": "workspace://src/Demo/Api.cs#L21-L21" }, "to": { "kind": "method", "name": "Load(string)", "locator": "workspace://src/Demo/Services.cs#L14-L14" }, "locator": "workspace://src/Demo/Api.cs#L21-L21", "resolution": "typed" },
+ { "id": "cititem_csharp_handles_items", "semanticKey": "edge:handles-route:get-items", "capability": "frameworks", "expectation": "present", "recordKind": "edge", "kind": "handles_route", "from": { "kind": "method", "name": "Get(string)", "locator": "workspace://src/Demo/Api.cs#L18-L19" }, "to": { "kind": "route", "name": "GET_items_param", "locator": "workspace://src/Demo/Api.cs#L18-L19" }, "locator": "workspace://src/Demo/Api.cs#L18-L19", "resolution": "exact" },
+ { "id": "cititem_csharp_handles_health", "semanticKey": "edge:handles-route:health", "capability": "frameworks", "expectation": "present", "recordKind": "edge", "kind": "handles_route", "from": { "kind": "method", "name": "Health()", "locator": "workspace://src/Demo/Api.cs#L33-L33" }, "to": { "kind": "route", "name": "GET_health", "locator": "workspace://src/Demo/Api.cs#L30-L30" }, "locator": "workspace://src/Demo/Api.cs#L30-L30", "resolution": "exact" }
+ ],
+ "truthFingerprint": "sha256:750665e74fbddcc878100c068f989ba824e0f0a4e11e9a0c00bf1c7621876652"
+}
diff --git a/evals/code-intelligence/truth/fixtures/dart.json b/evals/code-intelligence/truth/fixtures/dart.json
new file mode 100644
index 00000000..a8cc3607
--- /dev/null
+++ b/evals/code-intelligence/truth/fixtures/dart.json
@@ -0,0 +1,31 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_dart_batch_d_fixture",
+ "language": "dart",
+ "source": { "class": "fixture", "ref": "fixture://sha256:75ad927a4e8ded1ac3b1c1b7fef6fa3a8d909dd00204d3cc7538731bbcec43da" },
+ "review": { "status": "reviewed", "method": "source-locator", "reviewedBy": "memory-recall-maintainer", "reviewedAt": "2026-07-16T00:00:00.000Z" },
+ "reviewCoverage": { "declarations": "sampled", "relationships": "sampled", "calls": "sampled" },
+ "capabilityClaims": { "parse": "partial", "structure": "partial", "imports": "partial", "exports": "partial", "heritage": "partial", "types": "partial", "calls": "partial", "config": "partial", "frameworks": "partial", "impact": "unmeasured", "processes": "unmeasured" },
+ "items": [
+ { "id": "cititem_dart_library_item", "semanticKey": "node:library:demo-item", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "library", "name": "demo.item", "qualifiedName": "lib/item.dart::demo.item", "locator": "workspace://lib/item.dart#L1-L1" },
+ { "id": "cititem_dart_interface_loader", "semanticKey": "node:interface:ItemLoader", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "interface", "name": "ItemLoader", "qualifiedName": "lib/item.dart::demo.item::ItemLoader", "locator": "workspace://lib/item.dart#L8-L10" },
+ { "id": "cititem_dart_mixin_logging", "semanticKey": "node:mixin:ItemLogging", "capability": "heritage", "expectation": "present", "recordKind": "node", "kind": "mixin", "name": "ItemLogging", "qualifiedName": "lib/item.dart::demo.item::ItemLogging", "locator": "workspace://lib/item.dart#L12-L14" },
+ { "id": "cititem_dart_class_service", "semanticKey": "node:class:ItemService", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "class", "name": "ItemService", "qualifiedName": "lib/item.dart::demo.item::ItemService", "locator": "workspace://lib/item.dart#L16-L19" },
+ { "id": "cititem_dart_extension_summary", "semanticKey": "node:extension:ItemSummary", "capability": "heritage", "expectation": "present", "recordKind": "node", "kind": "extension", "name": "ItemSummary", "qualifiedName": "lib/item.dart::demo.item::ItemSummary", "locator": "workspace://lib/item.dart#L21-L23" },
+ { "id": "cititem_dart_method_summary", "semanticKey": "node:method:summary", "capability": "types", "expectation": "present", "recordKind": "node", "kind": "method", "name": "summary()", "qualifiedName": "lib/item.dart::demo.item::ItemSummary::summary()", "locator": "workspace://lib/item.dart#L22-L22" },
+ { "id": "cititem_dart_route_items", "semanticKey": "node:route:GET-items-param", "capability": "frameworks", "expectation": "present", "recordKind": "node", "kind": "route", "name": "GET_items_param", "qualifiedName": "lib/routes.dart::GET_items_param", "locator": "workspace://lib/routes.dart#L10-L10" },
+ { "id": "cititem_dart_flutter_app", "semanticKey": "node:framework:flutter-application", "capability": "frameworks", "expectation": "present", "recordKind": "node", "kind": "framework_component", "name": "flutter_application", "qualifiedName": "lib/main.dart::flutter_application", "locator": "workspace://lib/main.dart#L6-L6" },
+ { "id": "cititem_dart_import_item", "semanticKey": "edge:imports:routes:item", "capability": "imports", "expectation": "present", "recordKind": "edge", "kind": "imports", "from": { "kind": "library", "name": "demo.routes", "locator": "workspace://lib/routes.dart#L1-L1" }, "to": { "kind": "module", "name": "lib_item", "locator": "workspace://lib/item.dart#L1-L26" }, "locator": "workspace://lib/routes.dart#L4-L4", "resolution": "exact" },
+ { "id": "cititem_dart_export_item", "semanticKey": "edge:re-exports:routes:item", "capability": "exports", "expectation": "present", "recordKind": "edge", "kind": "re_exports", "from": { "kind": "library", "name": "demo.routes", "locator": "workspace://lib/routes.dart#L1-L1" }, "to": { "kind": "module", "name": "lib_item", "locator": "workspace://lib/item.dart#L1-L26" }, "locator": "workspace://lib/routes.dart#L5-L5", "resolution": "exact" },
+ { "id": "cititem_dart_import_item_not_export", "semanticKey": "edge:re-exports:routes:item-line:not-import", "capability": "exports", "expectation": "absent", "recordKind": "edge", "kind": "re_exports", "from": { "kind": "library", "name": "demo.routes", "locator": "workspace://lib/routes.dart#L1-L1" }, "to": { "kind": "module", "name": "lib_item", "locator": "workspace://lib/item.dart#L1-L26" }, "locator": "workspace://lib/routes.dart#L4-L4", "resolution": "exact" },
+ { "id": "cititem_dart_implements_loader", "semanticKey": "edge:implements:service:loader", "capability": "heritage", "expectation": "present", "recordKind": "edge", "kind": "implements", "from": { "kind": "class", "name": "ItemService", "locator": "workspace://lib/item.dart#L16-L19" }, "to": { "kind": "interface", "name": "ItemLoader", "locator": "workspace://lib/item.dart#L8-L10" }, "locator": "workspace://lib/item.dart#L16-L19", "resolution": "exact" },
+ { "id": "cititem_dart_mixes_in_logging", "semanticKey": "edge:mixes-in:service:logging", "capability": "heritage", "expectation": "present", "recordKind": "edge", "kind": "mixes_in", "from": { "kind": "class", "name": "ItemService", "locator": "workspace://lib/item.dart#L16-L19" }, "to": { "kind": "mixin", "name": "ItemLogging", "locator": "workspace://lib/item.dart#L12-L14" }, "locator": "workspace://lib/item.dart#L16-L19", "resolution": "exact" },
+ { "id": "cititem_dart_extends_type", "semanticKey": "edge:extends-type:summary:Item", "capability": "heritage", "expectation": "present", "recordKind": "edge", "kind": "extends_type", "from": { "kind": "extension", "name": "ItemSummary", "locator": "workspace://lib/item.dart#L21-L23" }, "to": { "kind": "class", "name": "Item", "locator": "workspace://lib/item.dart#L3-L6" }, "locator": "workspace://lib/item.dart#L21-L23", "resolution": "exact" },
+ { "id": "cititem_dart_part_routes", "semanticKey": "edge:part-of:routes-part:routes", "capability": "config", "expectation": "present", "recordKind": "edge", "kind": "part_of", "from": { "kind": "module", "name": "lib_routes_part", "locator": "workspace://lib/routes_part.dart#L1-L4" }, "to": { "kind": "module", "name": "lib_routes", "locator": "workspace://lib/routes.dart#L1-L13" }, "locator": "workspace://lib/routes.dart#L6-L6", "resolution": "exact" },
+ { "id": "cititem_dart_call_summary", "semanticKey": "edge:calls:describe:summary", "capability": "calls", "expectation": "present", "recordKind": "edge", "kind": "calls", "from": { "kind": "function", "name": "describe(Item)", "locator": "workspace://lib/item.dart#L25-L25" }, "to": { "kind": "method", "name": "summary()", "locator": "workspace://lib/item.dart#L22-L22" }, "locator": "workspace://lib/item.dart#L25-L25", "resolution": "typed" },
+ { "id": "cititem_dart_handles_route", "semanticKey": "edge:handles-route:builder:items", "capability": "frameworks", "expectation": "present", "recordKind": "edge", "kind": "handles_route", "from": { "kind": "function", "name": "buildRouter(ItemService)", "locator": "workspace://lib/routes.dart#L8-L12" }, "to": { "kind": "route", "name": "GET_items_param", "locator": "workspace://lib/routes.dart#L10-L10" }, "locator": "workspace://lib/routes.dart#L10-L10", "resolution": "exact" },
+ { "id": "cititem_dart_entry_flutter", "semanticKey": "edge:entry-point:main:flutter", "capability": "frameworks", "expectation": "present", "recordKind": "edge", "kind": "entry_point", "from": { "kind": "function", "name": "main", "locator": "workspace://lib/main.dart#L4-L7" }, "to": { "kind": "framework_component", "name": "flutter_application", "locator": "workspace://lib/main.dart#L6-L6" }, "locator": "workspace://lib/main.dart#L6-L6", "resolution": "exact" }
+ ],
+ "truthFingerprint": "sha256:c4d576af02030cda5d4d5b0f10663c8ed30bd42b73aeae2399c43134892165b6"
+}
diff --git a/evals/code-intelligence/truth/fixtures/go.json b/evals/code-intelligence/truth/fixtures/go.json
new file mode 100644
index 00000000..9cdba36a
--- /dev/null
+++ b/evals/code-intelligence/truth/fixtures/go.json
@@ -0,0 +1,221 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_go_batch_b_fixture",
+ "language": "go",
+ "source": {
+ "class": "fixture",
+ "ref": "fixture://sha256:d2b84b0659b26439d7eb09c4a3a6ec5a5eb975bb87fd5f12086289355f7f532b"
+ },
+ "review": {
+ "status": "reviewed",
+ "method": "source-locator",
+ "reviewedBy": "memory-recall-maintainer",
+ "reviewedAt": "2026-07-16T00:00:00.000Z"
+ },
+ "reviewCoverage": {
+ "declarations": "exhaustive",
+ "relationships": "exhaustive",
+ "calls": "exhaustive"
+ },
+ "capabilityClaims": {
+ "parse": "partial",
+ "structure": "partial",
+ "imports": "partial",
+ "exports": "partial",
+ "heritage": "unmeasured",
+ "types": "partial",
+ "calls": "partial",
+ "config": "partial",
+ "frameworks": "partial",
+ "impact": "unmeasured",
+ "processes": "unmeasured"
+ },
+ "items": [
+ {
+ "id": "cititem_go_runner",
+ "semanticKey": "node:interface:service/service.go:Runner",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "interface",
+ "name": "Runner",
+ "qualifiedName": "service/service.go::Runner",
+ "locator": "workspace://service/service.go#L3-L5"
+ },
+ {
+ "id": "cititem_go_service",
+ "semanticKey": "node:struct:service/service.go:Service",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "struct",
+ "name": "Service",
+ "qualifiedName": "service/service.go::Service",
+ "locator": "workspace://service/service.go#L7-L7"
+ },
+ {
+ "id": "cititem_go_service_run",
+ "semanticKey": "node:method:service/service.go:Service:Run",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "method",
+ "name": "Run",
+ "qualifiedName": "service/service.go::Service::Run",
+ "locator": "workspace://service/service.go#L9-L11"
+ },
+ {
+ "id": "cititem_go_use",
+ "semanticKey": "node:function:service/service.go:Use",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "function",
+ "name": "Use",
+ "qualifiedName": "service/service.go::Use",
+ "locator": "workspace://service/service.go#L13-L15"
+ },
+ {
+ "id": "cititem_go_item",
+ "semanticKey": "node:function:api/routes.go:Item",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "function",
+ "name": "Item",
+ "qualifiedName": "api/routes.go::Item",
+ "locator": "workspace://api/routes.go#L9-L9"
+ },
+ {
+ "id": "cititem_go_register",
+ "semanticKey": "node:function:api/routes.go:Register",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "function",
+ "name": "Register",
+ "qualifiedName": "api/routes.go::Register",
+ "locator": "workspace://api/routes.go#L11-L14"
+ },
+ {
+ "id": "cititem_go_build",
+ "semanticKey": "node:function:api/routes.go:Build",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "function",
+ "name": "Build",
+ "qualifiedName": "api/routes.go::Build",
+ "locator": "workspace://api/routes.go#L16-L18"
+ },
+ {
+ "id": "cititem_go_import_service",
+ "semanticKey": "edge:imports:api/routes.go:service/service.go",
+ "capability": "imports",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "imports",
+ "from": { "kind": "module", "name": "api_routes", "qualifiedName": "api/routes.go::api_routes", "locator": "workspace://api/routes.go#L1-L19" },
+ "to": { "kind": "module", "name": "service_service", "qualifiedName": "service/service.go::service_service", "locator": "workspace://service/service.go#L1-L16" },
+ "locator": "workspace://api/routes.go#L6-L6",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_go_import_service_not_net_http",
+ "semanticKey": "edge:imports:api/routes.go:service-line:not-net-http",
+ "capability": "imports",
+ "expectation": "absent",
+ "recordKind": "edge",
+ "kind": "imports",
+ "from": { "kind": "module", "name": "api_routes", "qualifiedName": "api/routes.go::api_routes", "locator": "workspace://api/routes.go#L1-L19" },
+ "to": { "kind": "module", "name": "net/http", "qualifiedName": "api/routes.go::net/http", "locator": "workspace://api/routes.go#L4-L4" },
+ "locator": "workspace://api/routes.go#L6-L6",
+ "resolution": "unresolved"
+ },
+ {
+ "id": "cititem_go_construct_service",
+ "semanticKey": "edge:constructs:api/routes.go:Build:Service",
+ "capability": "types",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "constructs",
+ "from": { "kind": "function", "name": "Build", "qualifiedName": "api/routes.go::Build", "locator": "workspace://api/routes.go#L16-L18" },
+ "to": { "kind": "struct", "name": "Service", "qualifiedName": "service/service.go::Service", "locator": "workspace://service/service.go#L7-L7" },
+ "locator": "workspace://api/routes.go#L17-L17",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_go_call_service_run",
+ "semanticKey": "edge:calls:service/service.go:Use:Service.Run",
+ "capability": "calls",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "calls",
+ "from": { "kind": "function", "name": "Use", "qualifiedName": "service/service.go::Use", "locator": "workspace://service/service.go#L13-L15" },
+ "to": { "kind": "method", "name": "Run", "qualifiedName": "service/service.go::Service::Run", "locator": "workspace://service/service.go#L9-L11" },
+ "locator": "workspace://service/service.go#L14-L14",
+ "resolution": "typed"
+ },
+ {
+ "id": "cititem_go_route_method_not_call",
+ "semanticKey": "edge:calls:api/routes.go:Register:GET:absent",
+ "capability": "calls",
+ "expectation": "absent",
+ "recordKind": "edge",
+ "kind": "calls",
+ "from": { "kind": "function", "name": "Register", "qualifiedName": "api/routes.go::Register", "locator": "workspace://api/routes.go#L11-L14" },
+ "to": { "kind": "function", "name": "Item", "qualifiedName": "api/routes.go::Item", "locator": "workspace://api/routes.go#L9-L9" },
+ "locator": "workspace://api/routes.go#L12-L12"
+ },
+ {
+ "id": "cititem_go_export_service",
+ "semanticKey": "edge:exports:service/service.go:Service",
+ "capability": "exports",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "exports",
+ "from": { "kind": "package", "name": "service", "qualifiedName": "service/service.go::service", "locator": "workspace://service/service.go#L1-L1" },
+ "to": { "kind": "struct", "name": "Service", "qualifiedName": "service/service.go::Service", "locator": "workspace://service/service.go#L7-L7" },
+ "locator": "workspace://service/service.go#L7-L7",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_go_import_net_http_not_exported",
+ "semanticKey": "edge:exports:api/routes.go:net-http:absent",
+ "capability": "exports",
+ "expectation": "absent",
+ "recordKind": "edge",
+ "kind": "exports",
+ "from": { "kind": "package", "name": "api", "qualifiedName": "api/routes.go::api", "locator": "workspace://api/routes.go#L1-L1" },
+ "to": { "kind": "module", "name": "net/http", "qualifiedName": "api/routes.go::net/http", "locator": "workspace://api/routes.go#L4-L4" },
+ "locator": "workspace://api/routes.go#L4-L4",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_go_gin_route",
+ "semanticKey": "edge:handles_route:api/routes.go:Item:GET_items_param",
+ "capability": "frameworks",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "handles_route",
+ "from": { "kind": "function", "name": "Item", "qualifiedName": "api/routes.go::Item", "locator": "workspace://api/routes.go#L9-L9" },
+ "to": { "kind": "route", "name": "GET_items_param", "qualifiedName": "api/routes.go::GET_items_param", "locator": "workspace://api/routes.go#L12-L12" },
+ "locator": "workspace://api/routes.go#L12-L12",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_go_net_http_route",
+ "semanticKey": "edge:handles_route:api/routes.go:Item:POST_legacy_param",
+ "capability": "frameworks",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "handles_route",
+ "from": { "kind": "function", "name": "Item", "qualifiedName": "api/routes.go::Item", "locator": "workspace://api/routes.go#L9-L9" },
+ "to": { "kind": "route", "name": "POST_legacy_param", "qualifiedName": "api/routes.go::POST_legacy_param", "locator": "workspace://api/routes.go#L13-L13" },
+ "locator": "workspace://api/routes.go#L13-L13",
+ "resolution": "exact"
+ }
+ ],
+ "truthFingerprint": "sha256:f19444472ffb7e452da25fd155dc62e45bbc1e02f6ef06642a2b1b396ac0165c"
+}
diff --git a/evals/code-intelligence/truth/fixtures/java.json b/evals/code-intelligence/truth/fixtures/java.json
new file mode 100644
index 00000000..9b173f6d
--- /dev/null
+++ b/evals/code-intelligence/truth/fixtures/java.json
@@ -0,0 +1,30 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_java_batch_c_fixture",
+ "language": "java",
+ "source": { "class": "fixture", "ref": "fixture://sha256:ad39462c53135511473eb41f8b657da328927345db347861b0a7ff10bdfc769c" },
+ "review": { "status": "reviewed", "method": "source-locator", "reviewedBy": "memory-recall-maintainer", "reviewedAt": "2026-07-16T00:00:00.000Z" },
+ "reviewCoverage": { "declarations": "sampled", "relationships": "sampled", "calls": "sampled" },
+ "capabilityClaims": { "parse": "partial", "structure": "partial", "imports": "partial", "exports": "unmeasured", "heritage": "partial", "types": "partial", "calls": "partial", "config": "unmeasured", "frameworks": "partial", "impact": "unmeasured", "processes": "unmeasured" },
+ "items": [
+ { "id": "cititem_java_package_service", "semanticKey": "node:package:service", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "package", "name": "com.acme.service", "qualifiedName": "src/main/java/com/acme/service/ItemService.java::com.acme.service", "locator": "workspace://src/main/java/com/acme/service/ItemService.java#L1-L1" },
+ { "id": "cititem_java_item_record", "semanticKey": "node:class:model:Item", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "class", "name": "Item", "qualifiedName": "src/main/java/com/acme/model/Item.java::com.acme.model::Item", "locator": "workspace://src/main/java/com/acme/model/Item.java#L3-L3" },
+ { "id": "cititem_java_item_loader", "semanticKey": "node:interface:service:ItemLoader", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "interface", "name": "ItemLoader", "qualifiedName": "src/main/java/com/acme/service/ItemService.java::com.acme.service::ItemLoader", "locator": "workspace://src/main/java/com/acme/service/ItemService.java#L5-L7" },
+ { "id": "cititem_java_item_service", "semanticKey": "node:class:service:ItemService", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "class", "name": "ItemService", "qualifiedName": "src/main/java/com/acme/service/ItemService.java::com.acme.service::ItemService", "locator": "workspace://src/main/java/com/acme/service/ItemService.java#L9-L21" },
+ { "id": "cititem_java_service_find", "semanticKey": "node:method:service:find-string", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "find(String)", "qualifiedName": "src/main/java/com/acme/service/ItemService.java::com.acme.service::ItemService::find(String)", "locator": "workspace://src/main/java/com/acme/service/ItemService.java#L10-L12" },
+ { "id": "cititem_java_service_load_string", "semanticKey": "node:method:service:load-string", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "load(String)", "qualifiedName": "src/main/java/com/acme/service/ItemService.java::com.acme.service::ItemService::load(String)", "locator": "workspace://src/main/java/com/acme/service/ItemService.java#L14-L16" },
+ { "id": "cititem_java_service_load_long", "semanticKey": "node:method:service:load-long", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "load(long)", "qualifiedName": "src/main/java/com/acme/service/ItemService.java::com.acme.service::ItemService::load(long)", "locator": "workspace://src/main/java/com/acme/service/ItemService.java#L18-L20" },
+ { "id": "cititem_java_controller", "semanticKey": "node:class:api:ItemController", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "class", "name": "ItemController", "qualifiedName": "src/main/java/com/acme/api/ItemController.java::com.acme.api::ItemController", "locator": "workspace://src/main/java/com/acme/api/ItemController.java#L9-L26" },
+ { "id": "cititem_java_controller_get", "semanticKey": "node:method:api:get-string", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "get(String)", "qualifiedName": "src/main/java/com/acme/api/ItemController.java::com.acme.api::ItemController::get(String)", "locator": "workspace://src/main/java/com/acme/api/ItemController.java#L18-L21" },
+ { "id": "cititem_java_route_get_items", "semanticKey": "node:route:GET-items-param", "capability": "frameworks", "expectation": "present", "recordKind": "node", "kind": "route", "name": "GET_items_param", "qualifiedName": "src/main/java/com/acme/api/ItemController.java::GET_items_param", "locator": "workspace://src/main/java/com/acme/api/ItemController.java#L18-L21" },
+ { "id": "cititem_java_import_item", "semanticKey": "edge:imports:service:model", "capability": "imports", "expectation": "present", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "src_main_java_com_acme_service_ItemService", "locator": "workspace://src/main/java/com/acme/service/ItemService.java#L1-L22" }, "to": { "kind": "module", "name": "src_main_java_com_acme_model_Item", "locator": "workspace://src/main/java/com/acme/model/Item.java#L1-L4" }, "locator": "workspace://src/main/java/com/acme/service/ItemService.java#L3-L3", "resolution": "exact" },
+ { "id": "cititem_java_implements_loader", "semanticKey": "edge:implements:ItemService:ItemLoader", "capability": "heritage", "expectation": "present", "recordKind": "edge", "kind": "implements", "from": { "kind": "class", "name": "ItemService", "locator": "workspace://src/main/java/com/acme/service/ItemService.java#L9-L21" }, "to": { "kind": "interface", "name": "ItemLoader", "locator": "workspace://src/main/java/com/acme/service/ItemService.java#L5-L7" }, "locator": "workspace://src/main/java/com/acme/service/ItemService.java#L9-L21", "resolution": "exact" },
+ { "id": "cititem_java_construct_item", "semanticKey": "edge:constructs:find:Item", "capability": "types", "expectation": "present", "recordKind": "edge", "kind": "constructs", "from": { "kind": "method", "name": "find(String)", "qualifiedName": "src/main/java/com/acme/service/ItemService.java::com.acme.service::ItemService::find(String)", "locator": "workspace://src/main/java/com/acme/service/ItemService.java#L10-L12" }, "to": { "kind": "class", "name": "Item", "locator": "workspace://src/main/java/com/acme/model/Item.java#L3-L3" }, "locator": "workspace://src/main/java/com/acme/service/ItemService.java#L11-L11", "resolution": "exact" },
+ { "id": "cititem_java_call_controller_find", "semanticKey": "edge:calls:controller-get:service-find", "capability": "calls", "expectation": "present", "recordKind": "edge", "kind": "calls", "from": { "kind": "method", "name": "get(String)", "locator": "workspace://src/main/java/com/acme/api/ItemController.java#L18-L21" }, "to": { "kind": "method", "name": "find(String)", "qualifiedName": "src/main/java/com/acme/service/ItemService.java::com.acme.service::ItemService::find(String)", "locator": "workspace://src/main/java/com/acme/service/ItemService.java#L10-L12" }, "locator": "workspace://src/main/java/com/acme/api/ItemController.java#L20-L20", "resolution": "typed" },
+ { "id": "cititem_java_call_load_find", "semanticKey": "edge:calls:load-string:find", "capability": "calls", "expectation": "present", "recordKind": "edge", "kind": "calls", "from": { "kind": "method", "name": "load(String)", "locator": "workspace://src/main/java/com/acme/service/ItemService.java#L14-L16" }, "to": { "kind": "method", "name": "find(String)", "qualifiedName": "src/main/java/com/acme/service/ItemService.java::com.acme.service::ItemService::find(String)", "locator": "workspace://src/main/java/com/acme/service/ItemService.java#L10-L12" }, "locator": "workspace://src/main/java/com/acme/service/ItemService.java#L15-L15", "resolution": "typed" },
+ { "id": "cititem_java_call_ambiguous_absent", "semanticKey": "edge:calls:ambiguous:load-string", "capability": "calls", "expectation": "absent", "recordKind": "edge", "kind": "calls", "from": { "kind": "method", "name": "ambiguous(String)", "locator": "workspace://src/main/java/com/acme/api/ItemController.java#L23-L25" }, "to": { "kind": "method", "name": "load(String)", "locator": "workspace://src/main/java/com/acme/service/ItemService.java#L14-L16" }, "locator": "workspace://src/main/java/com/acme/api/ItemController.java#L24-L24", "resolution": "typed" },
+ { "id": "cititem_java_handles_route", "semanticKey": "edge:handles-route:get-items", "capability": "frameworks", "expectation": "present", "recordKind": "edge", "kind": "handles_route", "from": { "kind": "method", "name": "get(String)", "locator": "workspace://src/main/java/com/acme/api/ItemController.java#L18-L21" }, "to": { "kind": "route", "name": "GET_items_param", "locator": "workspace://src/main/java/com/acme/api/ItemController.java#L18-L21" }, "locator": "workspace://src/main/java/com/acme/api/ItemController.java#L18-L21", "resolution": "exact" }
+ ],
+ "truthFingerprint": "sha256:479156702942abbf5b1f735fd394fa515b39045992cd69c433e37c2394f71edc"
+}
diff --git a/evals/code-intelligence/truth/fixtures/javascript.json b/evals/code-intelligence/truth/fixtures/javascript.json
new file mode 100644
index 00000000..d6ebdeab
--- /dev/null
+++ b/evals/code-intelligence/truth/fixtures/javascript.json
@@ -0,0 +1,146 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_javascript_import_call_fixture",
+ "language": "javascript",
+ "source": {
+ "class": "fixture",
+ "ref": "fixture://sha256:1b50b0e6528f5495afff53ce1dd819b6201f81d7d0558f8dce6baa8f9c928e02"
+ },
+ "review": {
+ "status": "reviewed",
+ "method": "source-locator",
+ "reviewedBy": "memory-recall-maintainer",
+ "reviewedAt": "2026-07-16T00:00:00.000Z"
+ },
+ "reviewCoverage": {
+ "declarations": "exhaustive",
+ "relationships": "exhaustive",
+ "calls": "exhaustive"
+ },
+ "capabilityClaims": {
+ "parse": "partial",
+ "structure": "partial",
+ "imports": "partial",
+ "exports": "partial",
+ "heritage": "unmeasured",
+ "types": "partial",
+ "calls": "partial",
+ "config": "unmeasured",
+ "frameworks": "unmeasured",
+ "impact": "unmeasured",
+ "processes": "unmeasured"
+ },
+ "items": [
+ {
+ "id": "cititem_javascript_helper",
+ "semanticKey": "node:function:helper.js:helper",
+ "capability": "types",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "function",
+ "name": "helper",
+ "qualifiedName": "helper.js::helper",
+ "locator": "workspace://helper.js#L1-L1"
+ },
+ {
+ "id": "cititem_javascript_health",
+ "semanticKey": "node:function:routes/health.js:health",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "function",
+ "name": "health",
+ "qualifiedName": "routes/health.js::health",
+ "locator": "workspace://routes/health.js#L2-L2"
+ },
+ {
+ "id": "cititem_javascript_import_helper",
+ "semanticKey": "edge:imports:routes/health.js:helper.js",
+ "capability": "imports",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "imports",
+ "from": {
+ "kind": "module",
+ "name": "routes_health",
+ "qualifiedName": "routes/health.js::routes_health",
+ "locator": "workspace://routes/health.js#L1-L3"
+ },
+ "to": {
+ "kind": "module",
+ "name": "helper",
+ "qualifiedName": "helper.js::helper",
+ "locator": "workspace://helper.js#L1-L2"
+ },
+ "locator": "workspace://routes/health.js#L1-L1",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_javascript_export_health",
+ "semanticKey": "edge:exports:routes/health.js:health",
+ "capability": "exports",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "exports",
+ "from": {
+ "kind": "module",
+ "name": "routes_health",
+ "qualifiedName": "routes/health.js::routes_health",
+ "locator": "workspace://routes/health.js#L1-L3"
+ },
+ "to": {
+ "kind": "function",
+ "name": "health",
+ "qualifiedName": "routes/health.js::health",
+ "locator": "workspace://routes/health.js#L2-L2"
+ },
+ "locator": "workspace://routes/health.js#L2-L2",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_javascript_call_helper",
+ "semanticKey": "edge:calls:routes/health.js:health:helper",
+ "capability": "calls",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "calls",
+ "from": {
+ "kind": "function",
+ "name": "health",
+ "qualifiedName": "routes/health.js::health",
+ "locator": "workspace://routes/health.js#L2-L2"
+ },
+ "to": {
+ "kind": "function",
+ "name": "helper",
+ "qualifiedName": "helper.js::helper",
+ "locator": "workspace://helper.js#L1-L1"
+ },
+ "locator": "workspace://routes/health.js#L2-L2",
+ "resolution": "inferred"
+ },
+ {
+ "id": "cititem_javascript_call_module_absent",
+ "semanticKey": "edge:calls:routes/health.js:health:module:absent",
+ "capability": "calls",
+ "expectation": "absent",
+ "recordKind": "edge",
+ "kind": "calls",
+ "from": {
+ "kind": "function",
+ "name": "health",
+ "qualifiedName": "routes/health.js::health",
+ "locator": "workspace://routes/health.js#L2-L2"
+ },
+ "to": {
+ "kind": "module",
+ "name": "helper",
+ "qualifiedName": "helper.js::helper",
+ "locator": "workspace://helper.js#L1-L1"
+ },
+ "locator": "workspace://routes/health.js#L2-L2"
+ }
+ ],
+ "truthFingerprint": "sha256:2eabc4fc261ed2d4c886ec5dd24c8cbd5722c179d5af913d1cb5c00ca845ce55"
+}
diff --git a/evals/code-intelligence/truth/fixtures/kotlin.json b/evals/code-intelligence/truth/fixtures/kotlin.json
new file mode 100644
index 00000000..4332fa44
--- /dev/null
+++ b/evals/code-intelligence/truth/fixtures/kotlin.json
@@ -0,0 +1,31 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_kotlin_batch_c_fixture",
+ "language": "kotlin",
+ "source": { "class": "fixture", "ref": "fixture://sha256:cfff5566f8341ab07fb7b53d900368fbf47cb2535fcec14ad2c8a1b2a7cccac5" },
+ "review": { "status": "reviewed", "method": "source-locator", "reviewedBy": "memory-recall-maintainer", "reviewedAt": "2026-07-16T00:00:00.000Z" },
+ "reviewCoverage": { "declarations": "sampled", "relationships": "sampled", "calls": "sampled" },
+ "capabilityClaims": { "parse": "partial", "structure": "partial", "imports": "partial", "exports": "unmeasured", "heritage": "partial", "types": "partial", "calls": "partial", "config": "unmeasured", "frameworks": "partial", "impact": "unmeasured", "processes": "unmeasured" },
+ "items": [
+ { "id": "cititem_kotlin_package_service", "semanticKey": "node:package:service", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "package", "name": "com.acme.service", "qualifiedName": "src/main/kotlin/com/acme/service/ItemService.kt::com.acme.service", "locator": "workspace://src/main/kotlin/com/acme/service/ItemService.kt#L1-L1" },
+ { "id": "cititem_kotlin_item_data", "semanticKey": "node:class:model:Item", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "class", "name": "Item", "qualifiedName": "src/main/kotlin/com/acme/model/Item.kt::com.acme.model::Item", "locator": "workspace://src/main/kotlin/com/acme/model/Item.kt#L3-L3" },
+ { "id": "cititem_kotlin_loader", "semanticKey": "node:interface:service:ItemLoader", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "interface", "name": "ItemLoader", "qualifiedName": "src/main/kotlin/com/acme/service/ItemService.kt::com.acme.service::ItemLoader", "locator": "workspace://src/main/kotlin/com/acme/service/ItemService.kt#L5-L7" },
+ { "id": "cititem_kotlin_service", "semanticKey": "node:class:service:ItemService", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "class", "name": "ItemService", "qualifiedName": "src/main/kotlin/com/acme/service/ItemService.kt::com.acme.service::ItemService", "locator": "workspace://src/main/kotlin/com/acme/service/ItemService.kt#L9-L15" },
+ { "id": "cititem_kotlin_find", "semanticKey": "node:method:service:find-string", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "find(String)", "qualifiedName": "src/main/kotlin/com/acme/service/ItemService.kt::com.acme.service::ItemService::find(String)", "locator": "workspace://src/main/kotlin/com/acme/service/ItemService.kt#L10-L10" },
+ { "id": "cititem_kotlin_load_string", "semanticKey": "node:method:service:load-string", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "load(String)", "qualifiedName": "src/main/kotlin/com/acme/service/ItemService.kt::com.acme.service::ItemService::load(String)", "locator": "workspace://src/main/kotlin/com/acme/service/ItemService.kt#L12-L12" },
+ { "id": "cititem_kotlin_load_long", "semanticKey": "node:method:service:load-long", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "load(Long)", "qualifiedName": "src/main/kotlin/com/acme/service/ItemService.kt::com.acme.service::ItemService::load(Long)", "locator": "workspace://src/main/kotlin/com/acme/service/ItemService.kt#L14-L14" },
+ { "id": "cititem_kotlin_summary_extension", "semanticKey": "node:function:service:summary", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "function", "name": "summary()", "qualifiedName": "src/main/kotlin/com/acme/service/ItemService.kt::com.acme.service::summary()", "locator": "workspace://src/main/kotlin/com/acme/service/ItemService.kt#L17-L17" },
+ { "id": "cititem_kotlin_describe", "semanticKey": "node:function:service:describe", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "function", "name": "describe(Item)", "qualifiedName": "src/main/kotlin/com/acme/service/ItemService.kt::com.acme.service::describe(Item)", "locator": "workspace://src/main/kotlin/com/acme/service/ItemService.kt#L19-L19" },
+ { "id": "cititem_kotlin_item_routes", "semanticKey": "node:function:api:itemRoutes", "capability": "frameworks", "expectation": "present", "recordKind": "node", "kind": "function", "name": "itemRoutes(ItemService)", "qualifiedName": "src/main/kotlin/com/acme/api/Routes.kt::com.acme.api::itemRoutes(ItemService)", "locator": "workspace://src/main/kotlin/com/acme/api/Routes.kt#L9-L15" },
+ { "id": "cititem_kotlin_route_get_items", "semanticKey": "node:route:GET-items-param", "capability": "frameworks", "expectation": "present", "recordKind": "node", "kind": "route", "name": "GET_items_param", "qualifiedName": "src/main/kotlin/com/acme/api/Routes.kt::GET_items_param", "locator": "workspace://src/main/kotlin/com/acme/api/Routes.kt#L11-L11" },
+ { "id": "cititem_kotlin_import_service", "semanticKey": "edge:imports:api:service", "capability": "imports", "expectation": "present", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "src_main_kotlin_com_acme_api_Routes", "locator": "workspace://src/main/kotlin/com/acme/api/Routes.kt#L1-L16" }, "to": { "kind": "module", "name": "src_main_kotlin_com_acme_service_ItemService", "locator": "workspace://src/main/kotlin/com/acme/service/ItemService.kt#L1-L20" }, "locator": "workspace://src/main/kotlin/com/acme/api/Routes.kt#L3-L3", "resolution": "exact" },
+ { "id": "cititem_kotlin_import_service_not_model", "semanticKey": "edge:imports:api:service-line:not-model", "capability": "imports", "expectation": "absent", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "src_main_kotlin_com_acme_api_Routes", "locator": "workspace://src/main/kotlin/com/acme/api/Routes.kt#L1-L16" }, "to": { "kind": "module", "name": "src_main_kotlin_com_acme_model_Item", "locator": "workspace://src/main/kotlin/com/acme/model/Item.kt#L1-L4" }, "locator": "workspace://src/main/kotlin/com/acme/api/Routes.kt#L3-L3", "resolution": "exact" },
+ { "id": "cititem_kotlin_implements_loader", "semanticKey": "edge:implements:ItemService:ItemLoader", "capability": "heritage", "expectation": "present", "recordKind": "edge", "kind": "implements", "from": { "kind": "class", "name": "ItemService", "locator": "workspace://src/main/kotlin/com/acme/service/ItemService.kt#L9-L15" }, "to": { "kind": "interface", "name": "ItemLoader", "locator": "workspace://src/main/kotlin/com/acme/service/ItemService.kt#L5-L7" }, "locator": "workspace://src/main/kotlin/com/acme/service/ItemService.kt#L9-L15", "resolution": "exact" },
+ { "id": "cititem_kotlin_construct_item", "semanticKey": "edge:constructs:find:Item", "capability": "types", "expectation": "present", "recordKind": "edge", "kind": "constructs", "from": { "kind": "method", "name": "find(String)", "qualifiedName": "src/main/kotlin/com/acme/service/ItemService.kt::com.acme.service::ItemService::find(String)", "locator": "workspace://src/main/kotlin/com/acme/service/ItemService.kt#L10-L10" }, "to": { "kind": "class", "name": "Item", "locator": "workspace://src/main/kotlin/com/acme/model/Item.kt#L3-L3" }, "locator": "workspace://src/main/kotlin/com/acme/service/ItemService.kt#L10-L10", "resolution": "exact" },
+ { "id": "cititem_kotlin_call_route_find", "semanticKey": "edge:calls:itemRoutes:find", "capability": "calls", "expectation": "present", "recordKind": "edge", "kind": "calls", "from": { "kind": "function", "name": "itemRoutes(ItemService)", "locator": "workspace://src/main/kotlin/com/acme/api/Routes.kt#L9-L15" }, "to": { "kind": "method", "name": "find(String)", "qualifiedName": "src/main/kotlin/com/acme/service/ItemService.kt::com.acme.service::ItemService::find(String)", "locator": "workspace://src/main/kotlin/com/acme/service/ItemService.kt#L10-L10" }, "locator": "workspace://src/main/kotlin/com/acme/api/Routes.kt#L12-L12", "resolution": "typed" },
+ { "id": "cititem_kotlin_call_extension", "semanticKey": "edge:calls:describe:summary", "capability": "calls", "expectation": "present", "recordKind": "edge", "kind": "calls", "from": { "kind": "function", "name": "describe(Item)", "locator": "workspace://src/main/kotlin/com/acme/service/ItemService.kt#L19-L19" }, "to": { "kind": "function", "name": "summary()", "locator": "workspace://src/main/kotlin/com/acme/service/ItemService.kt#L17-L17" }, "locator": "workspace://src/main/kotlin/com/acme/service/ItemService.kt#L19-L19", "resolution": "typed" },
+ { "id": "cititem_kotlin_handles_route", "semanticKey": "edge:handles-route:get-items", "capability": "frameworks", "expectation": "present", "recordKind": "edge", "kind": "handles_route", "from": { "kind": "function", "name": "itemRoutes(ItemService)", "locator": "workspace://src/main/kotlin/com/acme/api/Routes.kt#L9-L15" }, "to": { "kind": "route", "name": "GET_items_param", "locator": "workspace://src/main/kotlin/com/acme/api/Routes.kt#L11-L11" }, "locator": "workspace://src/main/kotlin/com/acme/api/Routes.kt#L11-L11", "resolution": "exact" }
+ ],
+ "truthFingerprint": "sha256:667a5b05ec8511f3f9e0ecbb3e8d871032db99f53b2f170b46e02ac9cd450535"
+}
diff --git a/evals/code-intelligence/truth/fixtures/php.json b/evals/code-intelligence/truth/fixtures/php.json
new file mode 100644
index 00000000..8c5f6773
--- /dev/null
+++ b/evals/code-intelligence/truth/fixtures/php.json
@@ -0,0 +1,29 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_php_batch_e_fixture",
+ "language": "php",
+ "source": { "class": "fixture", "ref": "fixture://sha256:f140770e8d32cf6ce01974a9440753f70d3a86c83ab387fcad2ee00c886f8b7d" },
+ "review": { "status": "reviewed", "method": "source-locator", "reviewedBy": "memory-recall-maintainer", "reviewedAt": "2026-07-16T00:00:00.000Z" },
+ "reviewCoverage": { "declarations": "sampled", "relationships": "sampled", "calls": "sampled" },
+ "capabilityClaims": { "parse": "partial", "structure": "partial", "imports": "partial", "exports": "unmeasured", "heritage": "partial", "types": "partial", "calls": "partial", "config": "unmeasured", "frameworks": "partial", "impact": "unmeasured", "processes": "unmeasured" },
+ "items": [
+ { "id": "cititem_php_namespace_app", "semanticKey": "node:namespace:App", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "namespace", "name": "App", "qualifiedName": "src/ItemService.php::App", "locator": "workspace://src/ItemService.php#L2-L2" },
+ { "id": "cititem_php_interface_loader", "semanticKey": "node:interface:ItemLoader", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "interface", "name": "ItemLoader", "qualifiedName": "src/Contracts/ItemLoader.php::App.Contracts::ItemLoader", "locator": "workspace://src/Contracts/ItemLoader.php#L4-L7" },
+ { "id": "cititem_php_trait_logs", "semanticKey": "node:trait:LogsItems", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "trait", "name": "LogsItems", "qualifiedName": "src/Support/LogsItems.php::App.Support::LogsItems", "locator": "workspace://src/Support/LogsItems.php#L4-L7" },
+ { "id": "cititem_php_class_service", "semanticKey": "node:class:ItemService", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "class", "name": "ItemService", "qualifiedName": "src/ItemService.php::App::ItemService", "locator": "workspace://src/ItemService.php#L7-L20" },
+ { "id": "cititem_php_function_describe", "semanticKey": "node:function:describe", "capability": "types", "expectation": "present", "recordKind": "node", "kind": "function", "name": "describe", "qualifiedName": "src/ItemService.php::App::describe", "locator": "workspace://src/ItemService.php#L22-L25" },
+ { "id": "cititem_php_method_summary", "semanticKey": "node:method:summary", "capability": "types", "expectation": "present", "recordKind": "node", "kind": "method", "name": "summary", "qualifiedName": "src/ItemService.php::App::ItemService::summary", "locator": "workspace://src/ItemService.php#L16-L19" },
+ { "id": "cititem_php_store_constructs_item", "semanticKey": "edge:constructs:ItemController-store:Item", "capability": "types", "expectation": "present", "recordKind": "edge", "kind": "constructs", "from": { "kind": "method", "name": "store", "qualifiedName": "src/Controller/ItemController.php::App.Controller::ItemController::store", "locator": "workspace://src/Controller/ItemController.php#L15-L18" }, "to": { "kind": "class", "name": "Item", "qualifiedName": "src/Item.php::App::Item", "locator": "workspace://src/Item.php#L4-L7" }, "locator": "workspace://src/Controller/ItemController.php#L17-L17", "resolution": "exact" },
+ { "id": "cititem_php_import_loader", "semanticKey": "edge:imports:ItemService:ItemLoader", "capability": "imports", "expectation": "present", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "src_ItemService", "locator": "workspace://src/ItemService.php#L1-L26" }, "to": { "kind": "module", "name": "src_Contracts_ItemLoader", "locator": "workspace://src/Contracts/ItemLoader.php#L1-L8" }, "locator": "workspace://src/ItemService.php#L4-L4", "resolution": "exact" },
+ { "id": "cititem_php_import_loader_not_logs", "semanticKey": "edge:imports:ItemService:loader-line:not-logs", "capability": "imports", "expectation": "absent", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "src_ItemService", "locator": "workspace://src/ItemService.php#L1-L26" }, "to": { "kind": "module", "name": "src_Support_LogsItems", "locator": "workspace://src/Support/LogsItems.php#L1-L8" }, "locator": "workspace://src/ItemService.php#L4-L4", "resolution": "exact" },
+ { "id": "cititem_php_defines_service", "semanticKey": "edge:defines:App:ItemService", "capability": "structure", "expectation": "present", "recordKind": "edge", "kind": "defines", "from": { "kind": "namespace", "name": "App", "locator": "workspace://src/ItemService.php#L2-L2" }, "to": { "kind": "class", "name": "ItemService", "locator": "workspace://src/ItemService.php#L7-L20" }, "locator": "workspace://src/ItemService.php#L7-L20", "resolution": "exact" },
+ { "id": "cititem_php_extends_base", "semanticKey": "edge:extends:ItemService:BaseService", "capability": "heritage", "expectation": "present", "recordKind": "edge", "kind": "extends", "from": { "kind": "class", "name": "ItemService", "locator": "workspace://src/ItemService.php#L7-L20" }, "to": { "kind": "class", "name": "BaseService", "locator": "workspace://src/BaseService.php#L4-L4" }, "locator": "workspace://src/ItemService.php#L7-L20", "resolution": "exact" },
+ { "id": "cititem_php_implements_loader", "semanticKey": "edge:implements:ItemService:ItemLoader", "capability": "heritage", "expectation": "present", "recordKind": "edge", "kind": "implements", "from": { "kind": "class", "name": "ItemService", "locator": "workspace://src/ItemService.php#L7-L20" }, "to": { "kind": "interface", "name": "ItemLoader", "locator": "workspace://src/Contracts/ItemLoader.php#L4-L7" }, "locator": "workspace://src/ItemService.php#L7-L20", "resolution": "exact" },
+ { "id": "cititem_php_mixes_trait", "semanticKey": "edge:mixes-in:ItemService:LogsItems", "capability": "heritage", "expectation": "present", "recordKind": "edge", "kind": "mixes_in", "from": { "kind": "class", "name": "ItemService", "locator": "workspace://src/ItemService.php#L7-L20" }, "to": { "kind": "trait", "name": "LogsItems", "locator": "workspace://src/Support/LogsItems.php#L4-L7" }, "locator": "workspace://src/ItemService.php#L9-L9", "resolution": "exact" },
+ { "id": "cititem_php_call_summary", "semanticKey": "edge:calls:describe:summary", "capability": "calls", "expectation": "present", "recordKind": "edge", "kind": "calls", "from": { "kind": "function", "name": "describe", "locator": "workspace://src/ItemService.php#L22-L25" }, "to": { "kind": "method", "name": "summary", "locator": "workspace://src/ItemService.php#L16-L19" }, "locator": "workspace://src/ItemService.php#L24-L24", "resolution": "typed" },
+ { "id": "cititem_php_route_laravel", "semanticKey": "edge:handles-route:store:POST-items", "capability": "frameworks", "expectation": "present", "recordKind": "edge", "kind": "handles_route", "from": { "kind": "method", "name": "store", "locator": "workspace://src/Controller/ItemController.php#L15-L18" }, "to": { "kind": "route", "name": "POST_items", "locator": "workspace://routes/web.php#L5-L5" }, "locator": "workspace://routes/web.php#L5-L5", "resolution": "exact" },
+ { "id": "cititem_php_route_symfony", "semanticKey": "edge:handles-route:show:GET-items", "capability": "frameworks", "expectation": "present", "recordKind": "edge", "kind": "handles_route", "from": { "kind": "method", "name": "show", "locator": "workspace://src/Controller/ItemController.php#L9-L13" }, "to": { "kind": "route", "name": "GET_items_param", "locator": "workspace://src/Controller/ItemController.php#L9-L13" }, "locator": "workspace://src/Controller/ItemController.php#L9-L13", "resolution": "exact" }
+ ],
+ "truthFingerprint": "sha256:72a5998341e9d8f874211932153895e5b8db8194431b5cb0501ef606f6438224"
+}
diff --git a/evals/code-intelligence/truth/fixtures/python.json b/evals/code-intelligence/truth/fixtures/python.json
new file mode 100644
index 00000000..dbd66397
--- /dev/null
+++ b/evals/code-intelligence/truth/fixtures/python.json
@@ -0,0 +1,221 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_python_batch_b_fixture",
+ "language": "python",
+ "source": {
+ "class": "fixture",
+ "ref": "fixture://sha256:fa53fbfa008dd69235e34438208448cf5973aade4f30deee64fc92a3b144f8bb"
+ },
+ "review": {
+ "status": "reviewed",
+ "method": "source-locator",
+ "reviewedBy": "memory-recall-maintainer",
+ "reviewedAt": "2026-07-17T19:14:11.000Z"
+ },
+ "reviewCoverage": {
+ "declarations": "exhaustive",
+ "relationships": "exhaustive",
+ "calls": "exhaustive"
+ },
+ "capabilityClaims": {
+ "parse": "partial",
+ "structure": "partial",
+ "imports": "partial",
+ "exports": "unmeasured",
+ "heritage": "partial",
+ "types": "partial",
+ "calls": "partial",
+ "config": "partial",
+ "frameworks": "partial",
+ "impact": "unmeasured",
+ "processes": "unmeasured"
+ },
+ "items": [
+ {
+ "id": "cititem_python_base_service",
+ "semanticKey": "node:class:src/demo_app/base.py:BaseService",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "class",
+ "name": "BaseService",
+ "qualifiedName": "src/demo_app/base.py::BaseService",
+ "locator": "workspace://src/demo_app/base.py#L1-L3"
+ },
+ {
+ "id": "cititem_python_base_run",
+ "semanticKey": "node:method:src/demo_app/base.py:BaseService:run",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "method",
+ "name": "run",
+ "qualifiedName": "src/demo_app/base.py::BaseService::run",
+ "locator": "workspace://src/demo_app/base.py#L2-L3"
+ },
+ {
+ "id": "cititem_python_service",
+ "semanticKey": "node:class:src/demo_app/service.py:Service",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "class",
+ "name": "Service",
+ "qualifiedName": "src/demo_app/service.py::Service",
+ "locator": "workspace://src/demo_app/service.py#L4-L6"
+ },
+ {
+ "id": "cititem_python_service_run",
+ "semanticKey": "node:method:src/demo_app/service.py:Service:run",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "method",
+ "name": "run",
+ "qualifiedName": "src/demo_app/service.py::Service::run",
+ "locator": "workspace://src/demo_app/service.py#L5-L6"
+ },
+ {
+ "id": "cititem_python_read_item",
+ "semanticKey": "node:function:src/demo_app/api.py:read_item",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "function",
+ "name": "read_item",
+ "qualifiedName": "src/demo_app/api.py::read_item",
+ "locator": "workspace://src/demo_app/api.py#L10-L12"
+ },
+ {
+ "id": "cititem_python_legacy_item",
+ "semanticKey": "node:function:src/demo_app/api.py:legacy_item",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "function",
+ "name": "legacy_item",
+ "qualifiedName": "src/demo_app/api.py::legacy_item",
+ "locator": "workspace://src/demo_app/api.py#L15-L16"
+ },
+ {
+ "id": "cititem_python_config_pyproject",
+ "semanticKey": "node:configuration-resource:pyproject:demo-app",
+ "capability": "config",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "configuration_resource",
+ "name": "demo_app",
+ "qualifiedName": "pyproject.toml::demo_app",
+ "locator": "workspace://pyproject.toml#L2-L2"
+ },
+ {
+ "id": "cititem_python_config_pyproject_package",
+ "semanticKey": "edge:depends-on:pyproject:demo-app-package",
+ "capability": "config",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "depends_on",
+ "from": { "kind": "configuration_resource", "name": "demo_app", "qualifiedName": "pyproject.toml::demo_app", "locator": "workspace://pyproject.toml#L2-L2" },
+ "to": { "kind": "package", "name": "demo_app", "qualifiedName": "pyproject.toml::demo_app", "locator": "workspace://pyproject.toml#L2-L2" },
+ "locator": "workspace://pyproject.toml#L2-L2",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_python_import_base",
+ "semanticKey": "edge:imports:src/demo_app/service.py:src/demo_app/base.py",
+ "capability": "imports",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "imports",
+ "from": { "kind": "module", "name": "src_demo_app_service", "qualifiedName": "src/demo_app/service.py::src_demo_app_service", "locator": "workspace://src/demo_app/service.py#L1-L7" },
+ "to": { "kind": "module", "name": "src_demo_app_base", "qualifiedName": "src/demo_app/base.py::src_demo_app_base", "locator": "workspace://src/demo_app/base.py#L1-L4" },
+ "locator": "workspace://src/demo_app/service.py#L1-L1",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_python_import_service",
+ "semanticKey": "edge:imports:src/demo_app/api.py:src/demo_app/service.py",
+ "capability": "imports",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "imports",
+ "from": { "kind": "module", "name": "src_demo_app_api", "qualifiedName": "src/demo_app/api.py::src_demo_app_api", "locator": "workspace://src/demo_app/api.py#L1-L20" },
+ "to": { "kind": "module", "name": "src_demo_app_service", "qualifiedName": "src/demo_app/service.py::src_demo_app_service", "locator": "workspace://src/demo_app/service.py#L1-L7" },
+ "locator": "workspace://src/demo_app/api.py#L2-L2",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_python_extends_base",
+ "semanticKey": "edge:extends:src/demo_app/service.py:Service:BaseService",
+ "capability": "heritage",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "extends",
+ "from": { "kind": "class", "name": "Service", "qualifiedName": "src/demo_app/service.py::Service", "locator": "workspace://src/demo_app/service.py#L4-L6" },
+ "to": { "kind": "class", "name": "BaseService", "qualifiedName": "src/demo_app/base.py::BaseService", "locator": "workspace://src/demo_app/base.py#L1-L3" },
+ "locator": "workspace://src/demo_app/service.py#L4-L6",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_python_construct_service",
+ "semanticKey": "edge:constructs:src/demo_app/api.py:read_item:Service",
+ "capability": "types",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "constructs",
+ "from": { "kind": "function", "name": "read_item", "qualifiedName": "src/demo_app/api.py::read_item", "locator": "workspace://src/demo_app/api.py#L10-L12" },
+ "to": { "kind": "class", "name": "Service", "qualifiedName": "src/demo_app/service.py::Service", "locator": "workspace://src/demo_app/service.py#L4-L6" },
+ "locator": "workspace://src/demo_app/api.py#L11-L11",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_python_call_service_run",
+ "semanticKey": "edge:calls:src/demo_app/api.py:read_item:Service.run",
+ "capability": "calls",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "calls",
+ "from": { "kind": "function", "name": "read_item", "qualifiedName": "src/demo_app/api.py::read_item", "locator": "workspace://src/demo_app/api.py#L10-L12" },
+ "to": { "kind": "method", "name": "run", "qualifiedName": "src/demo_app/service.py::Service::run", "locator": "workspace://src/demo_app/service.py#L5-L6" },
+ "locator": "workspace://src/demo_app/api.py#L12-L12",
+ "resolution": "typed"
+ },
+ {
+ "id": "cititem_python_constructor_not_call",
+ "semanticKey": "edge:calls:src/demo_app/api.py:read_item:Service:absent",
+ "capability": "calls",
+ "expectation": "absent",
+ "recordKind": "edge",
+ "kind": "calls",
+ "from": { "kind": "function", "name": "read_item", "qualifiedName": "src/demo_app/api.py::read_item", "locator": "workspace://src/demo_app/api.py#L10-L12" },
+ "to": { "kind": "class", "name": "Service", "qualifiedName": "src/demo_app/service.py::Service", "locator": "workspace://src/demo_app/service.py#L4-L6" },
+ "locator": "workspace://src/demo_app/api.py#L11-L11"
+ },
+ {
+ "id": "cititem_python_fastapi_route",
+ "semanticKey": "edge:handles_route:src/demo_app/api.py:read_item:GET_items_param",
+ "capability": "frameworks",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "handles_route",
+ "from": { "kind": "function", "name": "read_item", "qualifiedName": "src/demo_app/api.py::read_item", "locator": "workspace://src/demo_app/api.py#L10-L12" },
+ "to": { "kind": "route", "name": "GET_items_param", "qualifiedName": "src/demo_app/api.py::GET_items_param", "locator": "workspace://src/demo_app/api.py#L9-L12" },
+ "locator": "workspace://src/demo_app/api.py#L9-L12",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_python_django_route",
+ "semanticKey": "edge:handles_route:src/demo_app/api.py:legacy_item:ANY_legacy_param",
+ "capability": "frameworks",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "handles_route",
+ "from": { "kind": "function", "name": "legacy_item", "qualifiedName": "src/demo_app/api.py::legacy_item", "locator": "workspace://src/demo_app/api.py#L15-L16" },
+ "to": { "kind": "route", "name": "ANY_legacy_param", "qualifiedName": "src/demo_app/api.py::ANY_legacy_param", "locator": "workspace://src/demo_app/api.py#L19-L19" },
+ "locator": "workspace://src/demo_app/api.py#L19-L19",
+ "resolution": "exact"
+ }
+ ],
+ "truthFingerprint": "sha256:369578a271cf2d45ad2a1c9307ca2023d5b981278f2be48a5388b7fc96670d0c"
+}
diff --git a/evals/code-intelligence/truth/fixtures/ruby.json b/evals/code-intelligence/truth/fixtures/ruby.json
new file mode 100644
index 00000000..7927d471
--- /dev/null
+++ b/evals/code-intelligence/truth/fixtures/ruby.json
@@ -0,0 +1,25 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_ruby_batch_e_fixture",
+ "language": "ruby",
+ "source": { "class": "fixture", "ref": "fixture://sha256:9d2476002e24bfb25100929232e11de66c5f3d46ad92761250d150506713f434" },
+ "review": { "status": "reviewed", "method": "source-locator", "reviewedBy": "memory-recall-maintainer", "reviewedAt": "2026-07-16T00:00:00.000Z" },
+ "reviewCoverage": { "declarations": "sampled", "relationships": "sampled", "calls": "sampled" },
+ "capabilityClaims": { "parse": "partial", "structure": "partial", "imports": "partial", "exports": "unmeasured", "heritage": "partial", "types": "partial", "calls": "partial", "config": "unmeasured", "frameworks": "partial", "impact": "unmeasured", "processes": "unmeasured" },
+ "items": [
+ { "id": "cititem_ruby_namespace_demo", "semanticKey": "node:namespace:Demo", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "namespace", "name": "Demo", "qualifiedName": "lib/demo/item_service.rb::Demo", "locator": "workspace://lib/demo/item_service.rb#L3-L29" },
+ { "id": "cititem_ruby_namespace_logging", "semanticKey": "node:namespace:Logging", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "namespace", "name": "Logging", "qualifiedName": "lib/demo/item_service.rb::Demo::Logging", "locator": "workspace://lib/demo/item_service.rb#L4-L8" },
+ { "id": "cititem_ruby_class_service", "semanticKey": "node:class:ItemService", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "class", "name": "ItemService", "qualifiedName": "lib/demo/item_service.rb::Demo::ItemService", "locator": "workspace://lib/demo/item_service.rb#L13-L23" },
+ { "id": "cititem_ruby_function_describe", "semanticKey": "node:function:describe", "capability": "types", "expectation": "present", "recordKind": "node", "kind": "function", "name": "describe", "qualifiedName": "lib/demo/item_service.rb::Demo::describe", "locator": "workspace://lib/demo/item_service.rb#L25-L28" },
+ { "id": "cititem_ruby_method_summary", "semanticKey": "node:method:summary", "capability": "types", "expectation": "present", "recordKind": "node", "kind": "method", "name": "summary", "qualifiedName": "lib/demo/item_service.rb::Demo::ItemService::summary", "locator": "workspace://lib/demo/item_service.rb#L20-L22" },
+ { "id": "cititem_ruby_import_item", "semanticKey": "edge:imports:item-service:item", "capability": "imports", "expectation": "present", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "lib_demo_item_service", "locator": "workspace://lib/demo/item_service.rb#L1-L30" }, "to": { "kind": "module", "name": "lib_demo_item", "locator": "workspace://lib/demo/item.rb#L1-L10" }, "locator": "workspace://lib/demo/item_service.rb#L1-L1", "resolution": "exact" },
+ { "id": "cititem_ruby_import_item_not_self", "semanticKey": "edge:imports:item-service:item-line:not-self", "capability": "imports", "expectation": "absent", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "lib_demo_item_service", "locator": "workspace://lib/demo/item_service.rb#L1-L30" }, "to": { "kind": "module", "name": "lib_demo_item_service", "locator": "workspace://lib/demo/item_service.rb#L1-L30" }, "locator": "workspace://lib/demo/item_service.rb#L1-L1", "resolution": "exact" },
+ { "id": "cititem_ruby_extends_base", "semanticKey": "edge:extends:ItemService:BaseService", "capability": "heritage", "expectation": "present", "recordKind": "edge", "kind": "extends", "from": { "kind": "class", "name": "ItemService", "locator": "workspace://lib/demo/item_service.rb#L13-L23" }, "to": { "kind": "class", "name": "BaseService", "locator": "workspace://lib/demo/item_service.rb#L10-L11" }, "locator": "workspace://lib/demo/item_service.rb#L13-L23", "resolution": "exact" },
+ { "id": "cititem_ruby_mixes_logging", "semanticKey": "edge:mixes-in:ItemService:Logging", "capability": "heritage", "expectation": "present", "recordKind": "edge", "kind": "mixes_in", "from": { "kind": "class", "name": "ItemService", "locator": "workspace://lib/demo/item_service.rb#L13-L23" }, "to": { "kind": "namespace", "name": "Logging", "locator": "workspace://lib/demo/item_service.rb#L4-L8" }, "locator": "workspace://lib/demo/item_service.rb#L14-L14", "resolution": "exact" },
+ { "id": "cititem_ruby_call_summary", "semanticKey": "edge:calls:describe:summary", "capability": "calls", "expectation": "present", "recordKind": "edge", "kind": "calls", "from": { "kind": "function", "name": "describe", "locator": "workspace://lib/demo/item_service.rb#L25-L28" }, "to": { "kind": "method", "name": "summary", "locator": "workspace://lib/demo/item_service.rb#L20-L22" }, "locator": "workspace://lib/demo/item_service.rb#L27-L27", "resolution": "typed" },
+ { "id": "cititem_ruby_route_rails", "semanticKey": "edge:handles-route:show:GET-items", "capability": "frameworks", "expectation": "present", "recordKind": "edge", "kind": "handles_route", "from": { "kind": "method", "name": "show", "locator": "workspace://app/controllers/items_controller.rb#L2-L4" }, "to": { "kind": "route", "name": "GET_items_param", "locator": "workspace://config/routes.rb#L2-L2" }, "locator": "workspace://config/routes.rb#L2-L2", "resolution": "exact" },
+ { "id": "cititem_ruby_route_sinatra", "semanticKey": "edge:handles-route:app:GET-health", "capability": "frameworks", "expectation": "present", "recordKind": "edge", "kind": "handles_route", "from": { "kind": "module", "name": "app", "locator": "workspace://app.rb#L1-L7" }, "to": { "kind": "route", "name": "GET_health", "locator": "workspace://app.rb#L4-L6" }, "locator": "workspace://app.rb#L4-L6", "resolution": "exact" }
+ ],
+ "truthFingerprint": "sha256:0497b00745d94c3f14e8a83e2ba2d8beccfadd35d6149e0c5dc4b1e9e6f80d7f"
+}
diff --git a/evals/code-intelligence/truth/fixtures/rust.json b/evals/code-intelligence/truth/fixtures/rust.json
new file mode 100644
index 00000000..05e97c55
--- /dev/null
+++ b/evals/code-intelligence/truth/fixtures/rust.json
@@ -0,0 +1,179 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_rust_batch_b_fixture",
+ "language": "rust",
+ "source": {
+ "class": "fixture",
+ "ref": "fixture://sha256:1d75880dd0dbf80f9af36f5463184ef1b6a7bf2be1f3bcc5ffa24c5f971f3d9c"
+ },
+ "review": {
+ "status": "reviewed",
+ "method": "source-locator",
+ "reviewedBy": "memory-recall-maintainer",
+ "reviewedAt": "2026-07-16T00:00:00.000Z"
+ },
+ "reviewCoverage": {
+ "declarations": "exhaustive",
+ "relationships": "exhaustive",
+ "calls": "exhaustive"
+ },
+ "capabilityClaims": {
+ "parse": "partial",
+ "structure": "partial",
+ "imports": "partial",
+ "exports": "partial",
+ "heritage": "partial",
+ "types": "partial",
+ "calls": "partial",
+ "config": "partial",
+ "frameworks": "partial",
+ "impact": "unmeasured",
+ "processes": "unmeasured"
+ },
+ "items": [
+ { "id": "cititem_rust_runner", "semanticKey": "node:trait:src/service.rs:Runner", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "trait", "name": "Runner", "qualifiedName": "src/service.rs::Runner", "locator": "workspace://src/service.rs#L1-L3" },
+ { "id": "cititem_rust_service", "semanticKey": "node:struct:src/service.rs:Service", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "struct", "name": "Service", "qualifiedName": "src/service.rs::Service", "locator": "workspace://src/service.rs#L5-L5" },
+ { "id": "cititem_rust_service_new", "semanticKey": "node:method:src/service.rs:Service:new", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "new", "qualifiedName": "src/service.rs::Service::new", "locator": "workspace://src/service.rs#L8-L10" },
+ { "id": "cititem_rust_service_run", "semanticKey": "node:method:src/service.rs:Service:run", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "run", "qualifiedName": "src/service.rs::Service::run", "locator": "workspace://src/service.rs#L14-L16" },
+ { "id": "cititem_rust_use_service", "semanticKey": "node:function:src/service.rs:use_service", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "function", "name": "use_service", "qualifiedName": "src/service.rs::use_service", "locator": "workspace://src/service.rs#L19-L21" },
+ { "id": "cititem_rust_item", "semanticKey": "node:function:src/lib.rs:item", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "function", "name": "item", "qualifiedName": "src/lib.rs::item", "locator": "workspace://src/lib.rs#L5-L5" },
+ { "id": "cititem_rust_rocket_item", "semanticKey": "node:function:src/lib.rs:rocket_item", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "function", "name": "rocket_item", "qualifiedName": "src/lib.rs::rocket_item", "locator": "workspace://src/lib.rs#L8-L8" },
+ { "id": "cititem_rust_router", "semanticKey": "node:function:src/lib.rs:router", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "function", "name": "router", "qualifiedName": "src/lib.rs::router", "locator": "workspace://src/lib.rs#L10-L12" },
+ { "id": "cititem_rust_actix_item", "semanticKey": "node:function:src/lib.rs:actix_item", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "function", "name": "actix_item", "qualifiedName": "src/lib.rs::actix_item", "locator": "workspace://src/lib.rs#L14-L14" },
+ { "id": "cititem_rust_app", "semanticKey": "node:function:src/lib.rs:app", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "function", "name": "app", "qualifiedName": "src/lib.rs::app", "locator": "workspace://src/lib.rs#L16-L18" },
+ { "id": "cititem_rust_build", "semanticKey": "node:function:src/lib.rs:build", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "function", "name": "build", "qualifiedName": "src/lib.rs::build", "locator": "workspace://src/lib.rs#L20-L22" },
+ {
+ "id": "cititem_rust_import_service",
+ "semanticKey": "edge:imports:src/lib.rs:src/service.rs",
+ "capability": "imports",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "imports",
+ "from": { "kind": "module", "name": "src_lib", "qualifiedName": "src/lib.rs::src_lib", "locator": "workspace://src/lib.rs#L1-L23" },
+ "to": { "kind": "module", "name": "src_service", "qualifiedName": "src/service.rs::src_service", "locator": "workspace://src/service.rs#L1-L22" },
+ "locator": "workspace://src/lib.rs#L3-L3",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_rust_import_service_not_self",
+ "semanticKey": "edge:imports:src/lib.rs:service-line:not-lib",
+ "capability": "imports",
+ "expectation": "absent",
+ "recordKind": "edge",
+ "kind": "imports",
+ "from": { "kind": "module", "name": "src_lib", "qualifiedName": "src/lib.rs::src_lib", "locator": "workspace://src/lib.rs#L1-L23" },
+ "to": { "kind": "module", "name": "src_lib", "qualifiedName": "src/lib.rs::src_lib", "locator": "workspace://src/lib.rs#L1-L23" },
+ "locator": "workspace://src/lib.rs#L3-L3",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_rust_export_service",
+ "semanticKey": "edge:exports:src/service.rs:Service",
+ "capability": "exports",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "exports",
+ "from": { "kind": "module", "name": "src_service", "qualifiedName": "src/service.rs::src_service", "locator": "workspace://src/service.rs#L1-L22" },
+ "to": { "kind": "struct", "name": "Service", "qualifiedName": "src/service.rs::Service", "locator": "workspace://src/service.rs#L5-L5" },
+ "locator": "workspace://src/service.rs#L5-L5",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_rust_private_build_not_exported",
+ "semanticKey": "edge:exports:src/lib.rs:build:absent",
+ "capability": "exports",
+ "expectation": "absent",
+ "recordKind": "edge",
+ "kind": "exports",
+ "from": { "kind": "module", "name": "src_lib", "qualifiedName": "src/lib.rs::src_lib", "locator": "workspace://src/lib.rs#L1-L23" },
+ "to": { "kind": "function", "name": "build", "qualifiedName": "src/lib.rs::build", "locator": "workspace://src/lib.rs#L20-L22" },
+ "locator": "workspace://src/lib.rs#L20-L22",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_rust_implements_runner",
+ "semanticKey": "edge:implements:src/service.rs:Service:Runner",
+ "capability": "heritage",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "implements",
+ "from": { "kind": "struct", "name": "Service", "qualifiedName": "src/service.rs::Service", "locator": "workspace://src/service.rs#L5-L5" },
+ "to": { "kind": "trait", "name": "Runner", "qualifiedName": "src/service.rs::Runner", "locator": "workspace://src/service.rs#L1-L3" },
+ "locator": "workspace://src/service.rs#L13-L17",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_rust_construct_service",
+ "semanticKey": "edge:constructs:src/lib.rs:build:Service",
+ "capability": "types",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "constructs",
+ "from": { "kind": "function", "name": "build", "qualifiedName": "src/lib.rs::build", "locator": "workspace://src/lib.rs#L20-L22" },
+ "to": { "kind": "struct", "name": "Service", "qualifiedName": "src/service.rs::Service", "locator": "workspace://src/service.rs#L5-L5" },
+ "locator": "workspace://src/lib.rs#L21-L21",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_rust_call_service_run",
+ "semanticKey": "edge:calls:src/service.rs:use_service:Service.run",
+ "capability": "calls",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "calls",
+ "from": { "kind": "function", "name": "use_service", "qualifiedName": "src/service.rs::use_service", "locator": "workspace://src/service.rs#L19-L21" },
+ "to": { "kind": "method", "name": "run", "qualifiedName": "src/service.rs::Service::run", "locator": "workspace://src/service.rs#L14-L16" },
+ "locator": "workspace://src/service.rs#L20-L20",
+ "resolution": "typed"
+ },
+ {
+ "id": "cititem_rust_route_wrapper_not_call",
+ "semanticKey": "edge:calls:src/lib.rs:router:item:absent",
+ "capability": "calls",
+ "expectation": "absent",
+ "recordKind": "edge",
+ "kind": "calls",
+ "from": { "kind": "function", "name": "router", "qualifiedName": "src/lib.rs::router", "locator": "workspace://src/lib.rs#L10-L12" },
+ "to": { "kind": "function", "name": "item", "qualifiedName": "src/lib.rs::item", "locator": "workspace://src/lib.rs#L5-L5" },
+ "locator": "workspace://src/lib.rs#L11-L11"
+ },
+ {
+ "id": "cititem_rust_axum_route",
+ "semanticKey": "edge:handles_route:src/lib.rs:item:GET_items_param",
+ "capability": "frameworks",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "handles_route",
+ "from": { "kind": "function", "name": "item", "qualifiedName": "src/lib.rs::item", "locator": "workspace://src/lib.rs#L5-L5" },
+ "to": { "kind": "route", "name": "GET_items_param", "qualifiedName": "src/lib.rs::GET_items_param", "locator": "workspace://src/lib.rs#L11-L11" },
+ "locator": "workspace://src/lib.rs#L11-L11",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_rust_rocket_route",
+ "semanticKey": "edge:handles_route:src/lib.rs:rocket_item:GET_rocket_param",
+ "capability": "frameworks",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "handles_route",
+ "from": { "kind": "function", "name": "rocket_item", "qualifiedName": "src/lib.rs::rocket_item", "locator": "workspace://src/lib.rs#L8-L8" },
+ "to": { "kind": "route", "name": "GET_rocket_param", "qualifiedName": "src/lib.rs::GET_rocket_param", "locator": "workspace://src/lib.rs#L7-L8" },
+ "locator": "workspace://src/lib.rs#L7-L8",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_rust_actix_route",
+ "semanticKey": "edge:handles_route:src/lib.rs:actix_item:POST_legacy_param",
+ "capability": "frameworks",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "handles_route",
+ "from": { "kind": "function", "name": "actix_item", "qualifiedName": "src/lib.rs::actix_item", "locator": "workspace://src/lib.rs#L14-L14" },
+ "to": { "kind": "route", "name": "POST_legacy_param", "qualifiedName": "src/lib.rs::POST_legacy_param", "locator": "workspace://src/lib.rs#L17-L17" },
+ "locator": "workspace://src/lib.rs#L17-L17",
+ "resolution": "exact"
+ }
+ ],
+ "truthFingerprint": "sha256:8fbef3c0ad6750ba5919b56aa26137d02012407711720fac449e2cc9086bb427"
+}
diff --git a/evals/code-intelligence/truth/fixtures/swift.json b/evals/code-intelligence/truth/fixtures/swift.json
new file mode 100644
index 00000000..159be7b7
--- /dev/null
+++ b/evals/code-intelligence/truth/fixtures/swift.json
@@ -0,0 +1,25 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_swift_batch_d_fixture",
+ "language": "swift",
+ "source": { "class": "fixture", "ref": "fixture://sha256:5cbe7153b65842626587a3c05dcad05ed6ff63129adc1fe4d579dd82460642bf" },
+ "review": { "status": "reviewed", "method": "source-locator", "reviewedBy": "memory-recall-maintainer", "reviewedAt": "2026-07-16T00:00:00.000Z" },
+ "reviewCoverage": { "declarations": "sampled", "relationships": "sampled", "calls": "sampled" },
+ "capabilityClaims": { "parse": "partial", "structure": "partial", "imports": "partial", "exports": "unmeasured", "heritage": "partial", "types": "partial", "calls": "partial", "config": "unmeasured", "frameworks": "partial", "impact": "unmeasured", "processes": "unmeasured" },
+ "items": [
+ { "id": "cititem_swift_protocol_loader", "semanticKey": "node:protocol:ItemLoading", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "protocol", "name": "ItemLoading", "qualifiedName": "Sources/App/Item.swift::ItemLoading", "locator": "workspace://Sources/App/Item.swift#L5-L7" },
+ { "id": "cititem_swift_class_service", "semanticKey": "node:class:ItemService", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "class", "name": "ItemService", "qualifiedName": "Sources/App/ItemService.swift::ItemService", "locator": "workspace://Sources/App/ItemService.swift#L1-L5" },
+ { "id": "cititem_swift_extension_service", "semanticKey": "node:extension:ItemService", "capability": "heritage", "expectation": "present", "recordKind": "node", "kind": "extension", "name": "ItemService", "qualifiedName": "Sources/App/ItemService.swift::ItemService", "locator": "workspace://Sources/App/ItemService.swift#L7-L11" },
+ { "id": "cititem_swift_method_summary", "semanticKey": "node:method:summary-item", "capability": "types", "expectation": "present", "recordKind": "node", "kind": "method", "name": "summary(Item)", "qualifiedName": "Sources/App/ItemService.swift::ItemService::summary(Item)", "locator": "workspace://Sources/App/ItemService.swift#L8-L10" },
+ { "id": "cititem_swift_route_items", "semanticKey": "node:route:GET-items-param", "capability": "frameworks", "expectation": "present", "recordKind": "node", "kind": "route", "name": "GET_items_param", "qualifiedName": "Sources/App/routes.swift::GET_items_param", "locator": "workspace://Sources/App/routes.swift#L4-L6" },
+ { "id": "cititem_swift_import_vapor", "semanticKey": "edge:imports:routes:Vapor", "capability": "imports", "expectation": "present", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "Sources_App_routes", "locator": "workspace://Sources/App/routes.swift#L1-L8" }, "to": { "kind": "module", "name": "Vapor", "locator": "workspace://Sources/App/routes.swift#L1-L1" }, "locator": "workspace://Sources/App/routes.swift#L1-L1", "resolution": "unresolved" },
+ { "id": "cititem_swift_import_vapor_not_self", "semanticKey": "edge:imports:routes:Vapor-line:not-self", "capability": "imports", "expectation": "absent", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "Sources_App_routes", "locator": "workspace://Sources/App/routes.swift#L1-L8" }, "to": { "kind": "module", "name": "Sources_App_routes", "locator": "workspace://Sources/App/routes.swift#L1-L8" }, "locator": "workspace://Sources/App/routes.swift#L1-L1", "resolution": "unresolved" },
+ { "id": "cititem_swift_implements_loader", "semanticKey": "edge:implements:ItemService:ItemLoading", "capability": "heritage", "expectation": "present", "recordKind": "edge", "kind": "implements", "from": { "kind": "class", "name": "ItemService", "locator": "workspace://Sources/App/ItemService.swift#L1-L5" }, "to": { "kind": "protocol", "name": "ItemLoading", "locator": "workspace://Sources/App/Item.swift#L5-L7" }, "locator": "workspace://Sources/App/ItemService.swift#L1-L5", "resolution": "exact" },
+ { "id": "cititem_swift_extends_type", "semanticKey": "edge:extends-type:extension:ItemService", "capability": "heritage", "expectation": "present", "recordKind": "edge", "kind": "extends_type", "from": { "kind": "extension", "name": "ItemService", "locator": "workspace://Sources/App/ItemService.swift#L7-L11" }, "to": { "kind": "class", "name": "ItemService", "locator": "workspace://Sources/App/ItemService.swift#L1-L5" }, "locator": "workspace://Sources/App/ItemService.swift#L7-L11", "resolution": "exact" },
+ { "id": "cititem_swift_call_summary", "semanticKey": "edge:calls:describe:summary", "capability": "calls", "expectation": "present", "recordKind": "edge", "kind": "calls", "from": { "kind": "function", "name": "describe", "locator": "workspace://Sources/App/ItemService.swift#L13-L15" }, "to": { "kind": "method", "name": "summary(Item)", "locator": "workspace://Sources/App/ItemService.swift#L8-L10" }, "locator": "workspace://Sources/App/ItemService.swift#L14-L14", "resolution": "typed" },
+ { "id": "cititem_swift_construct_item", "semanticKey": "edge:constructs:find:Item", "capability": "types", "expectation": "present", "recordKind": "edge", "kind": "constructs", "from": { "kind": "method", "name": "find(String)", "locator": "workspace://Sources/App/ItemService.swift#L2-L4" }, "to": { "kind": "struct", "name": "Item", "locator": "workspace://Sources/App/Item.swift#L1-L3" }, "locator": "workspace://Sources/App/ItemService.swift#L3-L3", "resolution": "exact" },
+ { "id": "cititem_swift_handles_route", "semanticKey": "edge:handles-route:routes:items", "capability": "frameworks", "expectation": "present", "recordKind": "edge", "kind": "handles_route", "from": { "kind": "function", "name": "routes", "locator": "workspace://Sources/App/routes.swift#L3-L7" }, "to": { "kind": "route", "name": "GET_items_param", "locator": "workspace://Sources/App/routes.swift#L4-L6" }, "locator": "workspace://Sources/App/routes.swift#L4-L6", "resolution": "exact" }
+ ],
+ "truthFingerprint": "sha256:902d43e2e15dc0cc9d18315d0208ef8ac57b4d663ea67c2c0ee9c3a10ce2437a"
+}
diff --git a/evals/code-intelligence/truth/fixtures/typescript.json b/evals/code-intelligence/truth/fixtures/typescript.json
new file mode 100644
index 00000000..40ade4b5
--- /dev/null
+++ b/evals/code-intelligence/truth/fixtures/typescript.json
@@ -0,0 +1,179 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_typescript_import_call_fixture",
+ "language": "typescript",
+ "source": {
+ "class": "fixture",
+ "ref": "fixture://sha256:0da79f91adfdca5b7658a56903c4e755db779bc6ce5347f57899c981c07ab61a"
+ },
+ "review": {
+ "status": "reviewed",
+ "method": "source-locator",
+ "reviewedBy": "memory-recall-maintainer",
+ "reviewedAt": "2026-07-16T00:00:00.000Z"
+ },
+ "reviewCoverage": {
+ "declarations": "exhaustive",
+ "relationships": "exhaustive",
+ "calls": "exhaustive"
+ },
+ "capabilityClaims": {
+ "parse": "partial",
+ "structure": "partial",
+ "imports": "partial",
+ "exports": "partial",
+ "heritage": "unmeasured",
+ "types": "partial",
+ "calls": "partial",
+ "config": "unmeasured",
+ "frameworks": "unmeasured",
+ "impact": "unmeasured",
+ "processes": "unmeasured"
+ },
+ "items": [
+ {
+ "id": "cititem_typescript_helper",
+ "semanticKey": "node:function:src/helper.ts:helper",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "function",
+ "name": "helper",
+ "qualifiedName": "src/helper.ts::helper",
+ "locator": "workspace://src/helper.ts#L1-L1"
+ },
+ {
+ "id": "cititem_typescript_result",
+ "semanticKey": "node:interface:src/index.ts:Result",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "interface",
+ "name": "Result",
+ "qualifiedName": "src/index.ts::Result",
+ "locator": "workspace://src/index.ts#L2-L2"
+ },
+ {
+ "id": "cititem_typescript_construct_result_box",
+ "semanticKey": "edge:constructs:src/index.ts:main:ResultBox",
+ "capability": "types",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "constructs",
+ "from": {
+ "kind": "function",
+ "name": "main",
+ "qualifiedName": "src/index.ts::main",
+ "locator": "workspace://src/index.ts#L4-L4"
+ },
+ "to": {
+ "kind": "class",
+ "name": "ResultBox",
+ "qualifiedName": "src/index.ts::ResultBox",
+ "locator": "workspace://src/index.ts#L3-L3"
+ },
+ "locator": "workspace://src/index.ts#L4-L4",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_typescript_main",
+ "semanticKey": "node:function:src/index.ts:main",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "function",
+ "name": "main",
+ "qualifiedName": "src/index.ts::main",
+ "locator": "workspace://src/index.ts#L4-L4"
+ },
+ {
+ "id": "cititem_typescript_import_helper",
+ "semanticKey": "edge:imports:src/index.ts:src/helper.ts",
+ "capability": "imports",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "imports",
+ "from": {
+ "kind": "module",
+ "name": "src_index",
+ "qualifiedName": "src/index.ts::src_index",
+ "locator": "workspace://src/index.ts#L1-L5"
+ },
+ "to": {
+ "kind": "module",
+ "name": "src_helper",
+ "qualifiedName": "src/helper.ts::src_helper",
+ "locator": "workspace://src/helper.ts#L1-L2"
+ },
+ "locator": "workspace://src/index.ts#L1-L1",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_typescript_export_result",
+ "semanticKey": "edge:exports:src/index.ts:Result",
+ "capability": "exports",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "exports",
+ "from": {
+ "kind": "module",
+ "name": "src_index",
+ "qualifiedName": "src/index.ts::src_index",
+ "locator": "workspace://src/index.ts#L1-L5"
+ },
+ "to": {
+ "kind": "interface",
+ "name": "Result",
+ "qualifiedName": "src/index.ts::Result",
+ "locator": "workspace://src/index.ts#L2-L2"
+ },
+ "locator": "workspace://src/index.ts#L2-L2",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_typescript_call_helper",
+ "semanticKey": "edge:calls:src/index.ts:main:helper",
+ "capability": "calls",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "calls",
+ "from": {
+ "kind": "function",
+ "name": "main",
+ "qualifiedName": "src/index.ts::main",
+ "locator": "workspace://src/index.ts#L4-L4"
+ },
+ "to": {
+ "kind": "function",
+ "name": "helper",
+ "qualifiedName": "src/helper.ts::helper",
+ "locator": "workspace://src/helper.ts#L1-L1"
+ },
+ "locator": "workspace://src/index.ts#L4-L4",
+ "resolution": "inferred"
+ },
+ {
+ "id": "cititem_typescript_call_result_absent",
+ "semanticKey": "edge:calls:src/index.ts:main:Result:absent",
+ "capability": "calls",
+ "expectation": "absent",
+ "recordKind": "edge",
+ "kind": "calls",
+ "from": {
+ "kind": "function",
+ "name": "main",
+ "qualifiedName": "src/index.ts::main",
+ "locator": "workspace://src/index.ts#L4-L4"
+ },
+ "to": {
+ "kind": "interface",
+ "name": "Result",
+ "qualifiedName": "src/index.ts::Result",
+ "locator": "workspace://src/index.ts#L2-L2"
+ },
+ "locator": "workspace://src/index.ts#L4-L4"
+ }
+ ],
+ "truthFingerprint": "sha256:7b61a9d64afe4b8da93bf1b503b0f878faaba43b03b966196eb8f111d6d2e801"
+}
diff --git a/evals/code-intelligence/truth/repositories/c/cirepo_c_antirez_kilo.json b/evals/code-intelligence/truth/repositories/c/cirepo_c_antirez_kilo.json
new file mode 100644
index 00000000..d7da557f
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/c/cirepo_c_antirez_kilo.json
@@ -0,0 +1,17 @@
+{
+ "schemaVersion": "1.0.0", "truthVersion": "memory-recall-code-intelligence-truth-1", "id": "citruth_c_antirez_kilo_core", "language": "c",
+ "source": { "class": "real-repo", "ref": "corpus://cirepo_c_antirez_kilo@323d93b29bd89a2cb446de90c4ed4fea1764176e#." },
+ "review": { "status": "reviewed", "method": "source-locator", "reviewedBy": "memory-recall-maintainer", "reviewedAt": "2026-07-16T00:00:00.000Z" },
+ "reviewCoverage": { "declarations": "sampled", "relationships": "sampled", "calls": "sampled" },
+ "capabilityClaims": { "parse": "partial", "structure": "partial", "imports": "partial", "exports": "unmeasured", "heritage": "unmeasured", "types": "unmeasured", "calls": "partial", "config": "unmeasured", "frameworks": "unmeasured", "impact": "unmeasured", "processes": "unmeasured" },
+ "items": [
+ { "id": "cititem_kilo_enable_raw", "semanticKey": "node:function:enableRawMode", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "function", "name": "enableRawMode", "qualifiedName": "kilo.c::enableRawMode", "locator": "workspace://kilo.c#L218-L249" },
+ { "id": "cititem_kilo_init_editor", "semanticKey": "node:function:initEditor", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "function", "name": "initEditor", "qualifiedName": "kilo.c::initEditor", "locator": "workspace://kilo.c#L1277-L1289" },
+ { "id": "cititem_kilo_main", "semanticKey": "node:function:main", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "function", "name": "main", "qualifiedName": "kilo.c::main", "locator": "workspace://kilo.c#L1291-L1308" },
+ { "id": "cititem_kilo_defines_main", "semanticKey": "edge:defines:kilo:main", "capability": "structure", "expectation": "present", "recordKind": "edge", "kind": "defines", "from": { "kind": "module", "name": "kilo", "locator": "workspace://kilo.c#L1-L1309" }, "to": { "kind": "function", "name": "main", "locator": "workspace://kilo.c#L1291-L1308" }, "locator": "workspace://kilo.c#L1291-L1308", "resolution": "exact" },
+ { "id": "cititem_kilo_call_enable", "semanticKey": "edge:calls:main:enableRawMode", "capability": "calls", "expectation": "present", "recordKind": "edge", "kind": "calls", "from": { "kind": "function", "name": "main", "locator": "workspace://kilo.c#L1291-L1308" }, "to": { "kind": "function", "name": "enableRawMode", "locator": "workspace://kilo.c#L218-L249" }, "locator": "workspace://kilo.c#L1300-L1300", "resolution": "inferred" },
+ { "id": "cititem_kilo_import_stdio", "semanticKey": "edge:imports:kilo:stdio", "capability": "imports", "expectation": "present", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "kilo", "locator": "workspace://kilo.c#L1-L1309" }, "to": { "kind": "module", "name": "stdio.h", "locator": "workspace://kilo.c#L43-L44" }, "locator": "workspace://kilo.c#L43-L44", "resolution": "unresolved" },
+ { "id": "cititem_kilo_import_stdio_not_stdlib", "semanticKey": "edge:imports:kilo:stdio-line:not-stdlib", "capability": "imports", "expectation": "absent", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "kilo", "locator": "workspace://kilo.c#L1-L1309" }, "to": { "kind": "module", "name": "stdlib.h", "locator": "workspace://kilo.c#L42-L43" }, "locator": "workspace://kilo.c#L43-L44", "resolution": "unresolved" }
+ ],
+ "truthFingerprint": "sha256:c99af167a30abde5b482d84ac10977d91204cd2d472569e63dd273ef4ba1154c"
+}
diff --git a/evals/code-intelligence/truth/repositories/c/cirepo_c_curl_curl.json b/evals/code-intelligence/truth/repositories/c/cirepo_c_curl_curl.json
new file mode 100644
index 00000000..96ce77eb
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/c/cirepo_c_curl_curl.json
@@ -0,0 +1,17 @@
+{
+ "schemaVersion": "1.0.0", "truthVersion": "memory-recall-code-intelligence-truth-1", "id": "citruth_c_curl_altsvc", "language": "c",
+ "source": { "class": "real-repo", "ref": "corpus://cirepo_c_curl_curl@4176aba5e4871a2f1c7c120dd76568f80f5d5ddc#lib" },
+ "review": { "status": "reviewed", "method": "source-locator", "reviewedBy": "memory-recall-maintainer", "reviewedAt": "2026-07-16T00:00:00.000Z" },
+ "reviewCoverage": { "declarations": "sampled", "relationships": "sampled", "calls": "sampled" },
+ "capabilityClaims": { "parse": "partial", "structure": "partial", "imports": "partial", "exports": "unmeasured", "heritage": "unmeasured", "types": "unmeasured", "calls": "partial", "config": "unmeasured", "frameworks": "unmeasured", "impact": "unmeasured", "processes": "unmeasured" },
+ "items": [
+ { "id": "cititem_curl_altsvc_add", "semanticKey": "node:function:altsvc-add", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "function", "name": "add", "qualifiedName": "altsvc.c::add", "locator": "workspace://altsvc.c#L168-L227" },
+ { "id": "cititem_curl_altsvc_load_local", "semanticKey": "node:function:altsvc-load-local", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "function", "name": "load", "qualifiedName": "altsvc.c::load", "locator": "workspace://altsvc.c#L237-L270" },
+ { "id": "cititem_curl_altsvc_load_public", "semanticKey": "node:function:Curl-altsvc-load", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "function", "name": "Curl_altsvc_load", "qualifiedName": "altsvc.c::Curl_altsvc_load", "locator": "workspace://altsvc.c#L346-L350" },
+ { "id": "cititem_curl_defines_load", "semanticKey": "edge:defines:altsvc:load", "capability": "structure", "expectation": "present", "recordKind": "edge", "kind": "defines", "from": { "kind": "module", "name": "altsvc", "locator": "workspace://altsvc.c#L1-L717" }, "to": { "kind": "function", "name": "load", "locator": "workspace://altsvc.c#L237-L270" }, "locator": "workspace://altsvc.c#L237-L270", "resolution": "exact" },
+ { "id": "cititem_curl_call_load", "semanticKey": "edge:calls:Curl-altsvc-load:load", "capability": "calls", "expectation": "present", "recordKind": "edge", "kind": "calls", "from": { "kind": "function", "name": "Curl_altsvc_load", "locator": "workspace://altsvc.c#L346-L350" }, "to": { "kind": "function", "name": "load", "locator": "workspace://altsvc.c#L237-L270" }, "locator": "workspace://altsvc.c#L349-L349", "resolution": "inferred" },
+ { "id": "cititem_curl_import_nghttp2", "semanticKey": "edge:imports:http2:nghttp2", "capability": "imports", "expectation": "present", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "http2", "locator": "workspace://http2.c#L1-L2994" }, "to": { "kind": "module", "name": "nghttp2/nghttp2.h", "locator": "workspace://cf-h2-proxy.c#L29-L30" }, "locator": "workspace://http2.c#L27-L28", "resolution": "unresolved" },
+ { "id": "cititem_curl_import_nghttp2_not_setup", "semanticKey": "edge:imports:http2:nghttp2-line:not-setup", "capability": "imports", "expectation": "absent", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "http2", "locator": "workspace://http2.c#L1-L2994" }, "to": { "kind": "module", "name": "curl_setup", "locator": "workspace://curl_setup.h#L1-L1670" }, "locator": "workspace://http2.c#L27-L28", "resolution": "unresolved" }
+ ],
+ "truthFingerprint": "sha256:73515c187e88776d04ccf006b6fc0ecd99c48c17f856a8aa10bac097b337d2e6"
+}
diff --git a/evals/code-intelligence/truth/repositories/c/cirepo_c_libuv_libuv.json b/evals/code-intelligence/truth/repositories/c/cirepo_c_libuv_libuv.json
new file mode 100644
index 00000000..55831e62
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/c/cirepo_c_libuv_libuv.json
@@ -0,0 +1,18 @@
+{
+ "schemaVersion": "1.0.0", "truthVersion": "memory-recall-code-intelligence-truth-1", "id": "citruth_c_libuv_fs_poll", "language": "c",
+ "source": { "class": "real-repo", "ref": "corpus://cirepo_c_libuv_libuv@2cadaa40167050baf7c6905ac897e6fb57afb2c6#src" },
+ "review": { "status": "reviewed", "method": "source-locator", "reviewedBy": "memory-recall-maintainer", "reviewedAt": "2026-07-16T00:00:00.000Z" },
+ "reviewCoverage": { "declarations": "sampled", "relationships": "sampled", "calls": "sampled" },
+ "capabilityClaims": { "parse": "partial", "structure": "partial", "imports": "partial", "exports": "unmeasured", "heritage": "unmeasured", "types": "partial", "calls": "partial", "config": "unmeasured", "frameworks": "unmeasured", "impact": "unmeasured", "processes": "unmeasured" },
+ "items": [
+ { "id": "cititem_libuv_poll_ctx", "semanticKey": "node:struct:poll-ctx", "capability": "types", "expectation": "present", "recordKind": "node", "kind": "struct", "name": "poll_ctx", "qualifiedName": "fs-poll.c::poll_ctx::poll_ctx", "locator": "workspace://fs-poll.c#L37-L49" },
+ { "id": "cititem_libuv_poll_init", "semanticKey": "node:function:uv-fs-poll-init", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "function", "name": "uv_fs_poll_init", "qualifiedName": "fs-poll.c::uv_fs_poll_init", "locator": "workspace://fs-poll.c#L59-L63" },
+ { "id": "cititem_libuv_poll_start", "semanticKey": "node:function:uv-fs-poll-start", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "function", "name": "uv_fs_poll_start", "qualifiedName": "fs-poll.c::uv_fs_poll_start", "locator": "workspace://fs-poll.c#L66-L113" },
+ { "id": "cititem_libuv_poll_stop", "semanticKey": "node:function:uv-fs-poll-stop", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "function", "name": "uv_fs_poll_stop", "qualifiedName": "fs-poll.c::uv_fs_poll_stop", "locator": "workspace://fs-poll.c#L116-L135" },
+ { "id": "cititem_libuv_defines_start", "semanticKey": "edge:defines:fs-poll:start", "capability": "structure", "expectation": "present", "recordKind": "edge", "kind": "defines", "from": { "kind": "module", "name": "fs_poll", "locator": "workspace://fs-poll.c#L1-L291" }, "to": { "kind": "function", "name": "uv_fs_poll_start", "locator": "workspace://fs-poll.c#L66-L113" }, "locator": "workspace://fs-poll.c#L66-L113", "resolution": "exact" },
+ { "id": "cititem_libuv_call_handle_start", "semanticKey": "edge:calls:poll-start:handle-start", "capability": "calls", "expectation": "present", "recordKind": "edge", "kind": "calls", "from": { "kind": "function", "name": "uv_fs_poll_start", "locator": "workspace://fs-poll.c#L66-L113" }, "to": { "kind": "function", "name": "uv__handle_start", "locator": "workspace://fs-poll.c#L106-L106" }, "locator": "workspace://fs-poll.c#L106-L106", "resolution": "unresolved" },
+ { "id": "cititem_libuv_import_assert", "semanticKey": "edge:imports:fs-poll:assert", "capability": "imports", "expectation": "present", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "fs_poll", "locator": "workspace://fs-poll.c#L1-L291" }, "to": { "kind": "module", "name": "assert.h", "locator": "workspace://fs-poll.c#L33-L34" }, "locator": "workspace://fs-poll.c#L33-L34", "resolution": "unresolved" },
+ { "id": "cititem_libuv_import_assert_not_stdlib", "semanticKey": "edge:imports:fs-poll:assert-line:not-stdlib", "capability": "imports", "expectation": "absent", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "fs_poll", "locator": "workspace://fs-poll.c#L1-L291" }, "to": { "kind": "module", "name": "stdlib.h", "locator": "workspace://fs-poll.c#L34-L35" }, "locator": "workspace://fs-poll.c#L33-L34", "resolution": "unresolved" }
+ ],
+ "truthFingerprint": "sha256:c91110ab41064400cf04571fe7d3e29840fab0133e016d68d89367522801c9b8"
+}
diff --git a/evals/code-intelligence/truth/repositories/cpp/cirepo_cpp_catchorg_catch2.json b/evals/code-intelligence/truth/repositories/cpp/cirepo_cpp_catchorg_catch2.json
new file mode 100644
index 00000000..ee545a3d
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/cpp/cirepo_cpp_catchorg_catch2.json
@@ -0,0 +1,19 @@
+{
+ "schemaVersion": "1.0.0", "truthVersion": "memory-recall-code-intelligence-truth-1", "id": "citruth_cpp_catch2_approx", "language": "cpp",
+ "source": { "class": "real-repo", "ref": "corpus://cirepo_cpp_catchorg_catch2@ae5d271da2c88b859d6365281ac075112115d4b1#src/Catch2" },
+ "review": { "status": "reviewed", "method": "source-locator", "reviewedBy": "memory-recall-maintainer", "reviewedAt": "2026-07-16T00:00:00.000Z" },
+ "reviewCoverage": { "declarations": "sampled", "relationships": "sampled", "calls": "sampled" },
+ "capabilityClaims": { "parse": "partial", "structure": "partial", "imports": "partial", "exports": "unmeasured", "heritage": "partial", "types": "partial", "calls": "partial", "config": "unmeasured", "frameworks": "unmeasured", "impact": "unmeasured", "processes": "unmeasured" },
+ "items": [
+ { "id": "cititem_catch_approx_custom", "semanticKey": "node:method:Approx-custom", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "custom()", "qualifiedName": "catch_approx.cpp::Catch.Approx::custom()", "locator": "workspace://catch_approx.cpp#L34-L36" },
+ { "id": "cititem_catch_approx_tostring", "semanticKey": "node:method:Approx-toString", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "toString()", "qualifiedName": "catch_approx.cpp::Catch.Approx::toString()", "locator": "workspace://catch_approx.cpp#L45-L49" },
+ { "id": "cititem_catch_approx_convert", "semanticKey": "node:method:Approx-convert", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "convert(Approx)", "qualifiedName": "catch_approx.cpp::Catch.Approx::convert(Approx)", "locator": "workspace://catch_approx.cpp#L81-L83" },
+ { "id": "cititem_catch_approx_matcher_extends_matcher_base", "semanticKey": "edge:extends:ApproxMatcher:MatcherBase", "capability": "heritage", "expectation": "present", "recordKind": "edge", "kind": "extends", "from": { "kind": "class", "name": "ApproxMatcher", "qualifiedName": "matchers/catch_matchers_vector.hpp::Catch::Matchers::ApproxMatcher", "locator": "workspace://matchers/catch_matchers_vector.hpp#L100-L135" }, "to": { "kind": "class", "name": "MatcherBase", "qualifiedName": "matchers/catch_matchers.hpp::Catch::Matchers::MatcherBase", "locator": "workspace://matchers/catch_matchers.hpp#L41-L44" }, "locator": "workspace://matchers/catch_matchers_vector.hpp#L100-L135", "resolution": "exact" },
+ { "id": "cititem_catch_approx_matcher_not_extends_vector_argument", "semanticKey": "edge:extends:ApproxMatcher:not-vector-argument", "capability": "heritage", "expectation": "absent", "recordKind": "edge", "kind": "extends", "from": { "kind": "class", "name": "ApproxMatcher", "qualifiedName": "matchers/catch_matchers_vector.hpp::Catch::Matchers::ApproxMatcher", "locator": "workspace://matchers/catch_matchers_vector.hpp#L100-L135" }, "to": { "kind": "class", "name": "vector", "qualifiedName": "generators/catch_generators_adapters.hpp::vector", "locator": "workspace://generators/catch_generators_adapters.hpp#L222-L256" }, "locator": "workspace://matchers/catch_matchers_vector.hpp#L100-L135", "resolution": "exact" },
+ { "id": "cititem_catch_construct_approx", "semanticKey": "edge:constructs:custom:Approx", "capability": "types", "expectation": "present", "recordKind": "edge", "kind": "constructs", "from": { "kind": "method", "name": "custom()", "locator": "workspace://catch_approx.cpp#L34-L36" }, "to": { "kind": "class", "name": "Approx", "locator": "workspace://catch_approx.hpp#L17-L114" }, "locator": "workspace://catch_approx.cpp#L35-L35", "resolution": "exact" },
+ { "id": "cititem_catch_call_tostring", "semanticKey": "edge:calls:convert:toString", "capability": "calls", "expectation": "present", "recordKind": "edge", "kind": "calls", "from": { "kind": "method", "name": "convert(Approx)", "locator": "workspace://catch_approx.cpp#L81-L83" }, "to": { "kind": "method", "name": "toString()", "locator": "workspace://catch_approx.cpp#L45-L49" }, "locator": "workspace://catch_approx.cpp#L82-L82", "resolution": "typed" },
+ { "id": "cititem_catch_import_test_spec", "semanticKey": "edge:imports:catch-config:test-spec", "capability": "imports", "expectation": "present", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "catch_config", "locator": "workspace://catch_config.hpp#L2-L162" }, "to": { "kind": "module", "name": "catch2/catch_test_spec.hpp", "locator": "workspace://catch_all.hpp#L41-L42" }, "locator": "workspace://catch_config.hpp#L11-L12", "resolution": "unresolved" },
+ { "id": "cititem_catch_import_test_spec_not_config_interface", "semanticKey": "edge:imports:catch-config:test-spec-line:not-config-interface", "capability": "imports", "expectation": "absent", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "catch_config", "locator": "workspace://catch_config.hpp#L2-L162" }, "to": { "kind": "module", "name": "catch2/interfaces/catch_interfaces_config.hpp", "locator": "workspace://benchmark/catch_benchmark.hpp#L20-L21" }, "locator": "workspace://catch_config.hpp#L11-L12", "resolution": "unresolved" }
+ ],
+ "truthFingerprint": "sha256:bfdc329ca304f072cb929cb79a573c28bd06d895a8b9133069fa3272afd0879e"
+}
diff --git a/evals/code-intelligence/truth/repositories/cpp/cirepo_cpp_fmtlib_fmt.json b/evals/code-intelligence/truth/repositories/cpp/cirepo_cpp_fmtlib_fmt.json
new file mode 100644
index 00000000..a058e20f
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/cpp/cirepo_cpp_fmtlib_fmt.json
@@ -0,0 +1,21 @@
+{
+ "schemaVersion": "1.0.0", "truthVersion": "memory-recall-code-intelligence-truth-1", "id": "citruth_cpp_fmt_c_api", "language": "cpp",
+ "source": { "class": "real-repo", "ref": "corpus://cirepo_cpp_fmtlib_fmt@a79df4504cd4e42ed004b1113fb82171e62ed822#src" },
+ "review": { "status": "reviewed", "method": "source-locator", "reviewedBy": "memory-recall-maintainer", "reviewedAt": "2026-07-16T00:00:00.000Z" },
+ "reviewCoverage": { "declarations": "sampled", "relationships": "sampled", "calls": "sampled" },
+ "capabilityClaims": { "parse": "partial", "structure": "partial", "imports": "partial", "exports": "unmeasured", "heritage": "partial", "types": "partial", "calls": "partial", "config": "unmeasured", "frameworks": "unmeasured", "impact": "unmeasured", "processes": "unmeasured" },
+ "items": [
+ { "id": "cititem_fmt_convert_args", "semanticKey": "node:function:convert-c-format-args", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "function", "name": "convert_c_format_args", "qualifiedName": "fmt-c.cc::convert_c_format_args", "locator": "workspace://fmt-c.cc#L14-L36" },
+ { "id": "cititem_fmt_vformat", "semanticKey": "node:function:fmt-vformat", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "function", "name": "fmt_vformat", "qualifiedName": "fmt-c.cc::fmt_vformat", "locator": "workspace://fmt-c.cc#L38-L49" },
+ { "id": "cititem_fmt_vprint", "semanticKey": "node:function:fmt-vprint", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "function", "name": "fmt_vprint", "qualifiedName": "fmt-c.cc::fmt_vprint", "locator": "workspace://fmt-c.cc#L54-L64" },
+ { "id": "cititem_fmt_import_header", "semanticKey": "edge:imports:fmt-c:fmt", "capability": "imports", "expectation": "present", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "fmt_c", "locator": "workspace://fmt-c.cc#L1-L68" }, "to": { "kind": "module", "name": "fmt", "locator": "workspace://fmt.cc#L1-L158" }, "locator": "workspace://fmt-c.cc#L8-L9", "resolution": "exact" },
+ { "id": "cititem_fmt_call_convert", "semanticKey": "edge:calls:fmt-vformat:convert", "capability": "calls", "expectation": "present", "recordKind": "edge", "kind": "calls", "from": { "kind": "function", "name": "fmt_vformat", "locator": "workspace://fmt-c.cc#L38-L49" }, "to": { "kind": "function", "name": "convert_c_format_args", "locator": "workspace://fmt-c.cc#L14-L36" }, "locator": "workspace://fmt-c.cc#L41-L41", "resolution": "inferred" },
+ { "id": "cititem_fmt_import_algorithm", "semanticKey": "edge:imports:fmt:algorithm", "capability": "imports", "expectation": "present", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "fmt", "locator": "workspace://fmt.cc#L1-L158" }, "to": { "kind": "module", "name": "algorithm", "locator": "workspace://fmt.cc#L21-L22" }, "locator": "workspace://fmt.cc#L21-L22", "resolution": "unresolved" },
+ { "id": "cititem_fmt_import_algorithm_not_bitset", "semanticKey": "edge:imports:fmt:algorithm-line:not-bitset", "capability": "imports", "expectation": "absent", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "fmt", "locator": "workspace://fmt.cc#L1-L158" }, "to": { "kind": "module", "name": "bitset", "locator": "workspace://fmt.cc#L22-L23" }, "locator": "workspace://fmt.cc#L21-L22", "resolution": "unresolved" },
+ { "id": "cititem_fmt_utf8_system_category", "semanticKey": "node:class:utf8-system-category", "capability": "types", "expectation": "present", "recordKind": "node", "kind": "class", "name": "utf8_system_category", "qualifiedName": "os.cc::utf8_system_category", "locator": "workspace://os.cc#L107-L120" },
+ { "id": "cititem_fmt_utf8_system_category_extends_error_category", "semanticKey": "edge:extends:utf8-system-category:error-category", "capability": "heritage", "expectation": "present", "recordKind": "edge", "kind": "extends", "from": { "kind": "class", "name": "utf8_system_category", "qualifiedName": "os.cc::utf8_system_category", "locator": "workspace://os.cc#L107-L120" }, "to": { "kind": "class", "name": "error_category", "qualifiedName": "os.cc::error_category", "locator": "workspace://os.cc#L107-L120" }, "locator": "workspace://os.cc#L107-L120", "resolution": "unresolved" },
+ { "id": "cititem_fmt_utf8_system_category_not_extends_body_class", "semanticKey": "edge:extends:utf8-system-category:not-system-message-body", "capability": "heritage", "expectation": "absent", "recordKind": "edge", "kind": "extends", "from": { "kind": "class", "name": "utf8_system_category", "qualifiedName": "os.cc::utf8_system_category", "locator": "workspace://os.cc#L107-L120" }, "to": { "kind": "class", "name": "system_message", "qualifiedName": "os.cc::system_message", "locator": "workspace://os.cc#L75-L105" }, "locator": "workspace://os.cc#L107-L120", "resolution": "exact" },
+ { "id": "cititem_fmt_string_not_construct", "semanticKey": "edge:constructs:format-windows-error:FMT-STRING", "capability": "types", "expectation": "absent", "recordKind": "edge", "kind": "constructs", "from": { "kind": "method", "name": "detail.format_windows_error(char,int,char)", "qualifiedName": "os.cc::detail.format_windows_error(char,int,char)", "locator": "workspace://os.cc#L147-L159" }, "to": { "kind": "class", "name": "FMT_STRING", "qualifiedName": "os.cc::FMT_STRING", "locator": "workspace://os.cc#L154-L154" }, "locator": "workspace://os.cc#L154-L154", "resolution": "unresolved" }
+ ],
+ "truthFingerprint": "sha256:7db39da3e7e790f1cedde2ca35e7253d8e7964bd7abd171fc6c9d6c31d765b21"
+}
diff --git a/evals/code-intelligence/truth/repositories/cpp/cirepo_cpp_nlohmann_json.json b/evals/code-intelligence/truth/repositories/cpp/cirepo_cpp_nlohmann_json.json
new file mode 100644
index 00000000..b0b07f59
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/cpp/cirepo_cpp_nlohmann_json.json
@@ -0,0 +1,20 @@
+{
+ "schemaVersion": "1.0.0", "truthVersion": "memory-recall-code-intelligence-truth-1", "id": "citruth_cpp_nlohmann_from_json", "language": "cpp",
+ "source": { "class": "real-repo", "ref": "corpus://cirepo_cpp_nlohmann_json@722c03495f9978eb727f480b6ea0742f652e06a9#include/nlohmann/detail" },
+ "review": { "status": "reviewed", "method": "source-locator", "reviewedBy": "memory-recall-maintainer", "reviewedAt": "2026-07-16T00:00:00.000Z" },
+ "reviewCoverage": { "declarations": "sampled", "relationships": "sampled", "calls": "sampled" },
+ "capabilityClaims": { "parse": "partial", "structure": "partial", "imports": "partial", "exports": "unmeasured", "heritage": "partial", "types": "partial", "calls": "partial", "config": "unmeasured", "frameworks": "unmeasured", "impact": "unmeasured", "processes": "unmeasured" },
+ "items": [
+ { "id": "cititem_json_arithmetic_value", "semanticKey": "node:function:get-arithmetic-value", "capability": "types", "expectation": "present", "recordKind": "node", "kind": "function", "name": "get_arithmetic_value", "qualifiedName": "conversions/from_json.hpp::from_json::get_arithmetic_value", "locator": "workspace://conversions/from_json.hpp#L78-L108" },
+ { "id": "cititem_json_tuple_get", "semanticKey": "node:function:from-json-tuple-get", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "function", "name": "from_json_tuple_get_impl", "qualifiedName": "conversions/from_json.hpp::from_json::from_json_tuple_get_impl", "locator": "workspace://conversions/from_json.hpp#L468-L471" },
+ { "id": "cititem_json_tuple_base", "semanticKey": "node:function:from-json-tuple-base", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "function", "name": "from_json_tuple_impl_base", "qualifiedName": "conversions/from_json.hpp::from_json::from_json_tuple_impl_base", "locator": "workspace://conversions/from_json.hpp#L491-L494" },
+ { "id": "cititem_json_lexer_extends_lexer_base", "semanticKey": "edge:extends:lexer:lexer-base", "capability": "heritage", "expectation": "present", "recordKind": "edge", "kind": "extends", "from": { "kind": "class", "name": "lexer", "qualifiedName": "input/lexer.hpp::token_type_name::lexer", "locator": "workspace://input/lexer.hpp#L134-L1345" }, "to": { "kind": "class", "name": "lexer_base", "qualifiedName": "input/lexer.hpp::token_type_name::lexer_base", "locator": "workspace://input/lexer.hpp#L35-L105" }, "locator": "workspace://input/lexer.hpp#L134-L1345", "resolution": "exact" },
+ { "id": "cititem_json_lexer_not_extends_basic_json_argument", "semanticKey": "edge:extends:lexer:not-BasicJsonType-argument", "capability": "heritage", "expectation": "absent", "recordKind": "edge", "kind": "extends", "from": { "kind": "class", "name": "lexer", "qualifiedName": "input/lexer.hpp::token_type_name::lexer", "locator": "workspace://input/lexer.hpp#L134-L1345" }, "to": { "kind": "class", "name": "BasicJsonType", "qualifiedName": "conversions/from_json.hpp::BasicJsonType", "locator": "workspace://conversions/from_json.hpp#L356-L356" }, "locator": "workspace://input/lexer.hpp#L134-L1345", "resolution": "unresolved" },
+ { "id": "cititem_json_lexer_not_extends_input_adapter_body_type", "semanticKey": "edge:extends:lexer:not-InputAdapterType-body", "capability": "heritage", "expectation": "absent", "recordKind": "edge", "kind": "extends", "from": { "kind": "class", "name": "lexer", "qualifiedName": "input/lexer.hpp::token_type_name::lexer", "locator": "workspace://input/lexer.hpp#L134-L1345" }, "to": { "kind": "class", "name": "InputAdapterType", "qualifiedName": "input/lexer.hpp::InputAdapterType", "locator": "workspace://input/lexer.hpp#L147-L147" }, "locator": "workspace://input/lexer.hpp#L134-L1345", "resolution": "exact" },
+ { "id": "cititem_json_defines_tuple_base", "semanticKey": "edge:defines:from-json:tuple-base", "capability": "structure", "expectation": "present", "recordKind": "edge", "kind": "defines", "from": { "kind": "function", "name": "from_json", "locator": "workspace://conversions/from_json.hpp#L43-L617" }, "to": { "kind": "function", "name": "from_json_tuple_impl_base", "locator": "workspace://conversions/from_json.hpp#L491-L494" }, "locator": "workspace://conversions/from_json.hpp#L491-L494", "resolution": "exact" },
+ { "id": "cititem_json_call_tuple_get", "semanticKey": "edge:calls:tuple-base:tuple-get", "capability": "calls", "expectation": "present", "recordKind": "edge", "kind": "calls", "from": { "kind": "function", "name": "from_json_tuple_impl_base", "locator": "workspace://conversions/from_json.hpp#L491-L494" }, "to": { "kind": "function", "name": "from_json_tuple_get_impl", "locator": "workspace://conversions/from_json.hpp#L468-L471" }, "locator": "workspace://conversions/from_json.hpp#L493-L493", "resolution": "inferred" },
+ { "id": "cititem_json_import_macro_scope", "semanticKey": "edge:imports:primitive-iterator:macro-scope", "capability": "imports", "expectation": "present", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "iterators_primitive_iterator", "locator": "workspace://iterators/primitive_iterator.hpp#L1-L133" }, "to": { "kind": "module", "name": "nlohmann/detail/macro_scope.hpp", "locator": "workspace://conversions/from_json.hpp#L25-L26" }, "locator": "workspace://iterators/primitive_iterator.hpp#L14-L15", "resolution": "unresolved" },
+ { "id": "cititem_json_import_macro_scope_not_cstddef", "semanticKey": "edge:imports:primitive-iterator:macro-scope-line:not-cstddef", "capability": "imports", "expectation": "absent", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "iterators_primitive_iterator", "locator": "workspace://iterators/primitive_iterator.hpp#L1-L133" }, "to": { "kind": "module", "name": "cstddef", "locator": "workspace://exceptions.hpp#L11-L12" }, "locator": "workspace://iterators/primitive_iterator.hpp#L14-L15", "resolution": "unresolved" }
+ ],
+ "truthFingerprint": "sha256:7a7a073ed505c767cbe2baab48169378e31e9ddf68ff72997f4c413b7be24f13"
+}
diff --git a/evals/code-intelligence/truth/repositories/csharp/cirepo_csharp_dotnet_aspnetcore.json b/evals/code-intelligence/truth/repositories/csharp/cirepo_csharp_dotnet_aspnetcore.json
new file mode 100644
index 00000000..adc20df7
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/csharp/cirepo_csharp_dotnet_aspnetcore.json
@@ -0,0 +1,17 @@
+{
+ "schemaVersion": "1.0.0", "truthVersion": "memory-recall-code-intelligence-truth-1", "id": "citruth_csharp_aspnetcore_route_patterns", "language": "csharp",
+ "source": { "class": "real-repo", "ref": "corpus://cirepo_csharp_dotnet_aspnetcore@d89ecc425733c5439096864cb9f7f97cab5416a0#src/Http/Routing/src/Patterns" },
+ "review": { "status": "reviewed", "method": "source-locator", "reviewedBy": "memory-recall-maintainer", "reviewedAt": "2026-07-16T00:00:00.000Z" },
+ "reviewCoverage": { "declarations": "sampled", "relationships": "sampled", "calls": "sampled" },
+ "capabilityClaims": { "parse": "partial", "structure": "partial", "imports": "partial", "exports": "unmeasured", "heritage": "partial", "types": "partial", "calls": "partial", "config": "unmeasured", "frameworks": "unmeasured", "impact": "unmeasured", "processes": "unmeasured" },
+ "items": [
+ { "id": "cititem_aspnet_route_parser", "semanticKey": "node:class:RouteParameterParser", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "class", "name": "RouteParameterParser", "qualifiedName": "RouteParameterParser.cs::Microsoft.AspNetCore.Routing.Patterns::RouteParameterParser", "locator": "workspace://RouteParameterParser.cs#L10-L260" },
+ { "id": "cititem_aspnet_parse_route", "semanticKey": "node:method:RouteParameterParser:ParseRouteParameter", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "ParseRouteParameter(string)", "qualifiedName": "RouteParameterParser.cs::Microsoft.AspNetCore.Routing.Patterns::RouteParameterParser::ParseRouteParameter(string)", "locator": "workspace://RouteParameterParser.cs#L16-L93" },
+ { "id": "cititem_aspnet_parse_constraints", "semanticKey": "node:method:RouteParameterParser:ParseConstraints", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "ParseConstraints(string,int,int)", "qualifiedName": "RouteParameterParser.cs::Microsoft.AspNetCore.Routing.Patterns::RouteParameterParser::ParseConstraints(string,int,int)", "locator": "workspace://RouteParameterParser.cs#L95-L238" },
+ { "id": "cititem_aspnet_defines_parse", "semanticKey": "edge:defines:RouteParameterParser:ParseRouteParameter", "capability": "structure", "expectation": "present", "recordKind": "edge", "kind": "defines", "from": { "kind": "class", "name": "RouteParameterParser", "locator": "workspace://RouteParameterParser.cs#L10-L260" }, "to": { "kind": "method", "name": "ParseRouteParameter(string)", "locator": "workspace://RouteParameterParser.cs#L16-L93" }, "locator": "workspace://RouteParameterParser.cs#L16-L93", "resolution": "exact" },
+ { "id": "cititem_aspnet_parse_call", "semanticKey": "edge:calls:ParseRouteParameter:ParseConstraints", "capability": "calls", "expectation": "present", "recordKind": "edge", "kind": "calls", "from": { "kind": "method", "name": "ParseRouteParameter(string)", "locator": "workspace://RouteParameterParser.cs#L16-L93" }, "to": { "kind": "method", "name": "ParseConstraints(string,int,int)", "locator": "workspace://RouteParameterParser.cs#L95-L238" }, "locator": "workspace://RouteParameterParser.cs#L77-L77", "resolution": "typed" },
+ { "id": "cititem_aspnet_import_routing_template", "semanticKey": "edge:imports:RoutePattern:Routing.Template", "capability": "imports", "expectation": "present", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "RoutePattern", "qualifiedName": "RoutePattern.cs::RoutePattern", "locator": "workspace://RoutePattern.cs#L1-L166" }, "to": { "kind": "module", "name": "Microsoft.AspNetCore.Routing.Template", "qualifiedName": "RoutePattern.cs::Microsoft.AspNetCore.Routing.Template", "locator": "workspace://RoutePattern.cs#L5-L5" }, "locator": "workspace://RoutePattern.cs#L5-L5", "resolution": "unresolved" },
+ { "id": "cititem_aspnet_import_routing_template_not_diagnostics", "semanticKey": "edge:imports:RoutePattern:routing-template-line:not-diagnostics", "capability": "imports", "expectation": "absent", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "RoutePattern", "qualifiedName": "RoutePattern.cs::RoutePattern", "locator": "workspace://RoutePattern.cs#L1-L166" }, "to": { "kind": "module", "name": "System.Diagnostics", "qualifiedName": "RoutePattern.cs::System.Diagnostics", "locator": "workspace://RoutePattern.cs#L4-L4" }, "locator": "workspace://RoutePattern.cs#L5-L5", "resolution": "unresolved" }
+ ],
+ "truthFingerprint": "sha256:0aba997c96907fc7eb3a741e53dddf42e489771c821847a76e48831544cbcbe0"
+}
diff --git a/evals/code-intelligence/truth/repositories/csharp/cirepo_csharp_dotnet_runtime.json b/evals/code-intelligence/truth/repositories/csharp/cirepo_csharp_dotnet_runtime.json
new file mode 100644
index 00000000..9580f559
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/csharp/cirepo_csharp_dotnet_runtime.json
@@ -0,0 +1,17 @@
+{
+ "schemaVersion": "1.0.0", "truthVersion": "memory-recall-code-intelligence-truth-1", "id": "citruth_csharp_dotnet_runtime_json_nodes", "language": "csharp",
+ "source": { "class": "real-repo", "ref": "corpus://cirepo_csharp_dotnet_runtime@e487c08fc5e689918da3e7fbb2747ca8b02c260d#src/libraries/System.Text.Json/src/System/Text/Json/Nodes" },
+ "review": { "status": "reviewed", "method": "source-locator", "reviewedBy": "memory-recall-maintainer", "reviewedAt": "2026-07-16T00:00:00.000Z" },
+ "reviewCoverage": { "declarations": "sampled", "relationships": "sampled", "calls": "sampled" },
+ "capabilityClaims": { "parse": "partial", "structure": "partial", "imports": "partial", "exports": "unmeasured", "heritage": "partial", "types": "partial", "calls": "partial", "config": "unmeasured", "frameworks": "unmeasured", "impact": "unmeasured", "processes": "unmeasured" },
+ "items": [
+ { "id": "cititem_runtime_json_node", "semanticKey": "node:class:JsonNode", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "class", "name": "JsonNode", "qualifiedName": "JsonNode.cs::System.Text.Json.Nodes::JsonNode", "locator": "workspace://JsonNode.cs#L17-L394" },
+ { "id": "cititem_runtime_deep_equals", "semanticKey": "node:method:JsonNode:DeepEquals", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "DeepEquals(JsonNode,JsonNode)", "qualifiedName": "JsonNode.cs::System.Text.Json.Nodes::JsonNode::DeepEquals(JsonNode,JsonNode)", "locator": "workspace://JsonNode.cs#L307-L319" },
+ { "id": "cititem_runtime_deep_equals_core", "semanticKey": "node:method:JsonNode:DeepEqualsCore", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "DeepEqualsCore(JsonNode)", "qualifiedName": "JsonNode.cs::System.Text.Json.Nodes::JsonNode::DeepEqualsCore(JsonNode)", "locator": "workspace://JsonNode.cs#L321-L321" },
+ { "id": "cititem_runtime_defines_deep_equals", "semanticKey": "edge:defines:JsonNode:DeepEquals", "capability": "structure", "expectation": "present", "recordKind": "edge", "kind": "defines", "from": { "kind": "class", "name": "JsonNode", "locator": "workspace://JsonNode.cs#L17-L394" }, "to": { "kind": "method", "name": "DeepEquals(JsonNode,JsonNode)", "locator": "workspace://JsonNode.cs#L307-L319" }, "locator": "workspace://JsonNode.cs#L307-L319", "resolution": "exact" },
+ { "id": "cititem_runtime_deep_equals_call", "semanticKey": "edge:calls:DeepEquals:DeepEqualsCore", "capability": "calls", "expectation": "present", "recordKind": "edge", "kind": "calls", "from": { "kind": "method", "name": "DeepEquals(JsonNode,JsonNode)", "locator": "workspace://JsonNode.cs#L307-L319" }, "to": { "kind": "method", "name": "DeepEqualsCore(JsonNode)", "locator": "workspace://JsonNode.cs#L321-L321" }, "locator": "workspace://JsonNode.cs#L318-L318", "resolution": "typed" },
+ { "id": "cititem_runtime_import_metadata", "semanticKey": "edge:imports:JsonValue.CreateOverloads:Serialization.Metadata", "capability": "imports", "expectation": "present", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "JsonValue_CreateOverloads", "qualifiedName": "JsonValue.CreateOverloads.cs::JsonValue_CreateOverloads", "locator": "workspace://JsonValue.CreateOverloads.cs#L1-L301" }, "to": { "kind": "module", "name": "System.Text.Json.Serialization.Metadata", "qualifiedName": "JsonNode.cs::System.Text.Json.Serialization.Metadata", "locator": "workspace://JsonNode.cs#L8-L8" }, "locator": "workspace://JsonValue.CreateOverloads.cs#L5-L5", "resolution": "unresolved" },
+ { "id": "cititem_runtime_import_metadata_not_code_analysis", "semanticKey": "edge:imports:JsonValue.CreateOverloads:metadata-line:not-code-analysis", "capability": "imports", "expectation": "absent", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "JsonValue_CreateOverloads", "qualifiedName": "JsonValue.CreateOverloads.cs::JsonValue_CreateOverloads", "locator": "workspace://JsonValue.CreateOverloads.cs#L1-L301" }, "to": { "kind": "module", "name": "System.Diagnostics.CodeAnalysis", "qualifiedName": "JsonArray.cs::System.Diagnostics.CodeAnalysis", "locator": "workspace://JsonArray.cs#L6-L6" }, "locator": "workspace://JsonValue.CreateOverloads.cs#L5-L5", "resolution": "unresolved" }
+ ],
+ "truthFingerprint": "sha256:50da1399c89f52bff91bba219a091a32196e0be1ba5f18cdd90d9049e3ba2a5b"
+}
diff --git a/evals/code-intelligence/truth/repositories/csharp/cirepo_csharp_jamesnk_newtonsoft_json.json b/evals/code-intelligence/truth/repositories/csharp/cirepo_csharp_jamesnk_newtonsoft_json.json
new file mode 100644
index 00000000..e2a8b1fc
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/csharp/cirepo_csharp_jamesnk_newtonsoft_json.json
@@ -0,0 +1,17 @@
+{
+ "schemaVersion": "1.0.0", "truthVersion": "memory-recall-code-intelligence-truth-1", "id": "citruth_csharp_newtonsoft_jsonpath", "language": "csharp",
+ "source": { "class": "real-repo", "ref": "corpus://cirepo_csharp_jamesnk_newtonsoft_json@4f73e74372445108d2c1bda37b36e6f5e43402e0#Src/Newtonsoft.Json/Linq/JsonPath" },
+ "review": { "status": "reviewed", "method": "source-locator", "reviewedBy": "memory-recall-maintainer", "reviewedAt": "2026-07-16T00:00:00.000Z" },
+ "reviewCoverage": { "declarations": "sampled", "relationships": "sampled", "calls": "sampled" },
+ "capabilityClaims": { "parse": "partial", "structure": "partial", "imports": "partial", "exports": "unmeasured", "heritage": "partial", "types": "partial", "calls": "partial", "config": "unmeasured", "frameworks": "unmeasured", "impact": "unmeasured", "processes": "unmeasured" },
+ "items": [
+ { "id": "cititem_newtonsoft_jpath", "semanticKey": "node:class:JPath", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "class", "name": "JPath", "qualifiedName": "JPath.cs::Newtonsoft.Json.Linq.JsonPath::JPath", "locator": "workspace://JPath.cs#L34-L892" },
+ { "id": "cititem_newtonsoft_parse_expression", "semanticKey": "node:method:JPath:ParseExpression", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "ParseExpression()", "qualifiedName": "JPath.cs::Newtonsoft.Json.Linq.JsonPath::JPath::ParseExpression()", "locator": "workspace://JPath.cs#L488-L573" },
+ { "id": "cititem_newtonsoft_match", "semanticKey": "node:method:JPath:Match", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "Match(string)", "qualifiedName": "JPath.cs::Newtonsoft.Json.Linq.JsonPath::JPath::Match(string)", "locator": "workspace://JPath.cs#L753-L770" },
+ { "id": "cititem_newtonsoft_defines_parse", "semanticKey": "edge:defines:JPath:ParseExpression", "capability": "structure", "expectation": "present", "recordKind": "edge", "kind": "defines", "from": { "kind": "class", "name": "JPath", "locator": "workspace://JPath.cs#L34-L892" }, "to": { "kind": "method", "name": "ParseExpression()", "locator": "workspace://JPath.cs#L488-L573" }, "locator": "workspace://JPath.cs#L488-L573", "resolution": "exact" },
+ { "id": "cititem_newtonsoft_parse_match", "semanticKey": "edge:calls:ParseExpression:Match", "capability": "calls", "expectation": "present", "recordKind": "edge", "kind": "calls", "from": { "kind": "method", "name": "ParseExpression()", "locator": "workspace://JPath.cs#L488-L573" }, "to": { "kind": "method", "name": "Match(string)", "locator": "workspace://JPath.cs#L753-L770" }, "locator": "workspace://JPath.cs#L526-L526", "resolution": "typed" },
+ { "id": "cititem_newtonsoft_import_collections_generic", "semanticKey": "edge:imports:QueryScanFilter:System.Collections.Generic", "capability": "imports", "expectation": "present", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "QueryScanFilter", "qualifiedName": "QueryScanFilter.cs::QueryScanFilter", "locator": "workspace://QueryScanFilter.cs#L1-L39" }, "to": { "kind": "module", "name": "System.Collections.Generic", "qualifiedName": "ArrayIndexFilter.cs::System.Collections.Generic", "locator": "workspace://ArrayIndexFilter.cs#L1-L1" }, "locator": "workspace://QueryScanFilter.cs#L2-L2", "resolution": "unresolved" },
+ { "id": "cititem_newtonsoft_import_collections_generic_not_system", "semanticKey": "edge:imports:QueryScanFilter:collections-line:not-system", "capability": "imports", "expectation": "absent", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "QueryScanFilter", "qualifiedName": "QueryScanFilter.cs::QueryScanFilter", "locator": "workspace://QueryScanFilter.cs#L1-L39" }, "to": { "kind": "module", "name": "System", "qualifiedName": "ArraySliceFilter.cs::System", "locator": "workspace://ArraySliceFilter.cs#L1-L1" }, "locator": "workspace://QueryScanFilter.cs#L2-L2", "resolution": "unresolved" }
+ ],
+ "truthFingerprint": "sha256:7f4123bbfc84580bc1ef81b4520d65441fe84110eacd93f907662942ef76858d"
+}
diff --git a/evals/code-intelligence/truth/repositories/dart/cirepo_dart_dart_lang_http.json b/evals/code-intelligence/truth/repositories/dart/cirepo_dart_dart_lang_http.json
new file mode 100644
index 00000000..14619d73
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/dart/cirepo_dart_dart_lang_http.json
@@ -0,0 +1,18 @@
+{
+ "schemaVersion": "1.0.0", "truthVersion": "memory-recall-code-intelligence-truth-1", "id": "citruth_dart_http_base_client", "language": "dart",
+ "source": { "class": "real-repo", "ref": "corpus://cirepo_dart_dart_lang_http@fe4aaa900d50f0423200dd333314729d2c0650b9#pkgs/http/lib" },
+ "review": { "status": "reviewed", "method": "source-locator", "reviewedBy": "memory-recall-maintainer", "reviewedAt": "2026-07-16T00:00:00.000Z" },
+ "reviewCoverage": { "declarations": "sampled", "relationships": "sampled", "calls": "sampled" },
+ "capabilityClaims": { "parse": "partial", "structure": "partial", "imports": "partial", "exports": "partial", "heritage": "partial", "types": "partial", "calls": "partial", "config": "unmeasured", "frameworks": "unmeasured", "impact": "unmeasured", "processes": "unmeasured" },
+ "items": [
+ { "id": "cititem_http_base_client", "semanticKey": "node:class:BaseClient", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "class", "name": "BaseClient", "qualifiedName": "src/base_client.dart::BaseClient", "locator": "workspace://src/base_client.dart#L20-L108" },
+ { "id": "cititem_http_get", "semanticKey": "node:method:BaseClient-get", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "get(Uri,String)", "qualifiedName": "src/base_client.dart::BaseClient::get(Uri,String)", "locator": "workspace://src/base_client.dart#L25-L27" },
+ { "id": "cititem_http_send_unstreamed", "semanticKey": "node:method:BaseClient-send-unstreamed", "capability": "types", "expectation": "present", "recordKind": "node", "kind": "method", "name": "_sendUnstreamed(String,Uri,String,Object,Encoding)", "qualifiedName": "src/base_client.dart::BaseClient::_sendUnstreamed(String,Uri,String,Object,Encoding)", "locator": "workspace://src/base_client.dart#L74-L94" },
+ { "id": "cititem_http_implements_client", "semanticKey": "edge:implements:BaseClient:Client", "capability": "heritage", "expectation": "present", "recordKind": "edge", "kind": "implements", "from": { "kind": "class", "name": "BaseClient", "locator": "workspace://src/base_client.dart#L20-L108" }, "to": { "kind": "interface", "name": "Client", "locator": "workspace://src/client.dart#L36-L159" }, "locator": "workspace://src/base_client.dart#L20-L108", "resolution": "exact" },
+ { "id": "cititem_http_import_request", "semanticKey": "edge:imports:base-client:request", "capability": "imports", "expectation": "present", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "src_base_client", "locator": "workspace://src/base_client.dart#L1-L109" }, "to": { "kind": "module", "name": "src_request", "locator": "workspace://src/request.dart#L1-L222" }, "locator": "workspace://src/base_client.dart#L12-L12", "resolution": "exact" },
+ { "id": "cititem_http_call_send_unstreamed", "semanticKey": "edge:calls:get:send-unstreamed", "capability": "calls", "expectation": "present", "recordKind": "edge", "kind": "calls", "from": { "kind": "method", "name": "get(Uri,String)", "locator": "workspace://src/base_client.dart#L25-L27" }, "to": { "kind": "method", "name": "_sendUnstreamed(String,Uri,String,Object,Encoding)", "locator": "workspace://src/base_client.dart#L74-L94" }, "locator": "workspace://src/base_client.dart#L27-L27", "resolution": "typed" },
+ { "id": "cititem_http_export_mock_client", "semanticKey": "edge:re-exports:testing:mock-client", "capability": "exports", "expectation": "present", "recordKind": "edge", "kind": "re_exports", "from": { "kind": "module", "name": "testing", "locator": "workspace://testing.dart#L1-L30" }, "to": { "kind": "module", "name": "src_mock_client", "locator": "workspace://src/mock_client.dart#L1-L108" }, "locator": "workspace://testing.dart#L29-L29", "resolution": "exact" },
+ { "id": "cititem_http_import_mock_client_not_export", "semanticKey": "edge:re-exports:testing:mock-client-line:not-import", "capability": "exports", "expectation": "absent", "recordKind": "edge", "kind": "re_exports", "from": { "kind": "module", "name": "testing", "locator": "workspace://testing.dart#L1-L30" }, "to": { "kind": "module", "name": "src_mock_client", "locator": "workspace://src/mock_client.dart#L1-L108" }, "locator": "workspace://testing.dart#L27-L27", "resolution": "exact" }
+ ],
+ "truthFingerprint": "sha256:33d3093f50eb7f0cd982d68e75fadc5054aa982af21fec91aee368fe9ba2d4d4"
+}
diff --git a/evals/code-intelligence/truth/repositories/dart/cirepo_dart_dart_lang_shelf.json b/evals/code-intelligence/truth/repositories/dart/cirepo_dart_dart_lang_shelf.json
new file mode 100644
index 00000000..f41a1d84
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/dart/cirepo_dart_dart_lang_shelf.json
@@ -0,0 +1,19 @@
+{
+ "schemaVersion": "1.0.0", "truthVersion": "memory-recall-code-intelligence-truth-1", "id": "citruth_dart_shelf_router", "language": "dart",
+ "source": { "class": "real-repo", "ref": "corpus://cirepo_dart_dart_lang_shelf@833433edf813df24e9a48e01fc38647d53b979f8#pkgs/shelf_router/lib" },
+ "review": { "status": "reviewed", "method": "source-locator", "reviewedBy": "memory-recall-maintainer", "reviewedAt": "2026-07-16T00:00:00.000Z" },
+ "reviewCoverage": { "declarations": "sampled", "relationships": "sampled", "calls": "sampled" },
+ "capabilityClaims": { "parse": "partial", "structure": "partial", "imports": "partial", "exports": "partial", "heritage": "partial", "types": "partial", "calls": "partial", "config": "unmeasured", "frameworks": "partial", "impact": "unmeasured", "processes": "unmeasured" },
+ "items": [
+ { "id": "cititem_shelf_router_class", "semanticKey": "node:class:Router", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "class", "name": "Router", "qualifiedName": "src/router.dart::Router", "locator": "workspace://src/router.dart#L114-L282" },
+ { "id": "cititem_shelf_router_add", "semanticKey": "node:method:Router-add", "capability": "types", "expectation": "present", "recordKind": "node", "kind": "method", "name": "add(String,String,Function)", "qualifiedName": "src/router.dart::Router::add(String,String,Function)", "locator": "workspace://src/router.dart#L132-L144" },
+ { "id": "cititem_shelf_router_get", "semanticKey": "node:method:Router-get", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "get(String,Function)", "qualifiedName": "src/router.dart::Router::get(String,Function)", "locator": "workspace://src/router.dart#L200-L200" },
+ { "id": "cititem_shelf_router_params_on_request", "semanticKey": "edge:extends-type:RouterParams:Request", "capability": "heritage", "expectation": "present", "recordKind": "edge", "kind": "extends_type", "from": { "kind": "extension", "name": "RouterParams", "qualifiedName": "src/router.dart::RouterParams", "locator": "workspace://src/router.dart#L36-L59" }, "to": { "kind": "class", "name": "Request", "qualifiedName": "src/router.dart::Request", "locator": "workspace://src/router.dart#L36-L59" }, "locator": "workspace://src/router.dart#L36-L59", "resolution": "unresolved" },
+ { "id": "cititem_shelf_defines_add", "semanticKey": "edge:defines:Router:add", "capability": "structure", "expectation": "present", "recordKind": "edge", "kind": "defines", "from": { "kind": "class", "name": "Router", "locator": "workspace://src/router.dart#L114-L282" }, "to": { "kind": "method", "name": "add(String,String,Function)", "locator": "workspace://src/router.dart#L132-L144" }, "locator": "workspace://src/router.dart#L132-L144", "resolution": "exact" },
+ { "id": "cititem_shelf_import_trie", "semanticKey": "edge:imports:router:trie", "capability": "imports", "expectation": "present", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "src_router", "locator": "workspace://src/router.dart#L1-L308" }, "to": { "kind": "module", "name": "src_trie", "locator": "workspace://src/trie.dart#L1-L131" }, "locator": "workspace://src/router.dart#L22-L22", "resolution": "exact" },
+ { "id": "cititem_shelf_call_add", "semanticKey": "edge:calls:get:add", "capability": "calls", "expectation": "present", "recordKind": "edge", "kind": "calls", "from": { "kind": "method", "name": "get(String,Function)", "locator": "workspace://src/router.dart#L200-L200" }, "to": { "kind": "method", "name": "add(String,String,Function)", "locator": "workspace://src/router.dart#L132-L144" }, "locator": "workspace://src/router.dart#L200-L200", "resolution": "typed" },
+ { "id": "cititem_shelf_export_route", "semanticKey": "edge:re-exports:shelf-router:route", "capability": "exports", "expectation": "present", "recordKind": "edge", "kind": "re_exports", "from": { "kind": "module", "name": "shelf_router", "locator": "workspace://shelf_router.dart#L1-L86" }, "to": { "kind": "module", "name": "src_route", "locator": "workspace://src/route.dart#L1-L91" }, "locator": "workspace://shelf_router.dart#L84-L84", "resolution": "exact" },
+ { "id": "cititem_shelf_import_route_not_export", "semanticKey": "edge:re-exports:shelf-router:route-line:not-import", "capability": "exports", "expectation": "absent", "recordKind": "edge", "kind": "re_exports", "from": { "kind": "module", "name": "shelf_router", "locator": "workspace://shelf_router.dart#L1-L86" }, "to": { "kind": "module", "name": "src_route", "locator": "workspace://src/route.dart#L1-L91" }, "locator": "workspace://shelf_router.dart#L81-L81", "resolution": "exact" }
+ ],
+ "truthFingerprint": "sha256:527100a88b4c66e96f175a5a65460e36c6816374d3db91d76ad8b9b551b65d76"
+}
diff --git a/evals/code-intelligence/truth/repositories/dart/cirepo_dart_flutter_samples.json b/evals/code-intelligence/truth/repositories/dart/cirepo_dart_flutter_samples.json
new file mode 100644
index 00000000..a8be6c3c
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/dart/cirepo_dart_flutter_samples.json
@@ -0,0 +1,23 @@
+{
+ "schemaVersion": "1.0.0", "truthVersion": "memory-recall-code-intelligence-truth-1", "id": "citruth_dart_flutter_navigation_sample", "language": "dart",
+ "source": { "class": "real-repo", "ref": "corpus://cirepo_dart_flutter_samples@09335b0c7a84ae29bf5454bd54f4e15c2cdd79a1#navigation_and_routing/lib" },
+ "review": { "status": "reviewed", "method": "source-locator", "reviewedBy": "memory-recall-maintainer", "reviewedAt": "2026-07-16T00:00:00.000Z" },
+ "reviewCoverage": { "declarations": "sampled", "relationships": "sampled", "calls": "sampled" },
+ "capabilityClaims": { "parse": "partial", "structure": "partial", "imports": "partial", "exports": "partial", "heritage": "partial", "types": "partial", "calls": "partial", "config": "partial", "frameworks": "partial", "impact": "unmeasured", "processes": "unmeasured" },
+ "items": [
+ { "id": "cititem_flutter_main", "semanticKey": "node:function:main", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "function", "name": "main", "qualifiedName": "main.dart::main", "locator": "workspace://main.dart#L8-L11" },
+ { "id": "cititem_flutter_application", "semanticKey": "node:framework:flutter-application", "capability": "frameworks", "expectation": "present", "recordKind": "node", "kind": "framework_component", "name": "flutter_application", "qualifiedName": "main.dart::flutter_application", "locator": "workspace://main.dart#L10-L10" },
+ { "id": "cititem_flutter_bookstore", "semanticKey": "node:class:Bookstore", "capability": "types", "expectation": "present", "recordKind": "node", "kind": "class", "name": "Bookstore", "qualifiedName": "src/app.dart::Bookstore", "locator": "workspace://src/app.dart#L27-L32" },
+ { "id": "cititem_flutter_bookstore_state_extends_state", "semanticKey": "edge:extends:BookstoreState:State", "capability": "heritage", "expectation": "present", "recordKind": "edge", "kind": "extends", "from": { "kind": "class", "name": "_BookstoreState", "qualifiedName": "src/app.dart::_BookstoreState", "locator": "workspace://src/app.dart#L34-L279" }, "to": { "kind": "class", "name": "State", "qualifiedName": "src/app.dart::State", "locator": "workspace://src/app.dart#L34-L279" }, "locator": "workspace://src/app.dart#L34-L279", "resolution": "unresolved" },
+ { "id": "cititem_flutter_bookstore_state_not_extends_bookstore", "semanticKey": "edge:extends:BookstoreState:not-Bookstore", "capability": "heritage", "expectation": "absent", "recordKind": "edge", "kind": "extends", "from": { "kind": "class", "name": "_BookstoreState", "qualifiedName": "src/app.dart::_BookstoreState", "locator": "workspace://src/app.dart#L34-L279" }, "to": { "kind": "class", "name": "Bookstore", "qualifiedName": "src/app.dart::Bookstore", "locator": "workspace://src/app.dart#L27-L32" }, "locator": "workspace://src/app.dart#L34-L279", "resolution": "exact" },
+ { "id": "cititem_flutter_books_screen_state_mixes_in_ticker", "semanticKey": "edge:mixes-in:BooksScreenState:SingleTickerProviderStateMixin", "capability": "heritage", "expectation": "present", "recordKind": "edge", "kind": "mixes_in", "from": { "kind": "class", "name": "_BooksScreenState", "qualifiedName": "src/screens/books.dart::_BooksScreenState", "locator": "workspace://src/screens/books.dart#L23-L69" }, "to": { "kind": "mixin", "name": "SingleTickerProviderStateMixin", "qualifiedName": "src/screens/books.dart::SingleTickerProviderStateMixin", "locator": "workspace://src/screens/books.dart#L23-L69" }, "locator": "workspace://src/screens/books.dart#L23-L69", "resolution": "unresolved" },
+ { "id": "cititem_flutter_defines_main", "semanticKey": "edge:defines:main-module:main", "capability": "structure", "expectation": "present", "recordKind": "edge", "kind": "defines", "from": { "kind": "module", "name": "main", "locator": "workspace://main.dart#L1-L15" }, "to": { "kind": "function", "name": "main", "locator": "workspace://main.dart#L8-L11" }, "locator": "workspace://main.dart#L8-L11", "resolution": "exact" },
+ { "id": "cititem_flutter_import_app", "semanticKey": "edge:imports:main:app", "capability": "imports", "expectation": "present", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "main", "locator": "workspace://main.dart#L1-L15" }, "to": { "kind": "module", "name": "src_app", "locator": "workspace://src/app.dart#L1-L280" }, "locator": "workspace://main.dart#L6-L6", "resolution": "exact" },
+ { "id": "cititem_flutter_entry_point", "semanticKey": "edge:entry-point:main:flutter", "capability": "frameworks", "expectation": "present", "recordKind": "edge", "kind": "entry_point", "from": { "kind": "function", "name": "main", "locator": "workspace://main.dart#L8-L11" }, "to": { "kind": "framework_component", "name": "flutter_application", "locator": "workspace://main.dart#L10-L10" }, "locator": "workspace://main.dart#L10-L10", "resolution": "exact" },
+ { "id": "cititem_flutter_export_author", "semanticKey": "edge:re-exports:data:author", "capability": "exports", "expectation": "present", "recordKind": "edge", "kind": "re_exports", "from": { "kind": "module", "name": "src_data", "locator": "workspace://src/data.dart#L1-L8" }, "to": { "kind": "module", "name": "src_data_author", "locator": "workspace://src/data/author.dart#L1-L14" }, "locator": "workspace://src/data.dart#L5-L5", "resolution": "exact" },
+ { "id": "cititem_flutter_import_app_not_export", "semanticKey": "edge:re-exports:main:app-line:not-import", "capability": "exports", "expectation": "absent", "recordKind": "edge", "kind": "re_exports", "from": { "kind": "module", "name": "main", "locator": "workspace://main.dart#L1-L15" }, "to": { "kind": "module", "name": "src_app", "locator": "workspace://src/app.dart#L1-L280" }, "locator": "workspace://main.dart#L6-L6", "resolution": "exact" },
+ { "id": "cititem_flutter_call_auth_of", "semanticKey": "edge:calls:bookstore-build:auth-of", "capability": "calls", "expectation": "present", "recordKind": "edge", "kind": "calls", "from": { "kind": "method", "name": "build(BuildContext)", "locator": "workspace://src/app.dart#L37-L278" }, "to": { "kind": "method", "name": "of(BuildContext)", "locator": "workspace://src/auth.dart#L36-L38" }, "locator": "workspace://src/app.dart#L51-L51", "resolution": "typed" },
+ { "id": "cititem_flutter_go_router_of_not_auth_of", "semanticKey": "edge:calls:bookstore-build:auth-of-line:not-go-router", "capability": "calls", "expectation": "absent", "recordKind": "edge", "kind": "calls", "from": { "kind": "method", "name": "build(BuildContext)", "locator": "workspace://src/app.dart#L37-L278" }, "to": { "kind": "method", "name": "of(BuildContext)", "locator": "workspace://src/auth.dart#L36-L38" }, "locator": "workspace://src/app.dart#L80-L80", "resolution": "typed" }
+ ],
+ "truthFingerprint": "sha256:f31e0bd207211357c1c0fa6ff467a1dbef703ab8e2aac563041f9aa0b63ff124"
+}
diff --git a/evals/code-intelligence/truth/repositories/go/cirepo_go_gin_gonic_gin.json b/evals/code-intelligence/truth/repositories/go/cirepo_go_gin_gonic_gin.json
new file mode 100644
index 00000000..8ec8fb5d
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/go/cirepo_go_gin_gonic_gin.json
@@ -0,0 +1,153 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_go_gin_gonic_gin",
+ "language": "go",
+ "source": {
+ "class": "real-repo",
+ "ref": "corpus://cirepo_go_gin_gonic_gin@34dac209ffb6ef85cc78c5d217bbb7ad001d68fd#."
+ },
+ "review": {
+ "status": "reviewed",
+ "method": "source-locator",
+ "reviewedBy": "memory-recall-maintainer",
+ "reviewedAt": "2026-07-16T00:00:00.000Z"
+ },
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "capabilityClaims": {
+ "parse": "partial",
+ "structure": "partial",
+ "imports": "partial",
+ "exports": "partial",
+ "heritage": "unmeasured",
+ "types": "partial",
+ "calls": "partial",
+ "config": "unmeasured",
+ "frameworks": "unmeasured",
+ "impact": "unmeasured",
+ "processes": "unmeasured"
+ },
+ "items": [
+ {
+ "id": "cititem_gin_engine",
+ "semanticKey": "node:struct:gin.go:Engine",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "struct",
+ "name": "Engine",
+ "qualifiedName": "gin.go::Engine",
+ "locator": "workspace://gin.go#L92-L189"
+ },
+ {
+ "id": "cititem_gin_route_info",
+ "semanticKey": "node:struct:gin.go:RouteInfo",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "struct",
+ "name": "RouteInfo",
+ "qualifiedName": "gin.go::RouteInfo",
+ "locator": "workspace://gin.go#L68-L73"
+ },
+ {
+ "id": "cititem_gin_no_route",
+ "semanticKey": "node:method:gin.go:Engine:NoRoute",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "method",
+ "name": "NoRoute",
+ "qualifiedName": "gin.go::Engine::NoRoute",
+ "locator": "workspace://gin.go#L326-L329"
+ },
+ {
+ "id": "cititem_gin_rebuild_404",
+ "semanticKey": "node:method:gin.go:Engine:rebuild404Handlers",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "method",
+ "name": "rebuild404Handlers",
+ "qualifiedName": "gin.go::Engine::rebuild404Handlers",
+ "locator": "workspace://gin.go#L356-L358"
+ },
+ {
+ "id": "cititem_gin_construct_engine",
+ "semanticKey": "edge:constructs:gin.go:New:Engine",
+ "capability": "types",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "constructs",
+ "from": { "kind": "function", "name": "New", "qualifiedName": "gin.go::New", "locator": "workspace://gin.go#L202-L233" },
+ "to": { "kind": "struct", "name": "Engine", "qualifiedName": "gin.go::Engine", "locator": "workspace://gin.go#L92-L189" },
+ "locator": "workspace://gin.go#L204-L227",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_gin_call_rebuild_404",
+ "semanticKey": "edge:calls:gin.go:Engine.NoRoute:rebuild404Handlers",
+ "capability": "calls",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "calls",
+ "from": { "kind": "method", "name": "NoRoute", "qualifiedName": "gin.go::Engine::NoRoute", "locator": "workspace://gin.go#L326-L329" },
+ "to": { "kind": "method", "name": "rebuild404Handlers", "qualifiedName": "gin.go::Engine::rebuild404Handlers", "locator": "workspace://gin.go#L356-L358" },
+ "locator": "workspace://gin.go#L328-L328",
+ "resolution": "typed"
+ },
+ {
+ "id": "cititem_gin_import_crypto_rand",
+ "semanticKey": "edge:imports:internal/bytesconv/bytesconv_test.go:crypto/rand",
+ "capability": "imports",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "imports",
+ "from": { "kind": "module", "name": "internal_bytesconv_bytesconv_test", "qualifiedName": "internal/bytesconv/bytesconv_test.go::internal_bytesconv_bytesconv_test", "locator": "workspace://internal/bytesconv/bytesconv_test.go#L1-L125" },
+ "to": { "kind": "module", "name": "crypto/rand", "qualifiedName": "internal/bytesconv/bytesconv_test.go::crypto/rand", "locator": "workspace://internal/bytesconv/bytesconv_test.go#L9-L9" },
+ "locator": "workspace://internal/bytesconv/bytesconv_test.go#L9-L9",
+ "resolution": "unresolved"
+ },
+ {
+ "id": "cititem_gin_import_crypto_rand_not_math_rand",
+ "semanticKey": "edge:imports:internal/bytesconv/bytesconv_test.go:crypto-line:not-math-rand",
+ "capability": "imports",
+ "expectation": "absent",
+ "recordKind": "edge",
+ "kind": "imports",
+ "from": { "kind": "module", "name": "internal_bytesconv_bytesconv_test", "qualifiedName": "internal/bytesconv/bytesconv_test.go::internal_bytesconv_bytesconv_test", "locator": "workspace://internal/bytesconv/bytesconv_test.go#L1-L125" },
+ "to": { "kind": "module", "name": "math/rand", "qualifiedName": "githubapi_test.go::math/rand", "locator": "workspace://githubapi_test.go#L9-L9" },
+ "locator": "workspace://internal/bytesconv/bytesconv_test.go#L9-L9",
+ "resolution": "unresolved"
+ },
+ {
+ "id": "cititem_gin_export_engine",
+ "semanticKey": "edge:exports:gin.go:Engine",
+ "capability": "exports",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "exports",
+ "from": { "kind": "package", "name": "gin", "qualifiedName": "gin.go::gin", "locator": "workspace://gin.go#L5-L5" },
+ "to": { "kind": "struct", "name": "Engine", "qualifiedName": "gin.go::Engine", "locator": "workspace://gin.go#L92-L189" },
+ "locator": "workspace://gin.go#L92-L189",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_gin_private_rebuild_not_exported",
+ "semanticKey": "edge:exports:gin.go:Engine.rebuild404Handlers:absent",
+ "capability": "exports",
+ "expectation": "absent",
+ "recordKind": "edge",
+ "kind": "exports",
+ "from": { "kind": "package", "name": "gin", "qualifiedName": "gin.go::gin", "locator": "workspace://gin.go#L5-L5" },
+ "to": { "kind": "method", "name": "rebuild404Handlers", "qualifiedName": "gin.go::Engine::rebuild404Handlers", "locator": "workspace://gin.go#L356-L358" },
+ "locator": "workspace://gin.go#L356-L358",
+ "resolution": "exact"
+ }
+ ],
+ "truthFingerprint": "sha256:bac48e4a489313758cfa8aeb896782a45b0eb9c5f27bd42f76f757f1842b506d"
+}
diff --git a/evals/code-intelligence/truth/repositories/go/cirepo_go_go_chi_chi.json b/evals/code-intelligence/truth/repositories/go/cirepo_go_go_chi_chi.json
new file mode 100644
index 00000000..c2a599f7
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/go/cirepo_go_go_chi_chi.json
@@ -0,0 +1,165 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_go_go_chi_chi",
+ "language": "go",
+ "source": {
+ "class": "real-repo",
+ "ref": "corpus://cirepo_go_go_chi_chi@8b258c7bb28f97a5f2a856ff7ef962578fec9215#."
+ },
+ "review": {
+ "status": "reviewed",
+ "method": "source-locator",
+ "reviewedBy": "memory-recall-maintainer",
+ "reviewedAt": "2026-07-16T00:00:00.000Z"
+ },
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "capabilityClaims": {
+ "parse": "partial",
+ "structure": "partial",
+ "imports": "partial",
+ "exports": "partial",
+ "heritage": "unmeasured",
+ "types": "partial",
+ "calls": "partial",
+ "config": "unmeasured",
+ "frameworks": "partial",
+ "impact": "unmeasured",
+ "processes": "unmeasured"
+ },
+ "items": [
+ {
+ "id": "cititem_chi_router",
+ "semanticKey": "node:interface:chi.go:Router",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "interface",
+ "name": "Router",
+ "qualifiedName": "chi.go::Router",
+ "locator": "workspace://chi.go#L66-L115"
+ },
+ {
+ "id": "cititem_chi_routes",
+ "semanticKey": "node:interface:chi.go:Routes",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "interface",
+ "name": "Routes",
+ "qualifiedName": "chi.go::Routes",
+ "locator": "workspace://chi.go#L119-L134"
+ },
+ {
+ "id": "cititem_chi_new_router",
+ "semanticKey": "node:function:chi.go:NewRouter",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "function",
+ "name": "NewRouter",
+ "qualifiedName": "chi.go::NewRouter",
+ "locator": "workspace://chi.go#L60-L62"
+ },
+ {
+ "id": "cititem_chi_path_value_handler",
+ "semanticKey": "node:function:_examples/pathvalue/main.go:pathValueHandler",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "function",
+ "name": "pathValueHandler",
+ "qualifiedName": "_examples/pathvalue/main.go::pathValueHandler",
+ "locator": "workspace://_examples/pathvalue/main.go#L20-L25"
+ },
+ {
+ "id": "cititem_chi_construct_mux",
+ "semanticKey": "edge:constructs:mux.go:NewMux:Mux",
+ "capability": "types",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "constructs",
+ "from": { "kind": "function", "name": "NewMux", "qualifiedName": "mux.go::NewMux", "locator": "workspace://mux.go#L52-L58" },
+ "to": { "kind": "struct", "name": "Mux", "qualifiedName": "mux.go::Mux", "locator": "workspace://mux.go#L21-L48" },
+ "locator": "workspace://mux.go#L53-L53",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_chi_call_new_router",
+ "semanticKey": "edge:calls:mux.go:Mux.Route:NewRouter",
+ "capability": "calls",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "calls",
+ "from": { "kind": "method", "name": "Route", "qualifiedName": "mux.go::Mux::Route", "locator": "workspace://mux.go#L278-L286" },
+ "to": { "kind": "function", "name": "NewRouter", "qualifiedName": "chi.go::NewRouter", "locator": "workspace://chi.go#L60-L62" },
+ "locator": "workspace://mux.go#L282-L282",
+ "resolution": "inferred"
+ },
+ {
+ "id": "cititem_chi_get_path_value_route",
+ "semanticKey": "edge:handles_route:_examples/pathvalue/main.go:pathValueHandler:GET_users_param",
+ "capability": "frameworks",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "handles_route",
+ "from": { "kind": "function", "name": "pathValueHandler", "qualifiedName": "_examples/pathvalue/main.go::pathValueHandler", "locator": "workspace://_examples/pathvalue/main.go#L20-L25" },
+ "to": { "kind": "route", "name": "GET_users_param", "qualifiedName": "_examples/pathvalue/main.go::GET_users_param", "locator": "workspace://_examples/pathvalue/main.go#L14-L14" },
+ "locator": "workspace://_examples/pathvalue/main.go#L14-L14",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_chi_import_middleware",
+ "semanticKey": "edge:imports:_examples/custom-method/main.go:chi-middleware",
+ "capability": "imports",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "imports",
+ "from": { "kind": "module", "name": "_examples_custom_method_main", "qualifiedName": "_examples/custom-method/main.go::_examples_custom_method_main", "locator": "workspace://_examples/custom-method/main.go#L1-L34" },
+ "to": { "kind": "module", "name": "github.com/go-chi/chi/v5/middleware", "qualifiedName": "_examples/custom-method/main.go::github.com/go-chi/chi/v5/middleware", "locator": "workspace://_examples/custom-method/main.go#L7-L7" },
+ "locator": "workspace://_examples/custom-method/main.go#L7-L7",
+ "resolution": "unresolved"
+ },
+ {
+ "id": "cititem_chi_import_middleware_not_router",
+ "semanticKey": "edge:imports:_examples/custom-method/main.go:middleware-line:not-router",
+ "capability": "imports",
+ "expectation": "absent",
+ "recordKind": "edge",
+ "kind": "imports",
+ "from": { "kind": "module", "name": "_examples_custom_method_main", "qualifiedName": "_examples/custom-method/main.go::_examples_custom_method_main", "locator": "workspace://_examples/custom-method/main.go#L1-L34" },
+ "to": { "kind": "module", "name": "github.com/go-chi/chi/v5", "qualifiedName": "_examples/custom-handler/main.go::github.com/go-chi/chi/v5", "locator": "workspace://_examples/custom-handler/main.go#L7-L7" },
+ "locator": "workspace://_examples/custom-method/main.go#L7-L7",
+ "resolution": "unresolved"
+ },
+ {
+ "id": "cititem_chi_export_new_router",
+ "semanticKey": "edge:exports:chi.go:NewRouter",
+ "capability": "exports",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "exports",
+ "from": { "kind": "package", "name": "chi", "qualifiedName": "chi.go::chi", "locator": "workspace://chi.go#L55-L55" },
+ "to": { "kind": "function", "name": "NewRouter", "qualifiedName": "chi.go::NewRouter", "locator": "workspace://chi.go#L60-L62" },
+ "locator": "workspace://chi.go#L60-L62",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_chi_private_path_value_not_exported",
+ "semanticKey": "edge:exports:_examples/pathvalue/main.go:pathValueHandler:absent",
+ "capability": "exports",
+ "expectation": "absent",
+ "recordKind": "edge",
+ "kind": "exports",
+ "from": { "kind": "package", "name": "main", "qualifiedName": "_examples/pathvalue/main.go::main", "locator": "workspace://_examples/pathvalue/main.go#L1-L1" },
+ "to": { "kind": "function", "name": "pathValueHandler", "qualifiedName": "_examples/pathvalue/main.go::pathValueHandler", "locator": "workspace://_examples/pathvalue/main.go#L20-L25" },
+ "locator": "workspace://_examples/pathvalue/main.go#L20-L25",
+ "resolution": "exact"
+ }
+ ],
+ "truthFingerprint": "sha256:5ff443493e76e815ef0e51fca22abbd3435e0c08c4c41308040d69c1c08d74e7"
+}
diff --git a/evals/code-intelligence/truth/repositories/go/cirepo_go_hashicorp_go_multierror.json b/evals/code-intelligence/truth/repositories/go/cirepo_go_hashicorp_go_multierror.json
new file mode 100644
index 00000000..e4b988b4
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/go/cirepo_go_hashicorp_go_multierror.json
@@ -0,0 +1,153 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_go_hashicorp_go_multierror",
+ "language": "go",
+ "source": {
+ "class": "real-repo",
+ "ref": "corpus://cirepo_go_hashicorp_go_multierror@6d4d48630db25c3c83fa83ecd41dd8438b82963c#."
+ },
+ "review": {
+ "status": "reviewed",
+ "method": "source-locator",
+ "reviewedBy": "memory-recall-maintainer",
+ "reviewedAt": "2026-07-16T00:00:00.000Z"
+ },
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "capabilityClaims": {
+ "parse": "partial",
+ "structure": "partial",
+ "imports": "partial",
+ "exports": "partial",
+ "heritage": "unmeasured",
+ "types": "partial",
+ "calls": "partial",
+ "config": "unmeasured",
+ "frameworks": "unmeasured",
+ "impact": "unmeasured",
+ "processes": "unmeasured"
+ },
+ "items": [
+ {
+ "id": "cititem_multierror_error",
+ "semanticKey": "node:struct:multierror.go:Error",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "struct",
+ "name": "Error",
+ "qualifiedName": "multierror.go::Error",
+ "locator": "workspace://multierror.go#L13-L16"
+ },
+ {
+ "id": "cititem_multierror_error_method",
+ "semanticKey": "node:method:multierror.go:Error:Error",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "method",
+ "name": "Error",
+ "qualifiedName": "multierror.go::Error::Error",
+ "locator": "workspace://multierror.go#L18-L25"
+ },
+ {
+ "id": "cititem_multierror_error_or_nil",
+ "semanticKey": "node:method:multierror.go:Error:ErrorOrNil",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "method",
+ "name": "ErrorOrNil",
+ "qualifiedName": "multierror.go::Error::ErrorOrNil",
+ "locator": "workspace://multierror.go#L31-L40"
+ },
+ {
+ "id": "cititem_multierror_append",
+ "semanticKey": "node:function:append.go:Append",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "function",
+ "name": "Append",
+ "qualifiedName": "append.go::Append",
+ "locator": "workspace://append.go#L14-L46"
+ },
+ {
+ "id": "cititem_multierror_construct_error",
+ "semanticKey": "edge:constructs:append.go:Append:Error",
+ "capability": "types",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "constructs",
+ "from": { "kind": "function", "name": "Append", "qualifiedName": "append.go::Append", "locator": "workspace://append.go#L14-L46" },
+ "to": { "kind": "struct", "name": "Error", "qualifiedName": "multierror.go::Error", "locator": "workspace://multierror.go#L13-L16" },
+ "locator": "workspace://append.go#L44-L44",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_multierror_recursive_append",
+ "semanticKey": "edge:calls:append.go:Append:Append",
+ "capability": "calls",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "calls",
+ "from": { "kind": "function", "name": "Append", "qualifiedName": "append.go::Append", "locator": "workspace://append.go#L14-L46" },
+ "to": { "kind": "function", "name": "Append", "qualifiedName": "append.go::Append", "locator": "workspace://append.go#L14-L46" },
+ "locator": "workspace://append.go#L44-L44",
+ "resolution": "inferred"
+ },
+ {
+ "id": "cititem_multierror_import_strings",
+ "semanticKey": "edge:imports:format.go:strings",
+ "capability": "imports",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "imports",
+ "from": { "kind": "module", "name": "format", "qualifiedName": "format.go::format", "locator": "workspace://format.go#L1-L31" },
+ "to": { "kind": "module", "name": "strings", "qualifiedName": "format.go::strings", "locator": "workspace://format.go#L8-L8" },
+ "locator": "workspace://format.go#L8-L8",
+ "resolution": "unresolved"
+ },
+ {
+ "id": "cititem_multierror_import_strings_not_fmt",
+ "semanticKey": "edge:imports:format.go:strings-line:not-fmt",
+ "capability": "imports",
+ "expectation": "absent",
+ "recordKind": "edge",
+ "kind": "imports",
+ "from": { "kind": "module", "name": "format", "qualifiedName": "format.go::format", "locator": "workspace://format.go#L1-L31" },
+ "to": { "kind": "module", "name": "fmt", "qualifiedName": "flatten_test.go::fmt", "locator": "workspace://flatten_test.go#L8-L8" },
+ "locator": "workspace://format.go#L8-L8",
+ "resolution": "unresolved"
+ },
+ {
+ "id": "cititem_multierror_export_append",
+ "semanticKey": "edge:exports:append.go:Append",
+ "capability": "exports",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "exports",
+ "from": { "kind": "package", "name": "multierror", "qualifiedName": "append.go::multierror", "locator": "workspace://append.go#L4-L4" },
+ "to": { "kind": "function", "name": "Append", "qualifiedName": "append.go::Append", "locator": "workspace://append.go#L14-L46" },
+ "locator": "workspace://append.go#L14-L46",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_multierror_private_flatten_not_exported",
+ "semanticKey": "edge:exports:flatten.go:flatten:absent",
+ "capability": "exports",
+ "expectation": "absent",
+ "recordKind": "edge",
+ "kind": "exports",
+ "from": { "kind": "package", "name": "multierror", "qualifiedName": "flatten.go::multierror", "locator": "workspace://flatten.go#L4-L4" },
+ "to": { "kind": "function", "name": "flatten", "qualifiedName": "flatten.go::flatten", "locator": "workspace://flatten.go#L20-L29" },
+ "locator": "workspace://flatten.go#L20-L29",
+ "resolution": "exact"
+ }
+ ],
+ "truthFingerprint": "sha256:9641a4ebee69a58ab7d1db1550efd780b91deaa8e64d3a21159b22dfcd20e495"
+}
diff --git a/evals/code-intelligence/truth/repositories/java/cirepo_java_google_gson.json b/evals/code-intelligence/truth/repositories/java/cirepo_java_google_gson.json
new file mode 100644
index 00000000..4f93e980
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/java/cirepo_java_google_gson.json
@@ -0,0 +1,16 @@
+{
+ "schemaVersion": "1.0.0", "truthVersion": "memory-recall-code-intelligence-truth-1", "id": "citruth_java_google_gson_reflect", "language": "java",
+ "source": { "class": "real-repo", "ref": "corpus://cirepo_java_google_gson@c9f3fd55854a743b66f857ace3c7b268ea3e2ef7#gson/src/main/java/com/google/gson/reflect" },
+ "review": { "status": "reviewed", "method": "source-locator", "reviewedBy": "memory-recall-maintainer", "reviewedAt": "2026-07-16T00:00:00.000Z" },
+ "reviewCoverage": { "declarations": "sampled", "relationships": "sampled", "calls": "sampled" },
+ "capabilityClaims": { "parse": "partial", "structure": "partial", "imports": "partial", "exports": "unmeasured", "heritage": "unmeasured", "types": "partial", "calls": "partial", "config": "unmeasured", "frameworks": "unmeasured", "impact": "unmeasured", "processes": "unmeasured" },
+ "items": [
+ { "id": "cititem_gson_type_token", "semanticKey": "node:class:TypeToken", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "class", "name": "TypeToken", "qualifiedName": "TypeToken.java::com.google.gson.reflect::TypeToken", "locator": "workspace://TypeToken.java#L54-L452" },
+ { "id": "cititem_gson_constructor", "semanticKey": "node:method:TypeToken:new", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "new()", "qualifiedName": "TypeToken.java::com.google.gson.reflect::TypeToken::new()", "locator": "workspace://TypeToken.java#L72-L77" },
+ { "id": "cititem_gson_type_argument", "semanticKey": "node:method:TypeToken:getTypeTokenTypeArgument", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "getTypeTokenTypeArgument()", "qualifiedName": "TypeToken.java::com.google.gson.reflect::TypeToken::getTypeTokenTypeArgument()", "locator": "workspace://TypeToken.java#L95-L119" },
+ { "id": "cititem_gson_defines_constructor", "semanticKey": "edge:defines:TypeToken:new", "capability": "structure", "expectation": "present", "recordKind": "edge", "kind": "defines", "from": { "kind": "class", "name": "TypeToken", "locator": "workspace://TypeToken.java#L54-L452" }, "to": { "kind": "method", "name": "new()", "locator": "workspace://TypeToken.java#L72-L77" }, "locator": "workspace://TypeToken.java#L72-L77", "resolution": "exact" },
+ { "id": "cititem_gson_constructor_call", "semanticKey": "edge:calls:new:getTypeTokenTypeArgument", "capability": "calls", "expectation": "present", "recordKind": "edge", "kind": "calls", "from": { "kind": "method", "name": "new()", "locator": "workspace://TypeToken.java#L72-L77" }, "to": { "kind": "method", "name": "getTypeTokenTypeArgument()", "locator": "workspace://TypeToken.java#L95-L119" }, "locator": "workspace://TypeToken.java#L74-L74", "resolution": "typed" },
+ { "id": "cititem_gson_import_generic_array_type", "semanticKey": "edge:imports:TypeToken:java.lang.reflect.GenericArrayType", "capability": "imports", "expectation": "present", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "TypeToken", "locator": "workspace://TypeToken.java#L1-L453" }, "to": { "kind": "module", "name": "java.lang.reflect.GenericArrayType", "locator": "workspace://TypeToken.java#L21-L21" }, "locator": "workspace://TypeToken.java#L21-L21", "resolution": "unresolved" }
+ ],
+ "truthFingerprint": "sha256:16f0007faa029c28bc57fd7f71db517dfad2a5cc784d14812071debc90e9f6be"
+}
diff --git a/evals/code-intelligence/truth/repositories/java/cirepo_java_google_guava.json b/evals/code-intelligence/truth/repositories/java/cirepo_java_google_guava.json
new file mode 100644
index 00000000..e5e6a386
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/java/cirepo_java_google_guava.json
@@ -0,0 +1,16 @@
+{
+ "schemaVersion": "1.0.0", "truthVersion": "memory-recall-code-intelligence-truth-1", "id": "citruth_java_google_guava_finalizer", "language": "java",
+ "source": { "class": "real-repo", "ref": "corpus://cirepo_java_google_guava@5143dbe06b8a1632b50c8fe19b2870fe135e46e2#guava/src/com/google/common/base/internal" },
+ "review": { "status": "reviewed", "method": "source-locator", "reviewedBy": "memory-recall-maintainer", "reviewedAt": "2026-07-16T00:00:00.000Z" },
+ "reviewCoverage": { "declarations": "sampled", "relationships": "sampled", "calls": "sampled" },
+ "capabilityClaims": { "parse": "partial", "structure": "partial", "imports": "partial", "exports": "unmeasured", "heritage": "partial", "types": "partial", "calls": "partial", "config": "unmeasured", "frameworks": "unmeasured", "impact": "unmeasured", "processes": "unmeasured" },
+ "items": [
+ { "id": "cititem_guava_finalizer", "semanticKey": "node:class:Finalizer", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "class", "name": "Finalizer", "qualifiedName": "Finalizer.java::com.google.common.base.internal::Finalizer", "locator": "workspace://Finalizer.java#L48-L265" },
+ { "id": "cititem_guava_run", "semanticKey": "node:method:Finalizer:run", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "run()", "qualifiedName": "Finalizer.java::com.google.common.base.internal::Finalizer::run()", "locator": "workspace://Finalizer.java#L135-L147" },
+ { "id": "cititem_guava_cleanup", "semanticKey": "node:method:Finalizer:cleanUp", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "cleanUp(Reference)", "qualifiedName": "Finalizer.java::com.google.common.base.internal::Finalizer::cleanUp(Reference)", "locator": "workspace://Finalizer.java#L156-L179" },
+ { "id": "cititem_guava_defines_run", "semanticKey": "edge:defines:Finalizer:run", "capability": "structure", "expectation": "present", "recordKind": "edge", "kind": "defines", "from": { "kind": "class", "name": "Finalizer", "locator": "workspace://Finalizer.java#L48-L265" }, "to": { "kind": "method", "name": "run()", "locator": "workspace://Finalizer.java#L135-L147" }, "locator": "workspace://Finalizer.java#L135-L147", "resolution": "exact" },
+ { "id": "cititem_guava_run_cleanup", "semanticKey": "edge:calls:run:cleanUp", "capability": "calls", "expectation": "present", "recordKind": "edge", "kind": "calls", "from": { "kind": "method", "name": "run()", "locator": "workspace://Finalizer.java#L135-L147" }, "to": { "kind": "method", "name": "cleanUp(Reference)", "locator": "workspace://Finalizer.java#L156-L179" }, "locator": "workspace://Finalizer.java#L140-L140", "resolution": "typed" },
+ { "id": "cititem_guava_import_weak_reference", "semanticKey": "edge:imports:Finalizer:java.lang.ref.WeakReference", "capability": "imports", "expectation": "present", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "Finalizer", "locator": "workspace://Finalizer.java#L1-L266" }, "to": { "kind": "module", "name": "java.lang.ref.WeakReference", "locator": "workspace://Finalizer.java#L22-L22" }, "locator": "workspace://Finalizer.java#L22-L22", "resolution": "unresolved" }
+ ],
+ "truthFingerprint": "sha256:a9a0e14cc1d68c4ed2ca0764a1d16c5e83ec1a40600ad97932debef4bac5cc2d"
+}
diff --git a/evals/code-intelligence/truth/repositories/java/cirepo_java_spring_projects_spring_petclinic.json b/evals/code-intelligence/truth/repositories/java/cirepo_java_spring_projects_spring_petclinic.json
new file mode 100644
index 00000000..60c1e0e7
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/java/cirepo_java_spring_projects_spring_petclinic.json
@@ -0,0 +1,18 @@
+{
+ "schemaVersion": "1.0.0", "truthVersion": "memory-recall-code-intelligence-truth-1", "id": "citruth_java_spring_petclinic_owner", "language": "java",
+ "source": { "class": "real-repo", "ref": "corpus://cirepo_java_spring_projects_spring_petclinic@51045d1648dad955df586150c1a1a6e22ef400c2#src/main/java/org/springframework/samples/petclinic/owner" },
+ "review": { "status": "reviewed", "method": "source-locator", "reviewedBy": "memory-recall-maintainer", "reviewedAt": "2026-07-16T00:00:00.000Z" },
+ "reviewCoverage": { "declarations": "sampled", "relationships": "sampled", "calls": "sampled" },
+ "capabilityClaims": { "parse": "partial", "structure": "partial", "imports": "partial", "exports": "unmeasured", "heritage": "partial", "types": "partial", "calls": "partial", "config": "unmeasured", "frameworks": "partial", "impact": "unmeasured", "processes": "unmeasured" },
+ "items": [
+ { "id": "cititem_petclinic_owner", "semanticKey": "node:class:Owner", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "class", "name": "Owner", "qualifiedName": "Owner.java::org.springframework.samples.petclinic.owner::Owner", "locator": "workspace://Owner.java#L47-L176" },
+ { "id": "cititem_petclinic_get_pet", "semanticKey": "node:method:Owner:getPet-Integer", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "getPet(Integer)", "qualifiedName": "Owner.java::org.springframework.samples.petclinic.owner::Owner::getPet(Integer)", "locator": "workspace://Owner.java#L117-L127" },
+ { "id": "cititem_petclinic_get_pets", "semanticKey": "node:method:Owner:getPets", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "getPets()", "qualifiedName": "Owner.java::org.springframework.samples.petclinic.owner::Owner::getPets()", "locator": "workspace://Owner.java#L93-L95" },
+ { "id": "cititem_petclinic_show_owner", "semanticKey": "node:method:OwnerController:showOwner", "capability": "frameworks", "expectation": "present", "recordKind": "node", "kind": "method", "name": "showOwner(int)", "qualifiedName": "OwnerController.java::org.springframework.samples.petclinic.owner::OwnerController::showOwner(int)", "locator": "workspace://OwnerController.java#L166-L174" },
+ { "id": "cititem_petclinic_owner_route", "semanticKey": "node:route:GET-owners-param", "capability": "frameworks", "expectation": "present", "recordKind": "node", "kind": "route", "name": "GET_owners_param", "qualifiedName": "OwnerController.java::GET_owners_param", "locator": "workspace://OwnerController.java#L166-L174" },
+ { "id": "cititem_petclinic_get_pet_call", "semanticKey": "edge:calls:getPet:getPets", "capability": "calls", "expectation": "present", "recordKind": "edge", "kind": "calls", "from": { "kind": "method", "name": "getPet(Integer)", "locator": "workspace://Owner.java#L117-L127" }, "to": { "kind": "method", "name": "getPets()", "locator": "workspace://Owner.java#L93-L95" }, "locator": "workspace://Owner.java#L118-L118", "resolution": "typed" },
+ { "id": "cititem_petclinic_handles_owner", "semanticKey": "edge:handles-route:showOwner", "capability": "frameworks", "expectation": "present", "recordKind": "edge", "kind": "handles_route", "from": { "kind": "method", "name": "showOwner(int)", "locator": "workspace://OwnerController.java#L166-L174" }, "to": { "kind": "route", "name": "GET_owners_param", "locator": "workspace://OwnerController.java#L166-L174" }, "locator": "workspace://OwnerController.java#L166-L174", "resolution": "exact" },
+ { "id": "cititem_petclinic_import_fetch_type", "semanticKey": "edge:imports:Owner:jakarta.persistence.FetchType", "capability": "imports", "expectation": "present", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "Owner", "locator": "workspace://Owner.java#L1-L177" }, "to": { "kind": "module", "name": "jakarta.persistence.FetchType", "locator": "workspace://Owner.java#L29-L29" }, "locator": "workspace://Owner.java#L29-L29", "resolution": "unresolved" }
+ ],
+ "truthFingerprint": "sha256:45003898e7112ba226084de4d91f45bd9a984456244e8b4127cc9e4fd6d7e586"
+}
diff --git a/evals/code-intelligence/truth/repositories/javascript/cirepo_javascript_axios_axios.json b/evals/code-intelligence/truth/repositories/javascript/cirepo_javascript_axios_axios.json
new file mode 100644
index 00000000..6091502b
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/javascript/cirepo_javascript_axios_axios.json
@@ -0,0 +1,146 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_javascript_axios_axios",
+ "language": "javascript",
+ "source": {
+ "class": "real-repo",
+ "ref": "corpus://cirepo_javascript_axios_axios@3041b8fd1daf17404d1bad1f9d94026ea5ab400b#lib/core"
+ },
+ "review": {
+ "status": "reviewed",
+ "method": "source-locator",
+ "reviewedBy": "memory-recall-maintainer",
+ "reviewedAt": "2026-07-16T00:00:00.000Z"
+ },
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "capabilityClaims": {
+ "parse": "partial",
+ "structure": "partial",
+ "imports": "partial",
+ "exports": "partial",
+ "heritage": "unmeasured",
+ "types": "partial",
+ "calls": "partial",
+ "config": "unmeasured",
+ "frameworks": "unmeasured",
+ "impact": "unmeasured",
+ "processes": "unmeasured"
+ },
+ "items": [
+ {
+ "id": "cititem_axios_class",
+ "semanticKey": "node:class:Axios.js:Axios",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "class",
+ "name": "Axios",
+ "qualifiedName": "Axios.js::Axios",
+ "locator": "workspace://Axios.js#L22-L240"
+ },
+ {
+ "id": "cititem_axios_import_transform_data",
+ "semanticKey": "edge:imports:dispatchRequest.js:transformData.js",
+ "capability": "imports",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "imports",
+ "from": {
+ "kind": "module",
+ "name": "dispatchRequest",
+ "qualifiedName": "dispatchRequest.js::dispatchRequest",
+ "locator": "workspace://dispatchRequest.js#L1-L90"
+ },
+ "to": {
+ "kind": "module",
+ "name": "transformData",
+ "qualifiedName": "transformData.js::transformData",
+ "locator": "workspace://transformData.js#L1-L29"
+ },
+ "locator": "workspace://dispatchRequest.js#L3-L3",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_axios_export_dispatch_request",
+ "semanticKey": "edge:exports:dispatchRequest.js:dispatchRequest",
+ "capability": "exports",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "exports",
+ "from": {
+ "kind": "module",
+ "name": "dispatchRequest",
+ "qualifiedName": "dispatchRequest.js::dispatchRequest",
+ "locator": "workspace://dispatchRequest.js#L1-L90"
+ },
+ "to": {
+ "kind": "function",
+ "name": "dispatchRequest",
+ "qualifiedName": "dispatchRequest.js::dispatchRequest",
+ "locator": "workspace://dispatchRequest.js#L34-L89"
+ },
+ "locator": "workspace://dispatchRequest.js#L34-L89",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_axios_stringify_safely_type",
+ "semanticKey": "node:function:AxiosError.js:stringifySafely",
+ "capability": "types",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "function",
+ "name": "stringifySafely",
+ "qualifiedName": "AxiosError.js::stringifySafely",
+ "locator": "workspace://AxiosError.js#L75-L81"
+ },
+ {
+ "id": "cititem_axios_stringify_safely_call",
+ "semanticKey": "edge:calls:AxiosError.js:aggregateErrorMessage:stringifySafely",
+ "capability": "calls",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "calls",
+ "from": {
+ "kind": "function",
+ "name": "aggregateErrorMessage",
+ "qualifiedName": "AxiosError.js::aggregateErrorMessage",
+ "locator": "workspace://AxiosError.js#L83-L96"
+ },
+ "to": {
+ "kind": "function",
+ "name": "stringifySafely",
+ "qualifiedName": "AxiosError.js::stringifySafely",
+ "locator": "workspace://AxiosError.js#L75-L81"
+ },
+ "locator": "workspace://AxiosError.js#L87-L87",
+ "resolution": "inferred"
+ },
+ {
+ "id": "cititem_axios_false_merge_call",
+ "semanticKey": "edge:calls:AxiosError.js:aggregateErrorMessage:mergeConfig:absent",
+ "capability": "calls",
+ "expectation": "absent",
+ "recordKind": "edge",
+ "kind": "calls",
+ "from": {
+ "kind": "function",
+ "name": "aggregateErrorMessage",
+ "qualifiedName": "AxiosError.js::aggregateErrorMessage",
+ "locator": "workspace://AxiosError.js#L83-L96"
+ },
+ "to": {
+ "kind": "function",
+ "name": "mergeConfig",
+ "qualifiedName": "mergeConfig.js::mergeConfig",
+ "locator": "workspace://mergeConfig.js#L28-L174"
+ },
+ "locator": "workspace://AxiosError.js#L87-L87"
+ }
+ ],
+ "truthFingerprint": "sha256:63e9495b4a5a6851e8757eb0aef282564359cf06b214cd50be3718d61dc83f63"
+}
diff --git a/evals/code-intelligence/truth/repositories/javascript/cirepo_javascript_expressjs_express.json b/evals/code-intelligence/truth/repositories/javascript/cirepo_javascript_expressjs_express.json
new file mode 100644
index 00000000..197cd1c4
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/javascript/cirepo_javascript_expressjs_express.json
@@ -0,0 +1,146 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_javascript_expressjs_express",
+ "language": "javascript",
+ "source": {
+ "class": "real-repo",
+ "ref": "corpus://cirepo_javascript_expressjs_express@ae6dd37680e3a00618d6c8a3e522f0ee4eeba1a4#lib"
+ },
+ "review": {
+ "status": "reviewed",
+ "method": "source-locator",
+ "reviewedBy": "memory-recall-maintainer",
+ "reviewedAt": "2026-07-16T00:00:00.000Z"
+ },
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "capabilityClaims": {
+ "parse": "partial",
+ "structure": "partial",
+ "imports": "partial",
+ "exports": "partial",
+ "heritage": "unmeasured",
+ "types": "partial",
+ "calls": "partial",
+ "config": "unmeasured",
+ "frameworks": "unmeasured",
+ "impact": "unmeasured",
+ "processes": "unmeasured"
+ },
+ "items": [
+ {
+ "id": "cititem_express_create_application",
+ "semanticKey": "node:function:express.js:createApplication",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "function",
+ "name": "createApplication",
+ "qualifiedName": "express.js::createApplication",
+ "locator": "workspace://express.js#L36-L56"
+ },
+ {
+ "id": "cititem_express_import_application",
+ "semanticKey": "edge:imports:express.js:application.js",
+ "capability": "imports",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "imports",
+ "from": {
+ "kind": "module",
+ "name": "express",
+ "qualifiedName": "express.js::express",
+ "locator": "workspace://express.js#L1-L82"
+ },
+ "to": {
+ "kind": "module",
+ "name": "application",
+ "qualifiedName": "application.js::application",
+ "locator": "workspace://application.js#L1-L632"
+ },
+ "locator": "workspace://express.js#L18-L18",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_express_export_create_application",
+ "semanticKey": "edge:exports:express.js:createApplication",
+ "capability": "exports",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "exports",
+ "from": {
+ "kind": "module",
+ "name": "express",
+ "qualifiedName": "express.js::express",
+ "locator": "workspace://express.js#L1-L82"
+ },
+ "to": {
+ "kind": "function",
+ "name": "createApplication",
+ "qualifiedName": "express.js::createApplication",
+ "locator": "workspace://express.js#L36-L56"
+ },
+ "locator": "workspace://express.js#L27-L27",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_express_onerror_type",
+ "semanticKey": "node:function:response.js:sendfile:onerror",
+ "capability": "types",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "function",
+ "name": "onerror",
+ "qualifiedName": "response.js::sendfile::onerror",
+ "locator": "workspace://response.js#L949-L953"
+ },
+ {
+ "id": "cititem_express_onerror_call",
+ "semanticKey": "edge:calls:response.js:onfinish:onerror",
+ "capability": "calls",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "calls",
+ "from": {
+ "kind": "function",
+ "name": "onfinish",
+ "qualifiedName": "response.js::sendfile::onfinish",
+ "locator": "workspace://response.js#L968-L983"
+ },
+ "to": {
+ "kind": "function",
+ "name": "onerror",
+ "qualifiedName": "response.js::sendfile::onerror",
+ "locator": "workspace://response.js#L949-L953"
+ },
+ "locator": "workspace://response.js#L970-L970",
+ "resolution": "inferred"
+ },
+ {
+ "id": "cititem_express_false_directory_call",
+ "semanticKey": "edge:calls:response.js:onfinish:ondirectory:absent",
+ "capability": "calls",
+ "expectation": "absent",
+ "recordKind": "edge",
+ "kind": "calls",
+ "from": {
+ "kind": "function",
+ "name": "onfinish",
+ "qualifiedName": "response.js::sendfile::onfinish",
+ "locator": "workspace://response.js#L968-L983"
+ },
+ "to": {
+ "kind": "function",
+ "name": "ondirectory",
+ "qualifiedName": "response.js::sendfile::ondirectory",
+ "locator": "workspace://response.js#L939-L946"
+ },
+ "locator": "workspace://response.js#L970-L970"
+ }
+ ],
+ "truthFingerprint": "sha256:fcf11ab530b6cf2efccd3aa5d62378518cb96b53db154723fe79331258f7c708"
+}
diff --git a/evals/code-intelligence/truth/repositories/javascript/cirepo_javascript_lodash_lodash.json b/evals/code-intelligence/truth/repositories/javascript/cirepo_javascript_lodash_lodash.json
new file mode 100644
index 00000000..d4d1215c
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/javascript/cirepo_javascript_lodash_lodash.json
@@ -0,0 +1,146 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_javascript_lodash_lodash",
+ "language": "javascript",
+ "source": {
+ "class": "real-repo",
+ "ref": "corpus://cirepo_javascript_lodash_lodash@a666ba591064c8011988275790ad7d625279f09c#."
+ },
+ "review": {
+ "status": "reviewed",
+ "method": "source-locator",
+ "reviewedBy": "memory-recall-maintainer",
+ "reviewedAt": "2026-07-16T00:00:00.000Z"
+ },
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "capabilityClaims": {
+ "parse": "partial",
+ "structure": "partial",
+ "imports": "partial",
+ "exports": "partial",
+ "heritage": "unmeasured",
+ "types": "partial",
+ "calls": "partial",
+ "config": "unmeasured",
+ "frameworks": "unmeasured",
+ "impact": "unmeasured",
+ "processes": "unmeasured"
+ },
+ "items": [
+ {
+ "id": "cititem_lodash_base_convert",
+ "semanticKey": "node:function:fp/_baseConvert.js:baseConvert",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "function",
+ "name": "baseConvert",
+ "qualifiedName": "fp/_baseConvert.js::baseConvert",
+ "locator": "workspace://fp/_baseConvert.js#L138-L567"
+ },
+ {
+ "id": "cititem_lodash_import_common_file",
+ "semanticKey": "edge:imports:lib/fp/build-doc.js:lib/common/file.js",
+ "capability": "imports",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "imports",
+ "from": {
+ "kind": "module",
+ "name": "lib_fp_build_doc",
+ "qualifiedName": "lib/fp/build-doc.js::lib_fp_build_doc",
+ "locator": "workspace://lib/fp/build-doc.js#L1-L79"
+ },
+ "to": {
+ "kind": "module",
+ "name": "lib_common_file",
+ "qualifiedName": "lib/common/file.js::lib_common_file",
+ "locator": "workspace://lib/common/file.js#L1-L72"
+ },
+ "locator": "workspace://lib/fp/build-doc.js#L7-L7",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_lodash_export_base_convert",
+ "semanticKey": "edge:exports:fp/_baseConvert.js:baseConvert",
+ "capability": "exports",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "exports",
+ "from": {
+ "kind": "module",
+ "name": "fp__baseConvert",
+ "qualifiedName": "fp/_baseConvert.js::fp__baseConvert",
+ "locator": "workspace://fp/_baseConvert.js#L1-L570"
+ },
+ "to": {
+ "kind": "function",
+ "name": "baseConvert",
+ "qualifiedName": "fp/_baseConvert.js::baseConvert",
+ "locator": "workspace://fp/_baseConvert.js#L138-L567"
+ },
+ "locator": "workspace://fp/_baseConvert.js#L569-L569",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_lodash_auto_link_type",
+ "semanticKey": "node:function:lib/main/build-site.js:autoLink",
+ "capability": "types",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "function",
+ "name": "autoLink",
+ "qualifiedName": "lib/main/build-site.js::autoLink",
+ "locator": "workspace://lib/main/build-site.js#L48-L57"
+ },
+ {
+ "id": "cititem_lodash_auto_link_call",
+ "semanticKey": "edge:calls:lib/main/build-site.js:build:autoLink",
+ "capability": "calls",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "calls",
+ "from": {
+ "kind": "function",
+ "name": "build",
+ "qualifiedName": "lib/main/build-site.js::build",
+ "locator": "workspace://lib/main/build-site.js#L181-L237"
+ },
+ "to": {
+ "kind": "function",
+ "name": "autoLink",
+ "qualifiedName": "lib/main/build-site.js::autoLink",
+ "locator": "workspace://lib/main/build-site.js#L48-L57"
+ },
+ "locator": "workspace://lib/main/build-site.js#L208-L208",
+ "resolution": "inferred"
+ },
+ {
+ "id": "cititem_lodash_false_horizontal_call",
+ "semanticKey": "edge:calls:lib/main/build-site.js:build:removeHorizontalRules:absent",
+ "capability": "calls",
+ "expectation": "absent",
+ "recordKind": "edge",
+ "kind": "calls",
+ "from": {
+ "kind": "function",
+ "name": "build",
+ "qualifiedName": "lib/main/build-site.js::build",
+ "locator": "workspace://lib/main/build-site.js#L181-L237"
+ },
+ "to": {
+ "kind": "function",
+ "name": "removeHorizontalRules",
+ "qualifiedName": "lib/main/build-site.js::removeHorizontalRules",
+ "locator": "workspace://lib/main/build-site.js#L65-L67"
+ },
+ "locator": "workspace://lib/main/build-site.js#L208-L208"
+ }
+ ],
+ "truthFingerprint": "sha256:aa575587666a822f6381e83edf5f08379637aa2521376ce3ff7fafeb29fbc828"
+}
diff --git a/evals/code-intelligence/truth/repositories/kotlin/cirepo_kotlin_android_nowinandroid.json b/evals/code-intelligence/truth/repositories/kotlin/cirepo_kotlin_android_nowinandroid.json
new file mode 100644
index 00000000..1fd096e9
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/kotlin/cirepo_kotlin_android_nowinandroid.json
@@ -0,0 +1,19 @@
+{
+ "schemaVersion": "1.0.0", "truthVersion": "memory-recall-code-intelligence-truth-1", "id": "citruth_kotlin_android_nowinandroid_model", "language": "kotlin",
+ "source": { "class": "real-repo", "ref": "corpus://cirepo_kotlin_android_nowinandroid@7d45eae4f8720a0c77f507712ba2437ff974b6ed#core/model/src/main/kotlin" },
+ "review": { "status": "reviewed", "method": "source-locator", "reviewedBy": "memory-recall-maintainer", "reviewedAt": "2026-07-16T00:00:00.000Z" },
+ "reviewCoverage": { "declarations": "sampled", "relationships": "sampled", "calls": "sampled" },
+ "capabilityClaims": { "parse": "partial", "structure": "partial", "imports": "partial", "exports": "unmeasured", "heritage": "unmeasured", "types": "partial", "calls": "partial", "config": "unmeasured", "frameworks": "unmeasured", "impact": "unmeasured", "processes": "unmeasured" },
+ "items": [
+ { "id": "cititem_nia_user_news", "semanticKey": "node:class:UserNewsResource", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "class", "name": "UserNewsResource", "qualifiedName": "com/google/samples/apps/nowinandroid/core/model/data/UserNewsResource.kt::com.google.samples.apps.nowinandroid.core.model.data::UserNewsResource", "locator": "workspace://com/google/samples/apps/nowinandroid/core/model/data/UserNewsResource.kt#L25-L54" },
+ { "id": "cititem_nia_constructor", "semanticKey": "node:method:UserNewsResource:new", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "new(NewsResource,UserData)", "qualifiedName": "com/google/samples/apps/nowinandroid/core/model/data/UserNewsResource.kt::com.google.samples.apps.nowinandroid.core.model.data::UserNewsResource::new(NewsResource,UserData)", "locator": "workspace://com/google/samples/apps/nowinandroid/core/model/data/UserNewsResource.kt#L37-L53" },
+ { "id": "cititem_nia_followable_topic", "semanticKey": "node:class:FollowableTopic", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "class", "name": "FollowableTopic", "qualifiedName": "com/google/samples/apps/nowinandroid/core/model/data/FollowableTopic.kt::com.google.samples.apps.nowinandroid.core.model.data::FollowableTopic", "locator": "workspace://com/google/samples/apps/nowinandroid/core/model/data/FollowableTopic.kt#L23-L26" },
+ { "id": "cititem_nia_defines_constructor", "semanticKey": "edge:defines:UserNewsResource:new", "capability": "structure", "expectation": "present", "recordKind": "edge", "kind": "defines", "from": { "kind": "class", "name": "UserNewsResource", "locator": "workspace://com/google/samples/apps/nowinandroid/core/model/data/UserNewsResource.kt#L25-L54" }, "to": { "kind": "method", "name": "new(NewsResource,UserData)", "locator": "workspace://com/google/samples/apps/nowinandroid/core/model/data/UserNewsResource.kt#L37-L53" }, "locator": "workspace://com/google/samples/apps/nowinandroid/core/model/data/UserNewsResource.kt#L37-L53", "resolution": "exact" },
+ { "id": "cititem_nia_construct_topic", "semanticKey": "edge:constructs:UserNewsResource:FollowableTopic", "capability": "types", "expectation": "present", "recordKind": "edge", "kind": "constructs", "from": { "kind": "method", "name": "new(NewsResource,UserData)", "locator": "workspace://com/google/samples/apps/nowinandroid/core/model/data/UserNewsResource.kt#L37-L53" }, "to": { "kind": "class", "name": "FollowableTopic", "locator": "workspace://com/google/samples/apps/nowinandroid/core/model/data/FollowableTopic.kt#L23-L26" }, "locator": "workspace://com/google/samples/apps/nowinandroid/core/model/data/UserNewsResource.kt#L46-L49", "resolution": "exact" },
+ { "id": "cititem_nia_import_instant", "semanticKey": "edge:imports:UserNewsResource:kotlinx.datetime.Instant", "capability": "imports", "expectation": "present", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "com_google_samples_apps_nowinandroid_core_model_data_UserNewsResource", "qualifiedName": "com/google/samples/apps/nowinandroid/core/model/data/UserNewsResource.kt::com_google_samples_apps_nowinandroid_core_model_data_UserNewsResource", "locator": "workspace://com/google/samples/apps/nowinandroid/core/model/data/UserNewsResource.kt#L1-L58" }, "to": { "kind": "module", "name": "kotlinx.datetime.Instant", "qualifiedName": "com/google/samples/apps/nowinandroid/core/model/data/NewsResource.kt::kotlinx.datetime.Instant", "locator": "workspace://com/google/samples/apps/nowinandroid/core/model/data/NewsResource.kt#L19-L19" }, "locator": "workspace://com/google/samples/apps/nowinandroid/core/model/data/UserNewsResource.kt#L19-L19", "resolution": "unresolved" },
+ { "id": "cititem_nia_import_instant_not_news_resource", "semanticKey": "edge:imports:UserNewsResource:instant-line:not-NewsResource", "capability": "imports", "expectation": "absent", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "com_google_samples_apps_nowinandroid_core_model_data_UserNewsResource", "qualifiedName": "com/google/samples/apps/nowinandroid/core/model/data/UserNewsResource.kt::com_google_samples_apps_nowinandroid_core_model_data_UserNewsResource", "locator": "workspace://com/google/samples/apps/nowinandroid/core/model/data/UserNewsResource.kt#L1-L58" }, "to": { "kind": "module", "name": "com_google_samples_apps_nowinandroid_core_model_data_NewsResource", "qualifiedName": "com/google/samples/apps/nowinandroid/core/model/data/NewsResource.kt::com_google_samples_apps_nowinandroid_core_model_data_NewsResource", "locator": "workspace://com/google/samples/apps/nowinandroid/core/model/data/NewsResource.kt#L1-L34" }, "locator": "workspace://com/google/samples/apps/nowinandroid/core/model/data/UserNewsResource.kt#L19-L19" },
+ { "id": "cititem_nia_call_constructor_map", "semanticKey": "edge:calls:UserNewsResource-new:map", "capability": "calls", "expectation": "present", "recordKind": "edge", "kind": "calls", "from": { "kind": "method", "name": "new(NewsResource,UserData)", "locator": "workspace://com/google/samples/apps/nowinandroid/core/model/data/UserNewsResource.kt#L37-L53" }, "to": { "kind": "function", "name": "map", "qualifiedName": "com/google/samples/apps/nowinandroid/core/model/data/UserNewsResource.kt::map", "locator": "workspace://com/google/samples/apps/nowinandroid/core/model/data/UserNewsResource.kt#L45-L50" }, "locator": "workspace://com/google/samples/apps/nowinandroid/core/model/data/UserNewsResource.kt#L45-L50", "resolution": "unresolved" },
+ { "id": "cititem_nia_map_to_user_call_not_constructor", "semanticKey": "edge:calls:UserNewsResource-new:map-line:not-mapToUser", "capability": "calls", "expectation": "absent", "recordKind": "edge", "kind": "calls", "from": { "kind": "method", "name": "new(NewsResource,UserData)", "locator": "workspace://com/google/samples/apps/nowinandroid/core/model/data/UserNewsResource.kt#L37-L53" }, "to": { "kind": "function", "name": "map", "qualifiedName": "com/google/samples/apps/nowinandroid/core/model/data/UserNewsResource.kt::map", "locator": "workspace://com/google/samples/apps/nowinandroid/core/model/data/UserNewsResource.kt#L45-L50" }, "locator": "workspace://com/google/samples/apps/nowinandroid/core/model/data/UserNewsResource.kt#L57-L57", "resolution": "unresolved" }
+ ],
+ "truthFingerprint": "sha256:4d7da79d25874868cecb530012d5c01f190de5bf9af373bdb1886feff130b93b"
+}
diff --git a/evals/code-intelligence/truth/repositories/kotlin/cirepo_kotlin_kotlin_kotlinx_coroutines.json b/evals/code-intelligence/truth/repositories/kotlin/cirepo_kotlin_kotlin_kotlinx_coroutines.json
new file mode 100644
index 00000000..4206ab23
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/kotlin/cirepo_kotlin_kotlin_kotlinx_coroutines.json
@@ -0,0 +1,19 @@
+{
+ "schemaVersion": "1.0.0", "truthVersion": "memory-recall-code-intelligence-truth-1", "id": "citruth_kotlin_coroutines_internal_heap", "language": "kotlin",
+ "source": { "class": "real-repo", "ref": "corpus://cirepo_kotlin_kotlin_kotlinx_coroutines@165c6cb5859b5365dec193abc75dee9f49ce1389#kotlinx-coroutines-core/common/src/internal" },
+ "review": { "status": "reviewed", "method": "source-locator", "reviewedBy": "memory-recall-maintainer", "reviewedAt": "2026-07-16T00:00:00.000Z" },
+ "reviewCoverage": { "declarations": "sampled", "relationships": "sampled", "calls": "sampled" },
+ "capabilityClaims": { "parse": "partial", "structure": "partial", "imports": "partial", "exports": "unmeasured", "heritage": "partial", "types": "partial", "calls": "partial", "config": "unmeasured", "frameworks": "unmeasured", "impact": "unmeasured", "processes": "unmeasured" },
+ "items": [
+ { "id": "cititem_coroutines_heap", "semanticKey": "node:class:ThreadSafeHeap", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "class", "name": "ThreadSafeHeap", "qualifiedName": "ThreadSafeHeap.kt::kotlinx.coroutines.internal::ThreadSafeHeap", "locator": "workspace://ThreadSafeHeap.kt#L19-L158" },
+ { "id": "cititem_coroutines_remove_first", "semanticKey": "node:method:ThreadSafeHeap:removeFirstOrNull", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "removeFirstOrNull()", "qualifiedName": "ThreadSafeHeap.kt::kotlinx.coroutines.internal::ThreadSafeHeap::removeFirstOrNull()", "locator": "workspace://ThreadSafeHeap.kt#L43-L49" },
+ { "id": "cititem_coroutines_remove_at", "semanticKey": "node:method:ThreadSafeHeap:removeAtImpl", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "removeAtImpl(Int)", "qualifiedName": "ThreadSafeHeap.kt::kotlinx.coroutines.internal::ThreadSafeHeap::removeAtImpl(Int)", "locator": "workspace://ThreadSafeHeap.kt#L86-L107" },
+ { "id": "cititem_coroutines_defines_remove", "semanticKey": "edge:defines:ThreadSafeHeap:removeFirstOrNull", "capability": "structure", "expectation": "present", "recordKind": "edge", "kind": "defines", "from": { "kind": "class", "name": "ThreadSafeHeap", "locator": "workspace://ThreadSafeHeap.kt#L19-L158" }, "to": { "kind": "method", "name": "removeFirstOrNull()", "locator": "workspace://ThreadSafeHeap.kt#L43-L49" }, "locator": "workspace://ThreadSafeHeap.kt#L43-L49", "resolution": "exact" },
+ { "id": "cititem_coroutines_remove_call", "semanticKey": "edge:calls:removeFirstOrNull:removeAtImpl", "capability": "calls", "expectation": "present", "recordKind": "edge", "kind": "calls", "from": { "kind": "method", "name": "removeFirstOrNull()", "locator": "workspace://ThreadSafeHeap.kt#L43-L49" }, "to": { "kind": "method", "name": "removeAtImpl(Int)", "locator": "workspace://ThreadSafeHeap.kt#L86-L107" }, "locator": "workspace://ThreadSafeHeap.kt#L45-L45", "resolution": "typed" },
+ { "id": "cititem_coroutines_import_atomicfu", "semanticKey": "edge:imports:ThreadSafeHeap:kotlinx.atomicfu", "capability": "imports", "expectation": "present", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "ThreadSafeHeap", "qualifiedName": "ThreadSafeHeap.kt::ThreadSafeHeap", "locator": "workspace://ThreadSafeHeap.kt#L1-L159" }, "to": { "kind": "module", "name": "kotlinx.atomicfu.*", "qualifiedName": "ConcurrentLinkedList.kt::kotlinx.atomicfu.*", "locator": "workspace://ConcurrentLinkedList.kt#L3-L3" }, "locator": "workspace://ThreadSafeHeap.kt#L3-L3", "resolution": "unresolved" },
+ { "id": "cititem_coroutines_import_atomicfu_not_coroutines", "semanticKey": "edge:imports:ThreadSafeHeap:atomicfu-line:not-coroutines", "capability": "imports", "expectation": "absent", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "ThreadSafeHeap", "qualifiedName": "ThreadSafeHeap.kt::ThreadSafeHeap", "locator": "workspace://ThreadSafeHeap.kt#L1-L159" }, "to": { "kind": "module", "name": "kotlinx.coroutines.*", "qualifiedName": "ConcurrentLinkedList.kt::kotlinx.coroutines.*", "locator": "workspace://ConcurrentLinkedList.kt#L4-L4" }, "locator": "workspace://ThreadSafeHeap.kt#L3-L3", "resolution": "unresolved" },
+ { "id": "cititem_coroutines_construct_inline_list", "semanticKey": "edge:constructs:InlineList-plus:InlineList", "capability": "types", "expectation": "present", "recordKind": "edge", "kind": "constructs", "from": { "kind": "method", "name": "plus(E)", "qualifiedName": "InlineList.kt::kotlinx.coroutines.internal::InlineList::plus(E)", "locator": "workspace://InlineList.kt#L15-L30" }, "to": { "kind": "class", "name": "InlineList", "qualifiedName": "InlineList.kt::kotlinx.coroutines.internal::InlineList", "locator": "workspace://InlineList.kt#L13-L44" }, "locator": "workspace://InlineList.kt#L18-L18", "resolution": "exact" },
+ { "id": "cititem_coroutines_construct_inline_list_not_array_list_line", "semanticKey": "edge:constructs:InlineList-plus:InlineList:not-ArrayList-line", "capability": "types", "expectation": "absent", "recordKind": "edge", "kind": "constructs", "from": { "kind": "method", "name": "plus(E)", "qualifiedName": "InlineList.kt::kotlinx.coroutines.internal::InlineList::plus(E)", "locator": "workspace://InlineList.kt#L15-L30" }, "to": { "kind": "class", "name": "InlineList", "qualifiedName": "InlineList.kt::kotlinx.coroutines.internal::InlineList", "locator": "workspace://InlineList.kt#L13-L44" }, "locator": "workspace://InlineList.kt#L24-L24", "resolution": "exact" }
+ ],
+ "truthFingerprint": "sha256:8dab9e63dda00cca3fa14c2b7e2774929ed7985df97440235a66f1154d69b943"
+}
diff --git a/evals/code-intelligence/truth/repositories/kotlin/cirepo_kotlin_ktorio_ktor.json b/evals/code-intelligence/truth/repositories/kotlin/cirepo_kotlin_ktorio_ktor.json
new file mode 100644
index 00000000..53e1fd83
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/kotlin/cirepo_kotlin_ktorio_ktor.json
@@ -0,0 +1,19 @@
+{
+ "schemaVersion": "1.0.0", "truthVersion": "memory-recall-code-intelligence-truth-1", "id": "citruth_kotlin_ktor_routing_trace", "language": "kotlin",
+ "source": { "class": "real-repo", "ref": "corpus://cirepo_kotlin_ktorio_ktor@fc6595632e7412abb98b941f926d0ea13c7647d1#ktor-server/ktor-server-core/common/src/io/ktor/server/routing" },
+ "review": { "status": "reviewed", "method": "source-locator", "reviewedBy": "memory-recall-maintainer", "reviewedAt": "2026-07-16T00:00:00.000Z" },
+ "reviewCoverage": { "declarations": "sampled", "relationships": "sampled", "calls": "sampled" },
+ "capabilityClaims": { "parse": "partial", "structure": "partial", "imports": "partial", "exports": "unmeasured", "heritage": "partial", "types": "partial", "calls": "partial", "config": "unmeasured", "frameworks": "partial", "impact": "unmeasured", "processes": "unmeasured" },
+ "items": [
+ { "id": "cititem_ktor_trace", "semanticKey": "node:class:RoutingResolveTrace", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "class", "name": "RoutingResolveTrace", "qualifiedName": "RoutingResolveTrace.kt::io.ktor.server.routing::RoutingResolveTrace", "locator": "workspace://RoutingResolveTrace.kt#L59-L146" },
+ { "id": "cititem_ktor_finish", "semanticKey": "node:method:RoutingResolveTrace:finish", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "finish(RoutingNode,Int,RoutingResolveResult)", "qualifiedName": "RoutingResolveTrace.kt::io.ktor.server.routing::RoutingResolveTrace::finish(RoutingNode,Int,RoutingResolveResult)", "locator": "workspace://RoutingResolveTrace.kt#L87-L93" },
+ { "id": "cititem_ktor_register", "semanticKey": "node:method:RoutingResolveTrace:register", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "register(RoutingResolveTraceEntry)", "qualifiedName": "RoutingResolveTrace.kt::io.ktor.server.routing::RoutingResolveTrace::register(RoutingResolveTraceEntry)", "locator": "workspace://RoutingResolveTrace.kt#L65-L71" },
+ { "id": "cititem_ktor_defines_finish", "semanticKey": "edge:defines:RoutingResolveTrace:finish", "capability": "structure", "expectation": "present", "recordKind": "edge", "kind": "defines", "from": { "kind": "class", "name": "RoutingResolveTrace", "locator": "workspace://RoutingResolveTrace.kt#L59-L146" }, "to": { "kind": "method", "name": "finish(RoutingNode,Int,RoutingResolveResult)", "locator": "workspace://RoutingResolveTrace.kt#L87-L93" }, "locator": "workspace://RoutingResolveTrace.kt#L87-L93", "resolution": "exact" },
+ { "id": "cititem_ktor_finish_register", "semanticKey": "edge:calls:finish:register", "capability": "calls", "expectation": "present", "recordKind": "edge", "kind": "calls", "from": { "kind": "method", "name": "finish(RoutingNode,Int,RoutingResolveResult)", "locator": "workspace://RoutingResolveTrace.kt#L87-L93" }, "to": { "kind": "method", "name": "register(RoutingResolveTraceEntry)", "locator": "workspace://RoutingResolveTrace.kt#L65-L71" }, "locator": "workspace://RoutingResolveTrace.kt#L92-L92", "resolution": "typed" },
+ { "id": "cititem_ktor_import_http", "semanticKey": "edge:imports:HostsRoutingBuilder:io.ktor.http", "capability": "imports", "expectation": "present", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "HostsRoutingBuilder", "qualifiedName": "HostsRoutingBuilder.kt::HostsRoutingBuilder", "locator": "workspace://HostsRoutingBuilder.kt#L1-L175" }, "to": { "kind": "module", "name": "io.ktor.http.*", "qualifiedName": "HostsRoutingBuilder.kt::io.ktor.http.*", "locator": "workspace://HostsRoutingBuilder.kt#L7-L7" }, "locator": "workspace://HostsRoutingBuilder.kt#L7-L7", "resolution": "unresolved" },
+ { "id": "cititem_ktor_import_http_not_application", "semanticKey": "edge:imports:HostsRoutingBuilder:http-line:not-application", "capability": "imports", "expectation": "absent", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "HostsRoutingBuilder", "qualifiedName": "HostsRoutingBuilder.kt::HostsRoutingBuilder", "locator": "workspace://HostsRoutingBuilder.kt#L1-L175" }, "to": { "kind": "module", "name": "io.ktor.server.application.*", "qualifiedName": "HostsRoutingBuilder.kt::io.ktor.server.application.*", "locator": "workspace://HostsRoutingBuilder.kt#L8-L8" }, "locator": "workspace://HostsRoutingBuilder.kt#L7-L7", "resolution": "unresolved" },
+ { "id": "cititem_ktor_construct_trace_entry", "semanticKey": "edge:constructs:RoutingResolveTrace-begin:RoutingResolveTraceEntry", "capability": "types", "expectation": "present", "recordKind": "edge", "kind": "constructs", "from": { "kind": "method", "name": "begin(RoutingNode,Int)", "qualifiedName": "RoutingResolveTrace.kt::io.ktor.server.routing::RoutingResolveTrace::begin(RoutingNode,Int)", "locator": "workspace://RoutingResolveTrace.kt#L78-L80" }, "to": { "kind": "class", "name": "RoutingResolveTraceEntry", "qualifiedName": "RoutingResolveTrace.kt::io.ktor.server.routing::RoutingResolveTraceEntry", "locator": "workspace://RoutingResolveTrace.kt#L18-L49" }, "locator": "workspace://RoutingResolveTrace.kt#L79-L79", "resolution": "exact" },
+ { "id": "cititem_ktor_construct_trace_not_entry", "semanticKey": "edge:constructs:RoutingResolveTrace-begin:not-RoutingResolveTrace", "capability": "types", "expectation": "absent", "recordKind": "edge", "kind": "constructs", "from": { "kind": "method", "name": "begin(RoutingNode,Int)", "qualifiedName": "RoutingResolveTrace.kt::io.ktor.server.routing::RoutingResolveTrace::begin(RoutingNode,Int)", "locator": "workspace://RoutingResolveTrace.kt#L78-L80" }, "to": { "kind": "class", "name": "RoutingResolveTrace", "qualifiedName": "RoutingResolveTrace.kt::io.ktor.server.routing::RoutingResolveTrace", "locator": "workspace://RoutingResolveTrace.kt#L59-L146" }, "locator": "workspace://RoutingResolveTrace.kt#L79-L79", "resolution": "exact" }
+ ],
+ "truthFingerprint": "sha256:c87acb9f8d2f19a45bcd3d3693e2ebf58f3be1ab9b776674acf4c70683703512"
+}
diff --git a/evals/code-intelligence/truth/repositories/php/cirepo_php_laravel_framework.json b/evals/code-intelligence/truth/repositories/php/cirepo_php_laravel_framework.json
new file mode 100644
index 00000000..5aedf473
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/php/cirepo_php_laravel_framework.json
@@ -0,0 +1,23 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_php_laravel_framework",
+ "language": "php",
+ "source": { "class": "real-repo", "ref": "corpus://cirepo_php_laravel_framework@ee0296f03a02b8f890c6323f18bdf4669468c0c2#src/Illuminate/Routing" },
+ "review": { "status": "reviewed", "method": "source-locator", "reviewedBy": "memory-recall-maintainer", "reviewedAt": "2026-07-16T00:00:00.000Z" },
+ "reviewCoverage": { "declarations": "sampled", "relationships": "sampled", "calls": "sampled" },
+ "capabilityClaims": { "parse": "partial", "structure": "partial", "imports": "partial", "exports": "unmeasured", "heritage": "partial", "types": "partial", "calls": "partial", "config": "unmeasured", "frameworks": "unmeasured", "impact": "unmeasured", "processes": "unmeasured" },
+ "items": [
+ { "id": "cititem_laravel_router", "semanticKey": "node:class:Router.php:Router", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "class", "name": "Router", "qualifiedName": "Router.php::Illuminate.Routing::Router", "locator": "workspace://Router.php#L38-L1517" },
+ { "id": "cititem_laravel_dispatch", "semanticKey": "node:method:Router.php:Router:dispatch", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "dispatch", "qualifiedName": "Router.php::Illuminate.Routing::Router::dispatch", "locator": "workspace://Router.php#L749-L754" },
+ { "id": "cititem_laravel_dispatch_to_route", "semanticKey": "node:method:Router.php:Router:dispatchToRoute", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "dispatchToRoute", "qualifiedName": "Router.php::Illuminate.Routing::Router::dispatchToRoute", "locator": "workspace://Router.php#L762-L765" },
+ { "id": "cititem_laravel_run_route", "semanticKey": "node:method:Router.php:Router:runRoute", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "runRoute", "qualifiedName": "Router.php::Illuminate.Routing::Router::runRoute", "locator": "workspace://Router.php#L793-L802" },
+ { "id": "cititem_laravel_new_route_constructs_route", "semanticKey": "edge:constructs:Router-newRoute:Route", "capability": "types", "expectation": "present", "recordKind": "edge", "kind": "constructs", "from": { "kind": "method", "name": "newRoute", "qualifiedName": "Router.php::Illuminate.Routing::Router::newRoute", "locator": "workspace://Router.php#L683-L688" }, "to": { "kind": "class", "name": "Route", "qualifiedName": "Route.php::Illuminate.Routing::Route", "locator": "workspace://Route.php#L35-L1573" }, "locator": "workspace://Router.php#L685-L685", "resolution": "exact" },
+ { "id": "cititem_laravel_defines_dispatch", "semanticKey": "edge:defines:Router:dispatch", "capability": "structure", "expectation": "present", "recordKind": "edge", "kind": "defines", "from": { "kind": "class", "name": "Router", "qualifiedName": "Router.php::Illuminate.Routing::Router", "locator": "workspace://Router.php#L38-L1517" }, "to": { "kind": "method", "name": "dispatch", "qualifiedName": "Router.php::Illuminate.Routing::Router::dispatch", "locator": "workspace://Router.php#L749-L754" }, "locator": "workspace://Router.php#L749-L754", "resolution": "exact" },
+ { "id": "cititem_laravel_implements_registrar", "semanticKey": "edge:implements:Router:RegistrarContract", "capability": "heritage", "expectation": "present", "recordKind": "edge", "kind": "implements", "from": { "kind": "class", "name": "Router", "qualifiedName": "Router.php::Illuminate.Routing::Router", "locator": "workspace://Router.php#L38-L1517" }, "to": { "kind": "interface", "name": "RegistrarContract", "qualifiedName": "Router.php::RegistrarContract", "locator": "workspace://Router.php#L38-L1517" }, "locator": "workspace://Router.php#L38-L1517", "resolution": "unresolved" },
+ { "id": "cititem_laravel_call_dispatch_to_route", "semanticKey": "edge:calls:Router.dispatch:Router.dispatchToRoute", "capability": "calls", "expectation": "present", "recordKind": "edge", "kind": "calls", "from": { "kind": "method", "name": "dispatch", "qualifiedName": "Router.php::Illuminate.Routing::Router::dispatch", "locator": "workspace://Router.php#L749-L754" }, "to": { "kind": "method", "name": "dispatchToRoute", "qualifiedName": "Router.php::Illuminate.Routing::Router::dispatchToRoute", "locator": "workspace://Router.php#L762-L765" }, "locator": "workspace://Router.php#L753-L753", "resolution": "typed" },
+ { "id": "cititem_laravel_import_reflector", "semanticKey": "edge:imports:RouteSignatureParameters:Reflector", "capability": "imports", "expectation": "present", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "RouteSignatureParameters", "locator": "workspace://RouteSignatureParameters.php#L1-L61" }, "to": { "kind": "module", "name": "Illuminate.Support.Reflector", "locator": "workspace://ImplicitRouteBinding.php#L8-L8" }, "locator": "workspace://RouteSignatureParameters.php#L5-L5", "resolution": "unresolved" },
+ { "id": "cititem_laravel_import_reflector_not_str", "semanticKey": "edge:imports:RouteSignatureParameters:reflector-line:not-str", "capability": "imports", "expectation": "absent", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "RouteSignatureParameters", "locator": "workspace://RouteSignatureParameters.php#L1-L61" }, "to": { "kind": "module", "name": "Illuminate.Support.Str", "locator": "workspace://AbstractRouteCollection.php#L9-L9" }, "locator": "workspace://RouteSignatureParameters.php#L5-L5", "resolution": "unresolved" }
+ ],
+ "truthFingerprint": "sha256:fd9b93077650dedde9d8a7ce1e80b93e831f7e2396d2499b8c145f03b26baff8"
+}
diff --git a/evals/code-intelligence/truth/repositories/php/cirepo_php_slimphp_slim.json b/evals/code-intelligence/truth/repositories/php/cirepo_php_slimphp_slim.json
new file mode 100644
index 00000000..f3b51b38
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/php/cirepo_php_slimphp_slim.json
@@ -0,0 +1,23 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_php_slimphp_slim",
+ "language": "php",
+ "source": { "class": "real-repo", "ref": "corpus://cirepo_php_slimphp_slim@80900fb39cafce3ae53b18a2c4f642a122f03095#Slim" },
+ "review": { "status": "reviewed", "method": "source-locator", "reviewedBy": "memory-recall-maintainer", "reviewedAt": "2026-07-16T00:00:00.000Z" },
+ "reviewCoverage": { "declarations": "sampled", "relationships": "sampled", "calls": "sampled" },
+ "capabilityClaims": { "parse": "partial", "structure": "partial", "imports": "partial", "exports": "unmeasured", "heritage": "partial", "types": "partial", "calls": "partial", "config": "unmeasured", "frameworks": "unmeasured", "impact": "unmeasured", "processes": "unmeasured" },
+ "items": [
+ { "id": "cititem_slim_route", "semanticKey": "node:class:Routing/Route.php:Route", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "class", "name": "Route", "qualifiedName": "Routing/Route.php::Slim.Routing::Route", "locator": "workspace://Routing/Route.php#L40-L364" },
+ { "id": "cititem_slim_prepare", "semanticKey": "node:method:Routing/Route.php:Route:prepare", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "prepare", "qualifiedName": "Routing/Route.php::Slim.Routing::Route::prepare", "locator": "workspace://Routing/Route.php#L293-L297" },
+ { "id": "cititem_slim_run", "semanticKey": "node:method:Routing/Route.php:Route:run", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "run", "qualifiedName": "Routing/Route.php::Slim.Routing::Route::run", "locator": "workspace://Routing/Route.php#L315-L322" },
+ { "id": "cititem_slim_handle", "semanticKey": "node:method:Routing/Route.php:Route:handle", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "handle", "qualifiedName": "Routing/Route.php::Slim.Routing::Route::handle", "locator": "workspace://Routing/Route.php#L342-L363" },
+ { "id": "cititem_slim_app_run_constructs_response_emitter", "semanticKey": "edge:constructs:App-run:ResponseEmitter", "capability": "types", "expectation": "present", "recordKind": "edge", "kind": "constructs", "from": { "kind": "method", "name": "run", "qualifiedName": "App.php::Slim::App::run", "locator": "workspace://App.php#L186-L196" }, "to": { "kind": "class", "name": "ResponseEmitter", "qualifiedName": "ResponseEmitter.php::Slim::ResponseEmitter", "locator": "workspace://ResponseEmitter.php#L26-L136" }, "locator": "workspace://App.php#L194-L194", "resolution": "exact" },
+ { "id": "cititem_slim_defines_run", "semanticKey": "edge:defines:Route:run", "capability": "structure", "expectation": "present", "recordKind": "edge", "kind": "defines", "from": { "kind": "class", "name": "Route", "qualifiedName": "Routing/Route.php::Slim.Routing::Route", "locator": "workspace://Routing/Route.php#L40-L364" }, "to": { "kind": "method", "name": "run", "qualifiedName": "Routing/Route.php::Slim.Routing::Route::run", "locator": "workspace://Routing/Route.php#L315-L322" }, "locator": "workspace://Routing/Route.php#L315-L322", "resolution": "exact" },
+ { "id": "cititem_slim_implements_route_interface", "semanticKey": "edge:implements:Route:RouteInterface", "capability": "heritage", "expectation": "present", "recordKind": "edge", "kind": "implements", "from": { "kind": "class", "name": "Route", "qualifiedName": "Routing/Route.php::Slim.Routing::Route", "locator": "workspace://Routing/Route.php#L40-L364" }, "to": { "kind": "interface", "name": "RouteInterface", "qualifiedName": "Interfaces/RouteInterface.php::Slim.Interfaces::RouteInterface", "locator": "workspace://Interfaces/RouteInterface.php#L18-L128" }, "locator": "workspace://Routing/Route.php#L40-L364", "resolution": "exact" },
+ { "id": "cititem_slim_call_append_group", "semanticKey": "edge:calls:Route.run:appendGroupMiddlewareToRoute", "capability": "calls", "expectation": "present", "recordKind": "edge", "kind": "calls", "from": { "kind": "method", "name": "run", "qualifiedName": "Routing/Route.php::Slim.Routing::Route::run", "locator": "workspace://Routing/Route.php#L315-L322" }, "to": { "kind": "method", "name": "appendGroupMiddlewareToRoute", "qualifiedName": "Routing/Route.php::Slim.Routing::Route::appendGroupMiddlewareToRoute", "locator": "workspace://Routing/Route.php#L327-L337" }, "locator": "workspace://Routing/Route.php#L318-L318", "resolution": "typed" },
+ { "id": "cititem_slim_import_class_exists", "semanticKey": "edge:imports:CallableResolver:class_exists", "capability": "imports", "expectation": "present", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "CallableResolver", "locator": "workspace://CallableResolver.php#L1-L201" }, "to": { "kind": "module", "name": "class_exists", "locator": "workspace://CallableResolver.php#L20-L20" }, "locator": "workspace://CallableResolver.php#L20-L20", "resolution": "unresolved" },
+ { "id": "cititem_slim_import_class_exists_not_is_array", "semanticKey": "edge:imports:CallableResolver:class-exists-line:not-is-array", "capability": "imports", "expectation": "absent", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "CallableResolver", "locator": "workspace://CallableResolver.php#L1-L201" }, "to": { "kind": "module", "name": "is_array", "locator": "workspace://CallableResolver.php#L21-L21" }, "locator": "workspace://CallableResolver.php#L20-L20", "resolution": "unresolved" }
+ ],
+ "truthFingerprint": "sha256:e032d3cb344bf966546dad56d2f05c62f305c48f506830fdfa46a8c7458c57d0"
+}
diff --git a/evals/code-intelligence/truth/repositories/php/cirepo_php_symfony_symfony.json b/evals/code-intelligence/truth/repositories/php/cirepo_php_symfony_symfony.json
new file mode 100644
index 00000000..3089d2c2
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/php/cirepo_php_symfony_symfony.json
@@ -0,0 +1,23 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_php_symfony_symfony",
+ "language": "php",
+ "source": { "class": "real-repo", "ref": "corpus://cirepo_php_symfony_symfony@7dbebd843d25b2f72e2f7dfbe044c632941ea924#src/Symfony/Component/Routing" },
+ "review": { "status": "reviewed", "method": "source-locator", "reviewedBy": "memory-recall-maintainer", "reviewedAt": "2026-07-16T00:00:00.000Z" },
+ "reviewCoverage": { "declarations": "sampled", "relationships": "sampled", "calls": "sampled" },
+ "capabilityClaims": { "parse": "partial", "structure": "partial", "imports": "partial", "exports": "unmeasured", "heritage": "partial", "types": "partial", "calls": "partial", "config": "unmeasured", "frameworks": "unmeasured", "impact": "unmeasured", "processes": "unmeasured" },
+ "items": [
+ { "id": "cititem_symfony_router", "semanticKey": "node:class:Router.php:Router", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "class", "name": "Router", "qualifiedName": "Router.php::Symfony.Component.Routing::Router", "locator": "workspace://Router.php#L38-L306" },
+ { "id": "cititem_symfony_generate", "semanticKey": "node:method:Router.php:Router:generate", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "generate", "qualifiedName": "Router.php::Symfony.Component.Routing::Router::generate", "locator": "workspace://Router.php#L170-L173" },
+ { "id": "cititem_symfony_match", "semanticKey": "node:method:Router.php:Router:match", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "match", "qualifiedName": "Router.php::Symfony.Component.Routing::Router::match", "locator": "workspace://Router.php#L175-L178" },
+ { "id": "cititem_symfony_get_generator", "semanticKey": "node:method:Router.php:Router:getGenerator", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "getGenerator", "qualifiedName": "Router.php::Symfony.Component.Routing::Router::getGenerator", "locator": "workspace://Router.php#L236-L268" },
+ { "id": "cititem_symfony_directory_loader_constructs_route_collection", "semanticKey": "edge:constructs:DirectoryLoader-load:RouteCollection", "capability": "types", "expectation": "present", "recordKind": "edge", "kind": "constructs", "from": { "kind": "method", "name": "load", "qualifiedName": "Loader/DirectoryLoader.php::Symfony.Component.Routing.Loader::DirectoryLoader::load", "locator": "workspace://Loader/DirectoryLoader.php#L20-L44" }, "to": { "kind": "class", "name": "RouteCollection", "qualifiedName": "RouteCollection.php::Symfony.Component.Routing::RouteCollection", "locator": "workspace://RouteCollection.php#L30-L394" }, "locator": "workspace://Loader/DirectoryLoader.php#L24-L24", "resolution": "exact" },
+ { "id": "cititem_symfony_defines_generate", "semanticKey": "edge:defines:Router:generate", "capability": "structure", "expectation": "present", "recordKind": "edge", "kind": "defines", "from": { "kind": "class", "name": "Router", "qualifiedName": "Router.php::Symfony.Component.Routing::Router", "locator": "workspace://Router.php#L38-L306" }, "to": { "kind": "method", "name": "generate", "qualifiedName": "Router.php::Symfony.Component.Routing::Router::generate", "locator": "workspace://Router.php#L170-L173" }, "locator": "workspace://Router.php#L170-L173", "resolution": "exact" },
+ { "id": "cititem_symfony_implements_router_interface", "semanticKey": "edge:implements:Router:RouterInterface", "capability": "heritage", "expectation": "present", "recordKind": "edge", "kind": "implements", "from": { "kind": "class", "name": "Router", "qualifiedName": "Router.php::Symfony.Component.Routing::Router", "locator": "workspace://Router.php#L38-L306" }, "to": { "kind": "interface", "name": "RouterInterface", "qualifiedName": "RouterInterface.php::Symfony.Component.Routing::RouterInterface", "locator": "workspace://RouterInterface.php#L24-L33" }, "locator": "workspace://Router.php#L38-L306", "resolution": "exact" },
+ { "id": "cititem_symfony_call_route_collection", "semanticKey": "edge:calls:Router.getGenerator:Router.getRouteCollection", "capability": "calls", "expectation": "present", "recordKind": "edge", "kind": "calls", "from": { "kind": "method", "name": "getGenerator", "qualifiedName": "Router.php::Symfony.Component.Routing::Router::getGenerator", "locator": "workspace://Router.php#L236-L268" }, "to": { "kind": "method", "name": "getRouteCollection", "qualifiedName": "Router.php::Symfony.Component.Routing::Router::getRouteCollection", "locator": "workspace://Router.php#L140-L143" }, "locator": "workspace://Router.php#L243-L243", "resolution": "typed" },
+ { "id": "cititem_symfony_import_resource", "semanticKey": "edge:imports:RouteCollection:ResourceInterface", "capability": "imports", "expectation": "present", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "RouteCollection", "locator": "workspace://RouteCollection.php#L1-L395" }, "to": { "kind": "module", "name": "Symfony.Component.Config.Resource.ResourceInterface", "locator": "workspace://RouteCollection.php#L14-L14" }, "locator": "workspace://RouteCollection.php#L14-L14", "resolution": "unresolved" },
+ { "id": "cititem_symfony_import_resource_not_invalid_argument", "semanticKey": "edge:imports:RouteCollection:resource-line:not-invalid-argument", "capability": "imports", "expectation": "absent", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "RouteCollection", "locator": "workspace://RouteCollection.php#L1-L395" }, "to": { "kind": "module", "name": "Symfony.Component.Routing.Exception.InvalidArgumentException", "locator": "workspace://Alias.php#L14-L14" }, "locator": "workspace://RouteCollection.php#L14-L14", "resolution": "unresolved" }
+ ],
+ "truthFingerprint": "sha256:109b0829346d864f6a13fe25afae966e9ba59c18f9a2d1d896f2fea76d3ca35f"
+}
diff --git a/evals/code-intelligence/truth/repositories/python/cicase_python_djangoproject_accounts.json b/evals/code-intelligence/truth/repositories/python/cicase_python_djangoproject_accounts.json
new file mode 100644
index 00000000..bb54c65e
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/python/cicase_python_djangoproject_accounts.json
@@ -0,0 +1,59 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_python_djangoproject_accounts",
+ "language": "python",
+ "source": {
+ "class": "real-repo",
+ "ref": "corpus://cirepo_python_django_djangoproject_com@7a19ab3bce8f62fed03bb3eef2c19f2d0af15470#accounts"
+ },
+ "review": {
+ "status": "reviewed",
+ "method": "source-locator",
+ "reviewedBy": "memory-recall-maintainer",
+ "reviewedAt": "2026-07-17T20:01:30.000Z"
+ },
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "capabilityClaims": {
+ "parse": "partial",
+ "structure": "unmeasured",
+ "imports": "unmeasured",
+ "exports": "unmeasured",
+ "heritage": "unmeasured",
+ "types": "unmeasured",
+ "calls": "unmeasured",
+ "config": "unmeasured",
+ "frameworks": "partial",
+ "impact": "unmeasured",
+ "processes": "unmeasured"
+ },
+ "items": [
+ {
+ "id": "cititem_djangoproject_accounts_edit_route",
+ "semanticKey": "edge:handles_route:urls.py:edit_profile:ANY_edit_",
+ "capability": "frameworks",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "handles_route",
+ "from": {
+ "kind": "function",
+ "name": "edit_profile",
+ "qualifiedName": "views.py::edit_profile",
+ "locator": "workspace://views.py#L30-L36"
+ },
+ "to": {
+ "kind": "route",
+ "name": "ANY_edit_",
+ "qualifiedName": "urls.py::ANY_edit_",
+ "locator": "workspace://urls.py#L13-L17"
+ },
+ "locator": "workspace://urls.py#L13-L17",
+ "resolution": "exact"
+ }
+ ],
+ "truthFingerprint": "sha256:a44d89b9d91dfa31ddc5126e085b4e25fb01bf61244fe7c3751bd774ef4ce6f1"
+}
diff --git a/evals/code-intelligence/truth/repositories/python/cicase_python_fastapi_app_testing.json b/evals/code-intelligence/truth/repositories/python/cicase_python_fastapi_app_testing.json
new file mode 100644
index 00000000..b78d37a1
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/python/cicase_python_fastapi_app_testing.json
@@ -0,0 +1,59 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_python_fastapi_app_testing",
+ "language": "python",
+ "source": {
+ "class": "real-repo",
+ "ref": "corpus://cirepo_python_fastapi_fastapi@9b8410bdc9fa1fd679ea7e65b926535c7045ab87#docs_src/app_testing/app_b_py310"
+ },
+ "review": {
+ "status": "reviewed",
+ "method": "source-locator",
+ "reviewedBy": "memory-recall-maintainer",
+ "reviewedAt": "2026-07-17T20:01:30.000Z"
+ },
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "capabilityClaims": {
+ "parse": "partial",
+ "structure": "unmeasured",
+ "imports": "unmeasured",
+ "exports": "unmeasured",
+ "heritage": "unmeasured",
+ "types": "unmeasured",
+ "calls": "unmeasured",
+ "config": "unmeasured",
+ "frameworks": "partial",
+ "impact": "unmeasured",
+ "processes": "unmeasured"
+ },
+ "items": [
+ {
+ "id": "cititem_fastapi_app_testing_get_item_route",
+ "semanticKey": "edge:handles_route:main.py:read_main:GET_items_param",
+ "capability": "frameworks",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "handles_route",
+ "from": {
+ "kind": "function",
+ "name": "read_main",
+ "qualifiedName": "main.py::read_main",
+ "locator": "workspace://main.py#L21-L26"
+ },
+ "to": {
+ "kind": "route",
+ "name": "GET_items_param",
+ "qualifiedName": "main.py::GET_items_param",
+ "locator": "workspace://main.py#L20-L26"
+ },
+ "locator": "workspace://main.py#L20-L26",
+ "resolution": "exact"
+ }
+ ],
+ "truthFingerprint": "sha256:a6620ea5f2e98b06388485412234e01bc218faed3a04aed1577df87e174df703"
+}
diff --git a/evals/code-intelligence/truth/repositories/python/cicase_python_flask_tutorial.json b/evals/code-intelligence/truth/repositories/python/cicase_python_flask_tutorial.json
new file mode 100644
index 00000000..0d7fef47
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/python/cicase_python_flask_tutorial.json
@@ -0,0 +1,59 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_python_flask_tutorial",
+ "language": "python",
+ "source": {
+ "class": "real-repo",
+ "ref": "corpus://cirepo_python_pallets_flask@36e4a824f340fdee7ed50937ba8e7f6bc7d17f81#examples/tutorial/flaskr"
+ },
+ "review": {
+ "status": "reviewed",
+ "method": "source-locator",
+ "reviewedBy": "memory-recall-maintainer",
+ "reviewedAt": "2026-07-17T20:01:30.000Z"
+ },
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "capabilityClaims": {
+ "parse": "partial",
+ "structure": "unmeasured",
+ "imports": "unmeasured",
+ "exports": "unmeasured",
+ "heritage": "unmeasured",
+ "types": "unmeasured",
+ "calls": "unmeasured",
+ "config": "unmeasured",
+ "frameworks": "partial",
+ "impact": "unmeasured",
+ "processes": "unmeasured"
+ },
+ "items": [
+ {
+ "id": "cititem_flask_tutorial_index_route",
+ "semanticKey": "edge:handles_route:blog.py:index:GET_root",
+ "capability": "frameworks",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "handles_route",
+ "from": {
+ "kind": "function",
+ "name": "index",
+ "qualifiedName": "blog.py::index",
+ "locator": "workspace://blog.py#L17-L25"
+ },
+ "to": {
+ "kind": "route",
+ "name": "GET_root",
+ "qualifiedName": "blog.py::GET_root",
+ "locator": "workspace://blog.py#L16-L25"
+ },
+ "locator": "workspace://blog.py#L16-L25",
+ "resolution": "exact"
+ }
+ ],
+ "truthFingerprint": "sha256:2453175e86ebe24560a5930f3651926f217e32b847e98aab21f3467100225f7e"
+}
diff --git a/evals/code-intelligence/truth/repositories/python/cirepo_python_fastapi_fastapi.json b/evals/code-intelligence/truth/repositories/python/cirepo_python_fastapi_fastapi.json
new file mode 100644
index 00000000..b8735257
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/python/cirepo_python_fastapi_fastapi.json
@@ -0,0 +1,161 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_python_fastapi_fastapi",
+ "language": "python",
+ "source": {
+ "class": "real-repo",
+ "ref": "corpus://cirepo_python_fastapi_fastapi@9b8410bdc9fa1fd679ea7e65b926535c7045ab87#fastapi"
+ },
+ "review": {
+ "status": "reviewed",
+ "method": "source-locator",
+ "reviewedBy": "memory-recall-maintainer",
+ "reviewedAt": "2026-07-17T19:14:11.000Z"
+ },
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "capabilityClaims": {
+ "parse": "partial",
+ "structure": "partial",
+ "imports": "partial",
+ "exports": "unmeasured",
+ "heritage": "partial",
+ "types": "partial",
+ "calls": "partial",
+ "config": "partial",
+ "frameworks": "unmeasured",
+ "impact": "unmeasured",
+ "processes": "unmeasured"
+ },
+ "items": [
+ {
+ "id": "cititem_fastapi_class",
+ "semanticKey": "node:class:applications.py:FastAPI",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "class",
+ "name": "FastAPI",
+ "qualifiedName": "applications.py::FastAPI",
+ "locator": "workspace://applications.py#L42-L4768"
+ },
+ {
+ "id": "cititem_fastapi_init",
+ "semanticKey": "node:method:applications.py:FastAPI:__init__",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "method",
+ "name": "__init__",
+ "qualifiedName": "applications.py::FastAPI::__init__",
+ "locator": "workspace://applications.py#L58-L1018"
+ },
+ {
+ "id": "cititem_fastapi_setup",
+ "semanticKey": "node:method:applications.py:FastAPI:setup",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "method",
+ "name": "setup",
+ "qualifiedName": "applications.py::FastAPI::setup",
+ "locator": "workspace://applications.py#L1105-L1158"
+ },
+ {
+ "id": "cititem_fastapi_config_package_marker",
+ "semanticKey": "node:configuration-resource:package-marker:fastapi",
+ "capability": "config",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "configuration_resource",
+ "name": "fastapi",
+ "qualifiedName": "__init__.py::fastapi",
+ "locator": "workspace://__init__.py#L1-L25"
+ },
+ {
+ "id": "cititem_fastapi_config_package_dependency",
+ "semanticKey": "edge:depends-on:package-marker:fastapi",
+ "capability": "config",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "depends_on",
+ "from": { "kind": "configuration_resource", "name": "fastapi", "qualifiedName": "__init__.py::fastapi", "locator": "workspace://__init__.py#L1-L25" },
+ "to": { "kind": "package", "name": "fastapi", "qualifiedName": "__init__.py::fastapi", "locator": "workspace://__init__.py#L1-L25" },
+ "locator": "workspace://__init__.py#L1-L25",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_fastapi_import_openapi_utils",
+ "semanticKey": "edge:imports:applications.py:openapi/utils.py",
+ "capability": "imports",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "imports",
+ "from": {
+ "kind": "module",
+ "name": "applications",
+ "qualifiedName": "applications.py::applications",
+ "locator": "workspace://applications.py#L1-L4769"
+ },
+ "to": {
+ "kind": "module",
+ "name": "openapi_utils",
+ "qualifiedName": "openapi/utils.py::openapi_utils",
+ "locator": "workspace://openapi/utils.py#L1-L618"
+ },
+ "locator": "workspace://applications.py#L22-L22",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_fastapi_response_validation_extends_validation",
+ "semanticKey": "edge:extends:exceptions.py:ResponseValidationError:ValidationException",
+ "capability": "heritage",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "extends",
+ "from": { "kind": "class", "name": "ResponseValidationError", "qualifiedName": "exceptions.py::ResponseValidationError", "locator": "workspace://exceptions.py#L234-L243" },
+ "to": { "kind": "class", "name": "ValidationException", "qualifiedName": "exceptions.py::ValidationException", "locator": "workspace://exceptions.py#L174-L209" },
+ "locator": "workspace://exceptions.py#L234-L243",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_fastapi_construct_default_placeholder",
+ "semanticKey": "edge:constructs:datastructures.py:Default:DefaultPlaceholder",
+ "capability": "types",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "constructs",
+ "from": {
+ "kind": "function",
+ "name": "Default",
+ "qualifiedName": "datastructures.py::Default",
+ "locator": "workspace://datastructures.py#L174-L181"
+ },
+ "to": {
+ "kind": "class",
+ "name": "DefaultPlaceholder",
+ "qualifiedName": "datastructures.py::DefaultPlaceholder",
+ "locator": "workspace://datastructures.py#L153-L168"
+ },
+ "locator": "workspace://datastructures.py#L181-L181",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_fastapi_call_setup",
+ "semanticKey": "edge:calls:applications.py:FastAPI.__init__:FastAPI.setup",
+ "capability": "calls",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "calls",
+ "from": { "kind": "method", "name": "__init__", "qualifiedName": "applications.py::FastAPI::__init__", "locator": "workspace://applications.py#L58-L1018" },
+ "to": { "kind": "method", "name": "setup", "qualifiedName": "applications.py::FastAPI::setup", "locator": "workspace://applications.py#L1105-L1158" },
+ "locator": "workspace://applications.py#L1018-L1018",
+ "resolution": "typed"
+ }
+ ],
+ "truthFingerprint": "sha256:99d0e6ed888ff5e20bb86d8d744b4149490de11723542ef89305eef3a4508782"
+}
diff --git a/evals/code-intelligence/truth/repositories/python/cirepo_python_pallets_flask.json b/evals/code-intelligence/truth/repositories/python/cirepo_python_pallets_flask.json
new file mode 100644
index 00000000..709084a2
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/python/cirepo_python_pallets_flask.json
@@ -0,0 +1,161 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_python_pallets_flask",
+ "language": "python",
+ "source": {
+ "class": "real-repo",
+ "ref": "corpus://cirepo_python_pallets_flask@36e4a824f340fdee7ed50937ba8e7f6bc7d17f81#src/flask"
+ },
+ "review": {
+ "status": "reviewed",
+ "method": "source-locator",
+ "reviewedBy": "memory-recall-maintainer",
+ "reviewedAt": "2026-07-17T19:14:11.000Z"
+ },
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "capabilityClaims": {
+ "parse": "partial",
+ "structure": "partial",
+ "imports": "partial",
+ "exports": "unmeasured",
+ "heritage": "partial",
+ "types": "partial",
+ "calls": "partial",
+ "config": "partial",
+ "frameworks": "unmeasured",
+ "impact": "unmeasured",
+ "processes": "unmeasured"
+ },
+ "items": [
+ {
+ "id": "cititem_flask_view",
+ "semanticKey": "node:class:views.py:View",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "class",
+ "name": "View",
+ "qualifiedName": "views.py::View",
+ "locator": "workspace://views.py#L16-L135"
+ },
+ {
+ "id": "cititem_flask_method_view",
+ "semanticKey": "node:class:views.py:MethodView",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "class",
+ "name": "MethodView",
+ "qualifiedName": "views.py::MethodView",
+ "locator": "workspace://views.py#L138-L191"
+ },
+ {
+ "id": "cititem_flask_dispatch_request",
+ "semanticKey": "node:method:views.py:MethodView:dispatch_request",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "method",
+ "name": "dispatch_request",
+ "qualifiedName": "views.py::MethodView::dispatch_request",
+ "locator": "workspace://views.py#L182-L191"
+ },
+ {
+ "id": "cititem_flask_config_package_marker",
+ "semanticKey": "node:configuration-resource:package-marker:flask",
+ "capability": "config",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "configuration_resource",
+ "name": "flask",
+ "qualifiedName": "__init__.py::flask",
+ "locator": "workspace://__init__.py#L1-L39"
+ },
+ {
+ "id": "cititem_flask_config_package_dependency",
+ "semanticKey": "edge:depends-on:package-marker:flask",
+ "capability": "config",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "depends_on",
+ "from": { "kind": "configuration_resource", "name": "flask", "qualifiedName": "__init__.py::flask", "locator": "workspace://__init__.py#L1-L39" },
+ "to": { "kind": "package", "name": "flask", "qualifiedName": "__init__.py::flask", "locator": "workspace://__init__.py#L1-L39" },
+ "locator": "workspace://__init__.py#L1-L39",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_flask_import_globals",
+ "semanticKey": "edge:imports:views.py:globals.py",
+ "capability": "imports",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "imports",
+ "from": {
+ "kind": "module",
+ "name": "views",
+ "qualifiedName": "views.py::views",
+ "locator": "workspace://views.py#L1-L192"
+ },
+ "to": {
+ "kind": "module",
+ "name": "globals",
+ "qualifiedName": "globals.py::globals",
+ "locator": "workspace://globals.py#L1-L78"
+ },
+ "locator": "workspace://views.py#L6-L6",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_flask_method_view_extends_view",
+ "semanticKey": "edge:extends:views.py:MethodView:View",
+ "capability": "heritage",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "extends",
+ "from": { "kind": "class", "name": "MethodView", "qualifiedName": "views.py::MethodView", "locator": "workspace://views.py#L138-L191" },
+ "to": { "kind": "class", "name": "View", "qualifiedName": "views.py::View", "locator": "workspace://views.py#L16-L135" },
+ "locator": "workspace://views.py#L138-L191",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_flask_construct_blueprint_setup_state",
+ "semanticKey": "edge:constructs:sansio/blueprints.py:Blueprint.make_setup_state:BlueprintSetupState",
+ "capability": "types",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "constructs",
+ "from": {
+ "kind": "method",
+ "name": "make_setup_state",
+ "qualifiedName": "sansio/blueprints.py::Blueprint::make_setup_state",
+ "locator": "workspace://sansio/blueprints.py#L246-L253"
+ },
+ "to": {
+ "kind": "class",
+ "name": "BlueprintSetupState",
+ "qualifiedName": "sansio/blueprints.py::BlueprintSetupState",
+ "locator": "workspace://sansio/blueprints.py#L34-L116"
+ },
+ "locator": "workspace://sansio/blueprints.py#L253-L253",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_flask_call_ensure_sync",
+ "semanticKey": "edge:calls:views.py:MethodView.dispatch_request:ensure_sync",
+ "capability": "calls",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "calls",
+ "from": { "kind": "method", "name": "dispatch_request", "qualifiedName": "views.py::MethodView::dispatch_request", "locator": "workspace://views.py#L182-L191" },
+ "to": { "kind": "function", "name": "ensure_sync", "qualifiedName": "views.py::ensure_sync", "locator": "workspace://views.py#L110-L110" },
+ "locator": "workspace://views.py#L191-L191",
+ "resolution": "unresolved"
+ }
+ ],
+ "truthFingerprint": "sha256:63c808d1d9eb974163850a1c0a3db7886cd9f4b7807e3ad510a03e4f16c1baca"
+}
diff --git a/evals/code-intelligence/truth/repositories/python/cirepo_python_psf_requests.json b/evals/code-intelligence/truth/repositories/python/cirepo_python_psf_requests.json
new file mode 100644
index 00000000..9cbfa5d6
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/python/cirepo_python_psf_requests.json
@@ -0,0 +1,162 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_python_psf_requests",
+ "language": "python",
+ "source": {
+ "class": "real-repo",
+ "ref": "corpus://cirepo_python_psf_requests@f361ead047be5cb873174218582f7d8b9fcd9f49#src/requests"
+ },
+ "review": {
+ "status": "reviewed",
+ "method": "source-locator",
+ "reviewedBy": "memory-recall-maintainer",
+ "reviewedAt": "2026-07-17T19:14:11.000Z"
+ },
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "capabilityClaims": {
+ "parse": "partial",
+ "structure": "partial",
+ "imports": "partial",
+ "exports": "unmeasured",
+ "heritage": "partial",
+ "types": "partial",
+ "calls": "partial",
+ "config": "partial",
+ "frameworks": "unmeasured",
+ "impact": "unmeasured",
+ "processes": "unmeasured"
+ },
+ "items": [
+ {
+ "id": "cititem_requests_case_insensitive_dict",
+ "semanticKey": "node:class:structures.py:CaseInsensitiveDict",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "class",
+ "name": "CaseInsensitiveDict",
+ "qualifiedName": "structures.py::CaseInsensitiveDict",
+ "locator": "workspace://structures.py#L20-L93"
+ },
+ {
+ "id": "cititem_requests_eq",
+ "semanticKey": "node:method:structures.py:CaseInsensitiveDict:__eq__",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "method",
+ "name": "__eq__",
+ "qualifiedName": "structures.py::CaseInsensitiveDict::__eq__",
+ "locator": "workspace://structures.py#L80-L86"
+ },
+ {
+ "id": "cititem_requests_lower_items",
+ "semanticKey": "node:method:structures.py:CaseInsensitiveDict:lower_items",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "method",
+ "name": "lower_items",
+ "qualifiedName": "structures.py::CaseInsensitiveDict::lower_items",
+ "locator": "workspace://structures.py#L76-L78"
+ },
+ {
+ "id": "cititem_requests_copy",
+ "semanticKey": "node:method:structures.py:CaseInsensitiveDict:copy",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "method",
+ "name": "copy",
+ "qualifiedName": "structures.py::CaseInsensitiveDict::copy",
+ "locator": "workspace://structures.py#L89-L90"
+ },
+ {
+ "id": "cititem_requests_config_package_marker",
+ "semanticKey": "node:configuration-resource:package-marker:requests",
+ "capability": "config",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "configuration_resource",
+ "name": "requests",
+ "qualifiedName": "__init__.py::requests",
+ "locator": "workspace://__init__.py#L1-L219"
+ },
+ {
+ "id": "cititem_requests_config_package_dependency",
+ "semanticKey": "edge:depends-on:package-marker:requests",
+ "capability": "config",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "depends_on",
+ "from": { "kind": "configuration_resource", "name": "requests", "qualifiedName": "__init__.py::requests", "locator": "workspace://__init__.py#L1-L219" },
+ "to": { "kind": "package", "name": "requests", "qualifiedName": "__init__.py::requests", "locator": "workspace://__init__.py#L1-L219" },
+ "locator": "workspace://__init__.py#L1-L219",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_requests_import_adapters",
+ "semanticKey": "edge:imports:sessions.py:adapters.py",
+ "capability": "imports",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "imports",
+ "from": {
+ "kind": "module",
+ "name": "sessions",
+ "qualifiedName": "sessions.py::sessions",
+ "locator": "workspace://sessions.py#L1-L921"
+ },
+ "to": {
+ "kind": "module",
+ "name": "adapters",
+ "qualifiedName": "adapters.py::adapters",
+ "locator": "workspace://adapters.py#L1-L749"
+ },
+ "locator": "workspace://sessions.py#L21-L21",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_requests_invalid_json_extends_request_exception",
+ "semanticKey": "edge:extends:exceptions.py:InvalidJSONError:RequestException",
+ "capability": "heritage",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "extends",
+ "from": { "kind": "class", "name": "InvalidJSONError", "qualifiedName": "exceptions.py::InvalidJSONError", "locator": "workspace://exceptions.py#L38-L39" },
+ "to": { "kind": "class", "name": "RequestException", "qualifiedName": "exceptions.py::RequestException", "locator": "workspace://exceptions.py#L20-L35" },
+ "locator": "workspace://exceptions.py#L38-L39",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_requests_call_lower_items",
+ "semanticKey": "edge:calls:structures.py:CaseInsensitiveDict.__eq__:lower_items",
+ "capability": "calls",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "calls",
+ "from": { "kind": "method", "name": "__eq__", "qualifiedName": "structures.py::CaseInsensitiveDict::__eq__", "locator": "workspace://structures.py#L80-L86" },
+ "to": { "kind": "method", "name": "lower_items", "qualifiedName": "structures.py::CaseInsensitiveDict::lower_items", "locator": "workspace://structures.py#L76-L78" },
+ "locator": "workspace://structures.py#L86-L86",
+ "resolution": "typed"
+ },
+ {
+ "id": "cititem_requests_construct_copy",
+ "semanticKey": "edge:constructs:structures.py:CaseInsensitiveDict.copy:CaseInsensitiveDict",
+ "capability": "types",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "constructs",
+ "from": { "kind": "method", "name": "copy", "qualifiedName": "structures.py::CaseInsensitiveDict::copy", "locator": "workspace://structures.py#L89-L90" },
+ "to": { "kind": "class", "name": "CaseInsensitiveDict", "qualifiedName": "structures.py::CaseInsensitiveDict", "locator": "workspace://structures.py#L20-L93" },
+ "locator": "workspace://structures.py#L90-L90",
+ "resolution": "exact"
+ }
+ ],
+ "truthFingerprint": "sha256:bc32d95b6d5d5fce20c0b6306fa876b681f85301425dc49f42471e98a89ce546"
+}
diff --git a/evals/code-intelligence/truth/repositories/ruby/cirepo_ruby_rails_rails.json b/evals/code-intelligence/truth/repositories/ruby/cirepo_ruby_rails_rails.json
new file mode 100644
index 00000000..c88aefdf
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/ruby/cirepo_ruby_rails_rails.json
@@ -0,0 +1,22 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_ruby_rails_rails",
+ "language": "ruby",
+ "source": { "class": "real-repo", "ref": "corpus://cirepo_ruby_rails_rails@f011d1218bdd77857f30ce3964eef186f0f14de5#actionpack/lib/action_dispatch/routing" },
+ "review": { "status": "reviewed", "method": "source-locator", "reviewedBy": "memory-recall-maintainer", "reviewedAt": "2026-07-16T00:00:00.000Z" },
+ "reviewCoverage": { "declarations": "sampled", "relationships": "sampled", "calls": "sampled" },
+ "capabilityClaims": { "parse": "partial", "structure": "partial", "imports": "partial", "exports": "unmeasured", "heritage": "partial", "types": "partial", "calls": "partial", "config": "unmeasured", "frameworks": "unmeasured", "impact": "unmeasured", "processes": "unmeasured" },
+ "items": [
+ { "id": "cititem_rails_route_set", "semanticKey": "node:class:route_set.rb:RouteSet", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "class", "name": "RouteSet", "qualifiedName": "route_set.rb::ActionDispatch::Routing::RouteSet", "locator": "workspace://route_set.rb#L17-L953" },
+ { "id": "cititem_rails_draw", "semanticKey": "node:method:route_set.rb:RouteSet:draw", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "draw", "qualifiedName": "route_set.rb::ActionDispatch::Routing::RouteSet::draw", "locator": "workspace://route_set.rb#L457-L462" },
+ { "id": "cititem_rails_recognize_path", "semanticKey": "node:method:route_set.rb:RouteSet:recognize_path", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "recognize_path", "qualifiedName": "route_set.rb::ActionDispatch::Routing::RouteSet::recognize_path", "locator": "workspace://route_set.rb#L909-L922" },
+ { "id": "cititem_rails_recognize_with_request", "semanticKey": "node:method:route_set.rb:RouteSet:recognize_path_with_request", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "recognize_path_with_request", "qualifiedName": "route_set.rb::ActionDispatch::Routing::RouteSet::recognize_path_with_request", "locator": "workspace://route_set.rb#L924-L952" },
+ { "id": "cititem_rails_defines_draw", "semanticKey": "edge:defines:RouteSet:draw", "capability": "structure", "expectation": "present", "recordKind": "edge", "kind": "defines", "from": { "kind": "class", "name": "RouteSet", "qualifiedName": "route_set.rb::ActionDispatch::Routing::RouteSet", "locator": "workspace://route_set.rb#L17-L953" }, "to": { "kind": "method", "name": "draw", "qualifiedName": "route_set.rb::ActionDispatch::Routing::RouteSet::draw", "locator": "workspace://route_set.rb#L457-L462" }, "locator": "workspace://route_set.rb#L457-L462", "resolution": "exact" },
+ { "id": "cititem_rails_defines_recognize", "semanticKey": "edge:defines:RouteSet:recognize_path", "capability": "structure", "expectation": "present", "recordKind": "edge", "kind": "defines", "from": { "kind": "class", "name": "RouteSet", "qualifiedName": "route_set.rb::ActionDispatch::Routing::RouteSet", "locator": "workspace://route_set.rb#L17-L953" }, "to": { "kind": "method", "name": "recognize_path", "qualifiedName": "route_set.rb::ActionDispatch::Routing::RouteSet::recognize_path", "locator": "workspace://route_set.rb#L909-L922" }, "locator": "workspace://route_set.rb#L909-L922", "resolution": "exact" },
+ { "id": "cititem_rails_call_recognize_request", "semanticKey": "edge:calls:RouteSet.recognize_path:recognize_path_with_request", "capability": "calls", "expectation": "present", "recordKind": "edge", "kind": "calls", "from": { "kind": "method", "name": "recognize_path", "qualifiedName": "route_set.rb::ActionDispatch::Routing::RouteSet::recognize_path", "locator": "workspace://route_set.rb#L909-L922" }, "to": { "kind": "method", "name": "recognize_path_with_request", "qualifiedName": "route_set.rb::ActionDispatch::Routing::RouteSet::recognize_path_with_request", "locator": "workspace://route_set.rb#L924-L952" }, "locator": "workspace://route_set.rb#L921-L921", "resolution": "typed" },
+ { "id": "cititem_rails_import_journey", "semanticKey": "edge:imports:route-set:action-dispatch-journey", "capability": "imports", "expectation": "present", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "route_set", "locator": "workspace://route_set.rb#L1-L956" }, "to": { "kind": "module", "name": "action_dispatch/journey", "locator": "workspace://route_set.rb#L5-L5" }, "locator": "workspace://route_set.rb#L5-L5", "resolution": "unresolved" },
+ { "id": "cititem_rails_import_journey_not_to_query", "semanticKey": "edge:imports:route-set:journey-line:not-to-query", "capability": "imports", "expectation": "absent", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "route_set", "locator": "workspace://route_set.rb#L1-L956" }, "to": { "kind": "module", "name": "active_support/core_ext/object/to_query", "locator": "workspace://route_set.rb#L6-L6" }, "locator": "workspace://route_set.rb#L5-L5", "resolution": "unresolved" }
+ ],
+ "truthFingerprint": "sha256:fd302c7ccc38357f0641348d4eb2efb47ff42a4879513f99264e665101d748f7"
+}
diff --git a/evals/code-intelligence/truth/repositories/ruby/cirepo_ruby_ruby_rake.json b/evals/code-intelligence/truth/repositories/ruby/cirepo_ruby_ruby_rake.json
new file mode 100644
index 00000000..f39c00b6
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/ruby/cirepo_ruby_ruby_rake.json
@@ -0,0 +1,22 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_ruby_ruby_rake",
+ "language": "ruby",
+ "source": { "class": "real-repo", "ref": "corpus://cirepo_ruby_ruby_rake@162f9f80cad8121c6427d3031a2a85e62e2d570d#lib/rake" },
+ "review": { "status": "reviewed", "method": "source-locator", "reviewedBy": "memory-recall-maintainer", "reviewedAt": "2026-07-16T00:00:00.000Z" },
+ "reviewCoverage": { "declarations": "sampled", "relationships": "sampled", "calls": "sampled" },
+ "capabilityClaims": { "parse": "partial", "structure": "partial", "imports": "partial", "exports": "unmeasured", "heritage": "partial", "types": "partial", "calls": "partial", "config": "unmeasured", "frameworks": "unmeasured", "impact": "unmeasured", "processes": "unmeasured" },
+ "items": [
+ { "id": "cititem_rake_task", "semanticKey": "node:class:task.rb:Task", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "class", "name": "Task", "qualifiedName": "task.rb::Rake::Task", "locator": "workspace://task.rb#L15-L433" },
+ { "id": "cititem_rake_enhance", "semanticKey": "node:method:task.rb:Task:enhance", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "enhance", "qualifiedName": "task.rb::Rake::Task::enhance", "locator": "workspace://task.rb#L115-L119" },
+ { "id": "cititem_rake_invoke", "semanticKey": "node:method:task.rb:Task:invoke", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "invoke", "qualifiedName": "task.rb::Rake::Task::invoke", "locator": "workspace://task.rb#L186-L189" },
+ { "id": "cititem_rake_invoke_chain", "semanticKey": "node:method:task.rb:Task:invoke_with_call_chain", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "invoke_with_call_chain", "qualifiedName": "task.rb::Rake::Task::invoke_with_call_chain", "locator": "workspace://task.rb#L197-L226" },
+ { "id": "cititem_rake_defines_invoke", "semanticKey": "edge:defines:Task:invoke", "capability": "structure", "expectation": "present", "recordKind": "edge", "kind": "defines", "from": { "kind": "class", "name": "Task", "qualifiedName": "task.rb::Rake::Task", "locator": "workspace://task.rb#L15-L433" }, "to": { "kind": "method", "name": "invoke", "qualifiedName": "task.rb::Rake::Task::invoke", "locator": "workspace://task.rb#L186-L189" }, "locator": "workspace://task.rb#L186-L189", "resolution": "exact" },
+ { "id": "cititem_rake_construct_arguments", "semanticKey": "edge:constructs:Task.invoke:TaskArguments", "capability": "types", "expectation": "present", "recordKind": "edge", "kind": "constructs", "from": { "kind": "method", "name": "invoke", "qualifiedName": "task.rb::Rake::Task::invoke", "locator": "workspace://task.rb#L186-L189" }, "to": { "kind": "class", "name": "TaskArguments", "qualifiedName": "task_arguments.rb::Rake::TaskArguments", "locator": "workspace://task_arguments.rb#L7-L110" }, "locator": "workspace://task.rb#L187-L187", "resolution": "exact" },
+ { "id": "cititem_rake_call_invoke_chain", "semanticKey": "edge:calls:Task.invoke:invoke_with_call_chain", "capability": "calls", "expectation": "present", "recordKind": "edge", "kind": "calls", "from": { "kind": "method", "name": "invoke", "qualifiedName": "task.rb::Rake::Task::invoke", "locator": "workspace://task.rb#L186-L189" }, "to": { "kind": "method", "name": "invoke_with_call_chain", "qualifiedName": "task.rb::Rake::Task::invoke_with_call_chain", "locator": "workspace://task.rb#L197-L226" }, "locator": "workspace://task.rb#L188-L188", "resolution": "typed" },
+ { "id": "cititem_rake_import_invocation_mixin", "semanticKey": "edge:imports:task:invocation-exception-mixin", "capability": "imports", "expectation": "present", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "task", "locator": "workspace://task.rb#L1-L435" }, "to": { "kind": "module", "name": "invocation_exception_mixin", "locator": "workspace://invocation_exception_mixin.rb#L1-L18" }, "locator": "workspace://task.rb#L2-L2", "resolution": "exact" },
+ { "id": "cititem_rake_import_invocation_mixin_not_task", "semanticKey": "edge:imports:task:invocation-line:not-task", "capability": "imports", "expectation": "absent", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "task", "locator": "workspace://task.rb#L1-L435" }, "to": { "kind": "module", "name": "task", "locator": "workspace://task.rb#L1-L435" }, "locator": "workspace://task.rb#L2-L2", "resolution": "exact" }
+ ],
+ "truthFingerprint": "sha256:eb8bccf85d193843d346a7a91b47adf2990778a5c6cc69c17d1200db8eadbbaa"
+}
diff --git a/evals/code-intelligence/truth/repositories/ruby/cirepo_ruby_sinatra_sinatra.json b/evals/code-intelligence/truth/repositories/ruby/cirepo_ruby_sinatra_sinatra.json
new file mode 100644
index 00000000..bf1c9c38
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/ruby/cirepo_ruby_sinatra_sinatra.json
@@ -0,0 +1,22 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_ruby_sinatra_sinatra",
+ "language": "ruby",
+ "source": { "class": "real-repo", "ref": "corpus://cirepo_ruby_sinatra_sinatra@0c88089be7668326ec5ed52671732f8565a16353#lib/sinatra" },
+ "review": { "status": "reviewed", "method": "source-locator", "reviewedBy": "memory-recall-maintainer", "reviewedAt": "2026-07-16T00:00:00.000Z" },
+ "reviewCoverage": { "declarations": "sampled", "relationships": "sampled", "calls": "sampled" },
+ "capabilityClaims": { "parse": "partial", "structure": "partial", "imports": "partial", "exports": "unmeasured", "heritage": "partial", "types": "partial", "calls": "partial", "config": "unmeasured", "frameworks": "unmeasured", "impact": "unmeasured", "processes": "unmeasured" },
+ "items": [
+ { "id": "cititem_sinatra_base", "semanticKey": "node:class:base.rb:Base", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "class", "name": "Base", "qualifiedName": "base.rb::Sinatra::Base", "locator": "workspace://base.rb#L971-L2076" },
+ { "id": "cititem_sinatra_application", "semanticKey": "node:class:base.rb:Application", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "class", "name": "Application", "qualifiedName": "base.rb::Sinatra::Application", "locator": "workspace://base.rb#L2085-L2096" },
+ { "id": "cititem_sinatra_dispatch", "semanticKey": "node:method:base.rb:Base:dispatch", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "dispatch", "qualifiedName": "base.rb::Sinatra::Base::dispatch", "locator": "workspace://base.rb#L1181-L1205" },
+ { "id": "cititem_sinatra_route", "semanticKey": "node:method:base.rb:Base:route", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "route", "qualifiedName": "base.rb::Sinatra::Base::route", "locator": "workspace://base.rb#L1064-L1086" },
+ { "id": "cititem_sinatra_defines_dispatch", "semanticKey": "edge:defines:Base:dispatch", "capability": "structure", "expectation": "present", "recordKind": "edge", "kind": "defines", "from": { "kind": "class", "name": "Base", "qualifiedName": "base.rb::Sinatra::Base", "locator": "workspace://base.rb#L971-L2076" }, "to": { "kind": "method", "name": "dispatch", "qualifiedName": "base.rb::Sinatra::Base::dispatch", "locator": "workspace://base.rb#L1181-L1205" }, "locator": "workspace://base.rb#L1181-L1205", "resolution": "exact" },
+ { "id": "cititem_sinatra_application_extends_base", "semanticKey": "edge:extends:Application:Base", "capability": "heritage", "expectation": "present", "recordKind": "edge", "kind": "extends", "from": { "kind": "class", "name": "Application", "qualifiedName": "base.rb::Sinatra::Application", "locator": "workspace://base.rb#L2085-L2096" }, "to": { "kind": "class", "name": "Base", "qualifiedName": "base.rb::Sinatra::Base", "locator": "workspace://base.rb#L971-L2076" }, "locator": "workspace://base.rb#L2085-L2096", "resolution": "exact" },
+ { "id": "cititem_sinatra_call_route", "semanticKey": "edge:calls:Base.dispatch:Base.route", "capability": "calls", "expectation": "present", "recordKind": "edge", "kind": "calls", "from": { "kind": "method", "name": "dispatch", "qualifiedName": "base.rb::Sinatra::Base::dispatch", "locator": "workspace://base.rb#L1181-L1205" }, "to": { "kind": "method", "name": "route", "qualifiedName": "base.rb::Sinatra::Base::route", "locator": "workspace://base.rb#L1064-L1086" }, "locator": "workspace://base.rb#L1195-L1195", "resolution": "typed" },
+ { "id": "cititem_sinatra_import_mustermann_sinatra", "semanticKey": "edge:imports:base:mustermann-sinatra", "capability": "imports", "expectation": "present", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "base", "locator": "workspace://base.rb#L1-L2174" }, "to": { "kind": "module", "name": "mustermann/sinatra", "locator": "workspace://base.rb#L13-L13" }, "locator": "workspace://base.rb#L13-L13", "resolution": "unresolved" },
+ { "id": "cititem_sinatra_import_mustermann_sinatra_not_regular", "semanticKey": "edge:imports:base:mustermann-sinatra-line:not-regular", "capability": "imports", "expectation": "absent", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "base", "locator": "workspace://base.rb#L1-L2174" }, "to": { "kind": "module", "name": "mustermann/regular", "locator": "workspace://base.rb#L14-L14" }, "locator": "workspace://base.rb#L13-L13", "resolution": "unresolved" }
+ ],
+ "truthFingerprint": "sha256:96efe6bbe69866dcef028724cf9aabbd9e8e13f4dcfd32bf8a017ebc72d6eeed"
+}
diff --git a/evals/code-intelligence/truth/repositories/rust/cirepo_rust_dtolnay_itoa.json b/evals/code-intelligence/truth/repositories/rust/cirepo_rust_dtolnay_itoa.json
new file mode 100644
index 00000000..b05e3267
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/rust/cirepo_rust_dtolnay_itoa.json
@@ -0,0 +1,165 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_rust_dtolnay_itoa",
+ "language": "rust",
+ "source": {
+ "class": "real-repo",
+ "ref": "corpus://cirepo_rust_dtolnay_itoa@1577ed901354d0d7448ac162328f9dbf5183124c#src"
+ },
+ "review": {
+ "status": "reviewed",
+ "method": "source-locator",
+ "reviewedBy": "memory-recall-maintainer",
+ "reviewedAt": "2026-07-16T00:00:00.000Z"
+ },
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "capabilityClaims": {
+ "parse": "partial",
+ "structure": "partial",
+ "imports": "partial",
+ "exports": "partial",
+ "heritage": "partial",
+ "types": "partial",
+ "calls": "partial",
+ "config": "unmeasured",
+ "frameworks": "unmeasured",
+ "impact": "unmeasured",
+ "processes": "unmeasured"
+ },
+ "items": [
+ {
+ "id": "cititem_itoa_buffer",
+ "semanticKey": "node:struct:lib.rs:Buffer",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "struct",
+ "name": "Buffer",
+ "qualifiedName": "lib.rs::Buffer",
+ "locator": "workspace://lib.rs#L72-L74"
+ },
+ {
+ "id": "cititem_itoa_integer",
+ "semanticKey": "node:trait:lib.rs:Integer",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "trait",
+ "name": "Integer",
+ "qualifiedName": "lib.rs::Integer",
+ "locator": "workspace://lib.rs#L119-L123"
+ },
+ {
+ "id": "cititem_itoa_default",
+ "semanticKey": "node:method:lib.rs:Buffer:default",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "method",
+ "name": "default",
+ "qualifiedName": "lib.rs::Buffer::default",
+ "locator": "workspace://lib.rs#L78-L80"
+ },
+ {
+ "id": "cititem_itoa_format",
+ "semanticKey": "node:method:lib.rs:Buffer:format",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "method",
+ "name": "format",
+ "qualifiedName": "lib.rs::Buffer::format",
+ "locator": "workspace://lib.rs#L106-L113"
+ },
+ {
+ "id": "cititem_itoa_implements_default",
+ "semanticKey": "edge:implements:lib.rs:Buffer:Default",
+ "capability": "heritage",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "implements",
+ "from": { "kind": "struct", "name": "Buffer", "qualifiedName": "lib.rs::Buffer", "locator": "workspace://lib.rs#L72-L74" },
+ "to": { "kind": "interface", "name": "Default", "qualifiedName": "lib.rs::Default", "locator": "workspace://lib.rs#L76-L81" },
+ "locator": "workspace://lib.rs#L76-L81",
+ "resolution": "unresolved"
+ },
+ {
+ "id": "cititem_itoa_construct_buffer",
+ "semanticKey": "edge:constructs:lib.rs:Buffer.default:Buffer",
+ "capability": "types",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "constructs",
+ "from": { "kind": "method", "name": "default", "qualifiedName": "lib.rs::Buffer::default", "locator": "workspace://lib.rs#L78-L80" },
+ "to": { "kind": "struct", "name": "Buffer", "qualifiedName": "lib.rs::Buffer", "locator": "workspace://lib.rs#L72-L74" },
+ "locator": "workspace://lib.rs#L79-L79",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_itoa_call_write",
+ "semanticKey": "edge:calls:lib.rs:Buffer.format:write",
+ "capability": "calls",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "calls",
+ "from": { "kind": "method", "name": "format", "qualifiedName": "lib.rs::Buffer::format", "locator": "workspace://lib.rs#L106-L113" },
+ "to": { "kind": "function", "name": "write", "qualifiedName": "lib.rs::write", "locator": "workspace://lib.rs#L108-L108" },
+ "locator": "workspace://lib.rs#L108-L108",
+ "resolution": "unresolved"
+ },
+ {
+ "id": "cititem_itoa_import_core_hint",
+ "semanticKey": "edge:imports:lib.rs:core-hint",
+ "capability": "imports",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "imports",
+ "from": { "kind": "module", "name": "lib", "qualifiedName": "lib.rs::lib", "locator": "workspace://lib.rs#L1-L467" },
+ "to": { "kind": "module", "name": "core::hint", "qualifiedName": "lib.rs::core::hint", "locator": "workspace://lib.rs#L56-L56" },
+ "locator": "workspace://lib.rs#L56-L56",
+ "resolution": "unresolved"
+ },
+ {
+ "id": "cititem_itoa_import_core_hint_not_str",
+ "semanticKey": "edge:imports:lib.rs:core-hint-line:not-core-str",
+ "capability": "imports",
+ "expectation": "absent",
+ "recordKind": "edge",
+ "kind": "imports",
+ "from": { "kind": "module", "name": "lib", "qualifiedName": "lib.rs::lib", "locator": "workspace://lib.rs#L1-L467" },
+ "to": { "kind": "module", "name": "core::str", "qualifiedName": "lib.rs::core::str", "locator": "workspace://lib.rs#L58-L58" },
+ "locator": "workspace://lib.rs#L56-L56",
+ "resolution": "unresolved"
+ },
+ {
+ "id": "cititem_itoa_export_buffer",
+ "semanticKey": "edge:exports:lib.rs:Buffer",
+ "capability": "exports",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "exports",
+ "from": { "kind": "module", "name": "lib", "qualifiedName": "lib.rs::lib", "locator": "workspace://lib.rs#L1-L467" },
+ "to": { "kind": "struct", "name": "Buffer", "qualifiedName": "lib.rs::Buffer", "locator": "workspace://lib.rs#L72-L74" },
+ "locator": "workspace://lib.rs#L72-L74",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_itoa_private_divmod100_not_exported",
+ "semanticKey": "edge:exports:lib.rs:divmod100:absent",
+ "capability": "exports",
+ "expectation": "absent",
+ "recordKind": "edge",
+ "kind": "exports",
+ "from": { "kind": "module", "name": "lib", "qualifiedName": "lib.rs::lib", "locator": "workspace://lib.rs#L1-L467" },
+ "to": { "kind": "function", "name": "divmod100", "qualifiedName": "lib.rs::divmod100", "locator": "workspace://lib.rs#L231-L237" },
+ "locator": "workspace://lib.rs#L231-L237",
+ "resolution": "exact"
+ }
+ ],
+ "truthFingerprint": "sha256:d61005dba5e81aed36c3840c12499c91f3bd092974163f464eda96a2a136ad41"
+}
diff --git a/evals/code-intelligence/truth/repositories/rust/cirepo_rust_serde_rs_json.json b/evals/code-intelligence/truth/repositories/rust/cirepo_rust_serde_rs_json.json
new file mode 100644
index 00000000..12588ec1
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/rust/cirepo_rust_serde_rs_json.json
@@ -0,0 +1,153 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_rust_serde_rs_json",
+ "language": "rust",
+ "source": {
+ "class": "real-repo",
+ "ref": "corpus://cirepo_rust_serde_rs_json@827a315bf2198558f0325b07bcc1e2cd973aba2f#src"
+ },
+ "review": {
+ "status": "reviewed",
+ "method": "source-locator",
+ "reviewedBy": "memory-recall-maintainer",
+ "reviewedAt": "2026-07-16T00:00:00.000Z"
+ },
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "capabilityClaims": {
+ "parse": "partial",
+ "structure": "partial",
+ "imports": "partial",
+ "exports": "partial",
+ "heritage": "unmeasured",
+ "types": "partial",
+ "calls": "partial",
+ "config": "unmeasured",
+ "frameworks": "unmeasured",
+ "impact": "unmeasured",
+ "processes": "unmeasured"
+ },
+ "items": [
+ {
+ "id": "cititem_serde_json_map",
+ "semanticKey": "node:struct:map.rs:Map",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "struct",
+ "name": "Map",
+ "qualifiedName": "map.rs::Map",
+ "locator": "workspace://map.rs#L29-L31"
+ },
+ {
+ "id": "cititem_serde_json_map_new",
+ "semanticKey": "node:method:map.rs:Map:new",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "method",
+ "name": "new",
+ "qualifiedName": "map.rs::Map::new",
+ "locator": "workspace://map.rs#L41-L45"
+ },
+ {
+ "id": "cititem_serde_json_map_clear",
+ "semanticKey": "node:method:map.rs:Map:clear",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "method",
+ "name": "clear",
+ "qualifiedName": "map.rs::Map::clear",
+ "locator": "workspace://map.rs#L64-L66"
+ },
+ {
+ "id": "cititem_serde_json_map_get",
+ "semanticKey": "node:method:map.rs:Map:get",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "method",
+ "name": "get",
+ "qualifiedName": "map.rs::Map::get",
+ "locator": "workspace://map.rs#L73-L79"
+ },
+ {
+ "id": "cititem_serde_json_construct_map_impl",
+ "semanticKey": "edge:constructs:map.rs:Map.new:MapImpl",
+ "capability": "types",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "constructs",
+ "from": { "kind": "method", "name": "new", "qualifiedName": "map.rs::Map::new", "locator": "workspace://map.rs#L41-L45" },
+ "to": { "kind": "class", "name": "MapImpl", "qualifiedName": "map.rs::MapImpl", "locator": "workspace://map.rs#L43-L43" },
+ "locator": "workspace://map.rs#L43-L43",
+ "resolution": "unresolved"
+ },
+ {
+ "id": "cititem_serde_json_call_clear",
+ "semanticKey": "edge:calls:map.rs:Map.clear:clear",
+ "capability": "calls",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "calls",
+ "from": { "kind": "method", "name": "clear", "qualifiedName": "map.rs::Map::clear", "locator": "workspace://map.rs#L64-L66" },
+ "to": { "kind": "function", "name": "clear", "qualifiedName": "map.rs::clear", "locator": "workspace://map.rs#L65-L65" },
+ "locator": "workspace://map.rs#L65-L65",
+ "resolution": "unresolved"
+ },
+ {
+ "id": "cititem_serde_json_import_core_ops",
+ "semanticKey": "edge:imports:value/index.rs:core-ops",
+ "capability": "imports",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "imports",
+ "from": { "kind": "module", "name": "value_index", "qualifiedName": "value/index.rs::value_index", "locator": "workspace://value/index.rs#L1-L259" },
+ "to": { "kind": "module", "name": "core::ops", "qualifiedName": "lexical/num.rs::core::ops", "locator": "workspace://lexical/num.rs#L5-L5" },
+ "locator": "workspace://value/index.rs#L6-L6",
+ "resolution": "unresolved"
+ },
+ {
+ "id": "cititem_serde_json_import_core_ops_not_fmt",
+ "semanticKey": "edge:imports:value/index.rs:core-ops-line:not-core-fmt",
+ "capability": "imports",
+ "expectation": "absent",
+ "recordKind": "edge",
+ "kind": "imports",
+ "from": { "kind": "module", "name": "value_index", "qualifiedName": "value/index.rs::value_index", "locator": "workspace://value/index.rs#L1-L259" },
+ "to": { "kind": "module", "name": "core::fmt", "qualifiedName": "error.rs::core::fmt", "locator": "workspace://error.rs#L6-L6" },
+ "locator": "workspace://value/index.rs#L6-L6",
+ "resolution": "unresolved"
+ },
+ {
+ "id": "cititem_serde_json_export_map",
+ "semanticKey": "edge:exports:map.rs:Map",
+ "capability": "exports",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "exports",
+ "from": { "kind": "module", "name": "map", "qualifiedName": "map.rs::map", "locator": "workspace://map.rs#L1-L1182" },
+ "to": { "kind": "struct", "name": "Map", "qualifiedName": "map.rs::Map", "locator": "workspace://map.rs#L29-L31" },
+ "locator": "workspace://map.rs#L29-L31",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_serde_json_private_is_escape_not_exported",
+ "semanticKey": "edge:exports:read.rs:is_escape:absent",
+ "capability": "exports",
+ "expectation": "absent",
+ "recordKind": "edge",
+ "kind": "exports",
+ "from": { "kind": "module", "name": "read", "qualifiedName": "read.rs::read", "locator": "workspace://read.rs#L1-L1090" },
+ "to": { "kind": "function", "name": "is_escape", "qualifiedName": "read.rs::is_escape", "locator": "workspace://read.rs#L836-L838" },
+ "locator": "workspace://read.rs#L836-L838",
+ "resolution": "exact"
+ }
+ ],
+ "truthFingerprint": "sha256:6dfa8297997f6ba368b803a856d459880cd643346e3ca96fabaa778da4949b0c"
+}
diff --git a/evals/code-intelligence/truth/repositories/rust/cirepo_rust_tokio_rs_axum.json b/evals/code-intelligence/truth/repositories/rust/cirepo_rust_tokio_rs_axum.json
new file mode 100644
index 00000000..955d9c46
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/rust/cirepo_rust_tokio_rs_axum.json
@@ -0,0 +1,165 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_rust_tokio_rs_axum",
+ "language": "rust",
+ "source": {
+ "class": "real-repo",
+ "ref": "corpus://cirepo_rust_tokio_rs_axum@98aea470f9190fad1915897166ac0f149522011a#axum/src"
+ },
+ "review": {
+ "status": "reviewed",
+ "method": "source-locator",
+ "reviewedBy": "memory-recall-maintainer",
+ "reviewedAt": "2026-07-16T00:00:00.000Z"
+ },
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "capabilityClaims": {
+ "parse": "partial",
+ "structure": "partial",
+ "imports": "partial",
+ "exports": "partial",
+ "heritage": "unmeasured",
+ "types": "partial",
+ "calls": "partial",
+ "config": "unmeasured",
+ "frameworks": "unmeasured",
+ "impact": "unmeasured",
+ "processes": "unmeasured"
+ },
+ "items": [
+ {
+ "id": "cititem_axum_router",
+ "semanticKey": "node:struct:routing/mod.rs:Router",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "struct",
+ "name": "Router",
+ "qualifiedName": "routing/mod.rs::Router",
+ "locator": "workspace://routing/mod.rs#L86-L88"
+ },
+ {
+ "id": "cititem_axum_router_inner",
+ "semanticKey": "node:struct:routing/mod.rs:RouterInner",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "struct",
+ "name": "RouterInner",
+ "qualifiedName": "routing/mod.rs::RouterInner",
+ "locator": "workspace://routing/mod.rs#L98-L102"
+ },
+ {
+ "id": "cititem_axum_router_default",
+ "semanticKey": "node:method:routing/mod.rs:Router:default",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "method",
+ "name": "default",
+ "qualifiedName": "routing/mod.rs::Router::default",
+ "locator": "workspace://routing/mod.rs#L108-L110"
+ },
+ {
+ "id": "cititem_axum_into_make_service",
+ "semanticKey": "node:method:routing/mod.rs:Router:into_make_service",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "method",
+ "name": "into_make_service",
+ "qualifiedName": "routing/mod.rs::Router::into_make_service",
+ "locator": "workspace://routing/mod.rs#L558-L562"
+ },
+ {
+ "id": "cititem_axum_construct_router",
+ "semanticKey": "edge:constructs:routing/mod.rs:Router.default:Router",
+ "capability": "types",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "constructs",
+ "from": { "kind": "method", "name": "default", "qualifiedName": "routing/mod.rs::Router::default", "locator": "workspace://routing/mod.rs#L108-L110" },
+ "to": { "kind": "struct", "name": "Router", "qualifiedName": "routing/mod.rs::Router", "locator": "workspace://routing/mod.rs#L86-L88" },
+ "locator": "workspace://routing/mod.rs#L109-L109",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_axum_construct_into_make_service",
+ "semanticKey": "edge:constructs:routing/mod.rs:Router.into_make_service:IntoMakeService",
+ "capability": "types",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "constructs",
+ "from": { "kind": "method", "name": "into_make_service", "qualifiedName": "routing/mod.rs::Router::into_make_service", "locator": "workspace://routing/mod.rs#L558-L562" },
+ "to": { "kind": "struct", "name": "IntoMakeService", "qualifiedName": "routing/into_make_service.rs::IntoMakeService", "locator": "workspace://routing/into_make_service.rs#L12-L14" },
+ "locator": "workspace://routing/mod.rs#L561-L561",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_axum_call_with_state",
+ "semanticKey": "edge:calls:routing/mod.rs:Router.into_make_service:with_state",
+ "capability": "calls",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "calls",
+ "from": { "kind": "method", "name": "into_make_service", "qualifiedName": "routing/mod.rs::Router::into_make_service", "locator": "workspace://routing/mod.rs#L558-L562" },
+ "to": { "kind": "function", "name": "with_state", "qualifiedName": "routing/mod.rs::with_state", "locator": "workspace://routing/mod.rs#L561-L561" },
+ "locator": "workspace://routing/mod.rs#L561-L561",
+ "resolution": "unresolved"
+ },
+ {
+ "id": "cititem_axum_import_tower_layer",
+ "semanticKey": "edge:imports:routing/route.rs:tower-layer",
+ "capability": "imports",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "imports",
+ "from": { "kind": "module", "name": "routing_route", "qualifiedName": "routing/route.rs::routing_route", "locator": "workspace://routing/route.rs#L1-L309" },
+ "to": { "kind": "module", "name": "tower_layer::Layer", "qualifiedName": "error_handling/mod.rs::tower_layer::Layer", "locator": "workspace://error_handling/mod.rs#L16-L16" },
+ "locator": "workspace://routing/route.rs#L24-L24",
+ "resolution": "unresolved"
+ },
+ {
+ "id": "cititem_axum_import_tower_layer_not_pin_project",
+ "semanticKey": "edge:imports:routing/route.rs:tower-layer-line:not-pin-project",
+ "capability": "imports",
+ "expectation": "absent",
+ "recordKind": "edge",
+ "kind": "imports",
+ "from": { "kind": "module", "name": "routing_route", "qualifiedName": "routing/route.rs::routing_route", "locator": "workspace://routing/route.rs#L1-L309" },
+ "to": { "kind": "module", "name": "pin_project_lite::pin_project", "qualifiedName": "error_handling/mod.rs::pin_project_lite::pin_project", "locator": "workspace://error_handling/mod.rs#L228-L228" },
+ "locator": "workspace://routing/route.rs#L24-L24",
+ "resolution": "unresolved"
+ },
+ {
+ "id": "cititem_axum_export_router",
+ "semanticKey": "edge:exports:routing/mod.rs:Router",
+ "capability": "exports",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "exports",
+ "from": { "kind": "module", "name": "routing_mod", "qualifiedName": "routing/mod.rs::routing_mod", "locator": "workspace://routing/mod.rs#L1-L841" },
+ "to": { "kind": "struct", "name": "Router", "qualifiedName": "routing/mod.rs::Router", "locator": "workspace://routing/mod.rs#L86-L88" },
+ "locator": "workspace://routing/mod.rs#L86-L88",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_axum_private_router_inner_not_exported",
+ "semanticKey": "edge:exports:routing/mod.rs:RouterInner:absent",
+ "capability": "exports",
+ "expectation": "absent",
+ "recordKind": "edge",
+ "kind": "exports",
+ "from": { "kind": "module", "name": "routing_mod", "qualifiedName": "routing/mod.rs::routing_mod", "locator": "workspace://routing/mod.rs#L1-L841" },
+ "to": { "kind": "struct", "name": "RouterInner", "qualifiedName": "routing/mod.rs::RouterInner", "locator": "workspace://routing/mod.rs#L98-L102" },
+ "locator": "workspace://routing/mod.rs#L98-L102",
+ "resolution": "exact"
+ }
+ ],
+ "truthFingerprint": "sha256:8402c959c84484593c65a17e22500ede31e7acc6cd672bc5af3f05e7bdab92a4"
+}
diff --git a/evals/code-intelligence/truth/repositories/swift/cirepo_swift_alamofire_alamofire.json b/evals/code-intelligence/truth/repositories/swift/cirepo_swift_alamofire_alamofire.json
new file mode 100644
index 00000000..da33ac8a
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/swift/cirepo_swift_alamofire_alamofire.json
@@ -0,0 +1,17 @@
+{
+ "schemaVersion": "1.0.0", "truthVersion": "memory-recall-code-intelligence-truth-1", "id": "citruth_swift_alamofire_aferror", "language": "swift",
+ "source": { "class": "real-repo", "ref": "corpus://cirepo_swift_alamofire_alamofire@903c53c710d1cbbac0b4b9c2527aefb791e1fee3#Source/Core" },
+ "review": { "status": "reviewed", "method": "source-locator", "reviewedBy": "memory-recall-maintainer", "reviewedAt": "2026-07-16T00:00:00.000Z" },
+ "reviewCoverage": { "declarations": "sampled", "relationships": "sampled", "calls": "sampled" },
+ "capabilityClaims": { "parse": "partial", "structure": "partial", "imports": "partial", "exports": "unmeasured", "heritage": "partial", "types": "partial", "calls": "unmeasured", "config": "unmeasured", "frameworks": "unmeasured", "impact": "unmeasured", "processes": "unmeasured" },
+ "items": [
+ { "id": "cititem_alamofire_aferror", "semanticKey": "node:enum:AFError", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "enum", "name": "AFError", "qualifiedName": "AFError.swift::AFError", "locator": "workspace://AFError.swift#L33-L230" },
+ { "id": "cititem_alamofire_multipart_reason", "semanticKey": "node:enum:MultipartEncodingFailureReason", "capability": "types", "expectation": "present", "recordKind": "node", "kind": "enum", "name": "MultipartEncodingFailureReason", "qualifiedName": "AFError.swift::AFError::MultipartEncodingFailureReason", "locator": "workspace://AFError.swift#L35-L62" },
+ { "id": "cititem_alamofire_stream_length", "semanticKey": "node:struct:UnexpectedInputStreamLength", "capability": "types", "expectation": "present", "recordKind": "node", "kind": "struct", "name": "UnexpectedInputStreamLength", "qualifiedName": "AFError.swift::AFError::UnexpectedInputStreamLength", "locator": "workspace://AFError.swift#L66-L71" },
+ { "id": "cititem_alamofire_aferror_extension", "semanticKey": "node:extension:AFError", "capability": "heritage", "expectation": "present", "recordKind": "node", "kind": "extension", "name": "AFError", "qualifiedName": "AFError.swift::AFError", "locator": "workspace://AFError.swift#L254-L364" },
+ { "id": "cititem_alamofire_extends_aferror", "semanticKey": "edge:extends-type:AFError-extension", "capability": "heritage", "expectation": "present", "recordKind": "edge", "kind": "extends_type", "from": { "kind": "extension", "name": "AFError", "locator": "workspace://AFError.swift#L254-L364" }, "to": { "kind": "enum", "name": "AFError", "locator": "workspace://AFError.swift#L33-L230" }, "locator": "workspace://AFError.swift#L254-L364", "resolution": "exact" },
+ { "id": "cititem_alamofire_import_foundation", "semanticKey": "edge:imports:AFError:Foundation", "capability": "imports", "expectation": "present", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "AFError", "locator": "workspace://AFError.swift#L1-L875" }, "to": { "kind": "module", "name": "Foundation", "locator": "workspace://AFError.swift#L25-L25" }, "locator": "workspace://AFError.swift#L25-L25", "resolution": "unresolved" },
+ { "id": "cititem_alamofire_import_foundation_not_self", "semanticKey": "edge:imports:AFError:Foundation-line:not-self", "capability": "imports", "expectation": "absent", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "AFError", "locator": "workspace://AFError.swift#L1-L875" }, "to": { "kind": "module", "name": "AFError", "locator": "workspace://AFError.swift#L1-L875" }, "locator": "workspace://AFError.swift#L25-L25", "resolution": "unresolved" }
+ ],
+ "truthFingerprint": "sha256:a317d1c5f9620ff043ac2f3d831d2b529f9f80de2ba3522dc86a50b3cd11138b"
+}
diff --git a/evals/code-intelligence/truth/repositories/swift/cirepo_swift_apple_swift_nio.json b/evals/code-intelligence/truth/repositories/swift/cirepo_swift_apple_swift_nio.json
new file mode 100644
index 00000000..5f70c38e
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/swift/cirepo_swift_apple_swift_nio.json
@@ -0,0 +1,17 @@
+{
+ "schemaVersion": "1.0.0", "truthVersion": "memory-recall-code-intelligence-truth-1", "id": "citruth_swift_nio_addressed_envelope", "language": "swift",
+ "source": { "class": "real-repo", "ref": "corpus://cirepo_swift_apple_swift_nio@0b18836bd8b0162e7e17a995a3fbee20ed8f3b2b#Sources/NIOCore" },
+ "review": { "status": "reviewed", "method": "source-locator", "reviewedBy": "memory-recall-maintainer", "reviewedAt": "2026-07-16T00:00:00.000Z" },
+ "reviewCoverage": { "declarations": "sampled", "relationships": "sampled", "calls": "sampled" },
+ "capabilityClaims": { "parse": "partial", "structure": "partial", "imports": "partial", "exports": "unmeasured", "heritage": "partial", "types": "partial", "calls": "unmeasured", "config": "unmeasured", "frameworks": "unmeasured", "impact": "unmeasured", "processes": "unmeasured" },
+ "items": [
+ { "id": "cititem_nio_addressed_envelope", "semanticKey": "node:struct:AddressedEnvelope", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "struct", "name": "AddressedEnvelope", "qualifiedName": "AddressedEnvelope.swift::AddressedEnvelope", "locator": "workspace://AddressedEnvelope.swift#L20-L75" },
+ { "id": "cititem_nio_envelope_metadata", "semanticKey": "node:struct:AddressedEnvelope-Metadata", "capability": "types", "expectation": "present", "recordKind": "node", "kind": "struct", "name": "Metadata", "qualifiedName": "AddressedEnvelope.swift::AddressedEnvelope::Metadata", "locator": "workspace://AddressedEnvelope.swift#L38-L74" },
+ { "id": "cititem_nio_ecn_state", "semanticKey": "node:enum:NIOExplicitCongestionNotificationState", "capability": "types", "expectation": "present", "recordKind": "node", "kind": "enum", "name": "NIOExplicitCongestionNotificationState", "qualifiedName": "AddressedEnvelope.swift::NIOExplicitCongestionNotificationState", "locator": "workspace://AddressedEnvelope.swift#L90-L99" },
+ { "id": "cititem_nio_addressed_extension", "semanticKey": "node:extension:AddressedEnvelope", "capability": "heritage", "expectation": "present", "recordKind": "node", "kind": "extension", "name": "AddressedEnvelope", "qualifiedName": "AddressedEnvelope.swift::AddressedEnvelope", "locator": "workspace://AddressedEnvelope.swift#L77-L81" },
+ { "id": "cititem_nio_extends_envelope", "semanticKey": "edge:extends-type:AddressedEnvelope", "capability": "heritage", "expectation": "present", "recordKind": "edge", "kind": "extends_type", "from": { "kind": "extension", "name": "AddressedEnvelope", "locator": "workspace://AddressedEnvelope.swift#L77-L81" }, "to": { "kind": "struct", "name": "AddressedEnvelope", "locator": "workspace://AddressedEnvelope.swift#L20-L75" }, "locator": "workspace://AddressedEnvelope.swift#L77-L81", "resolution": "exact" },
+ { "id": "cititem_nio_import_af_inet", "semanticKey": "edge:imports:BSDSocketAPI:WinSDK.AF_INET", "capability": "imports", "expectation": "present", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "BSDSocketAPI", "locator": "workspace://BSDSocketAPI.swift#L1-L626" }, "to": { "kind": "module", "name": "WinSDK.AF_INET", "locator": "workspace://BSDSocketAPI.swift#L36-L36" }, "locator": "workspace://BSDSocketAPI.swift#L36-L36", "resolution": "unresolved" },
+ { "id": "cititem_nio_import_af_inet_not_inet6", "semanticKey": "edge:imports:BSDSocketAPI:AF-INET-line:not-INET6", "capability": "imports", "expectation": "absent", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "BSDSocketAPI", "locator": "workspace://BSDSocketAPI.swift#L1-L626" }, "to": { "kind": "module", "name": "WinSDK.AF_INET6", "locator": "workspace://BSDSocketAPI.swift#L37-L37" }, "locator": "workspace://BSDSocketAPI.swift#L36-L36", "resolution": "unresolved" }
+ ],
+ "truthFingerprint": "sha256:87ec09c54b0b592e0c1ca64a4ea3c73189c9b4282afad624838d114636fbbd2f"
+}
diff --git a/evals/code-intelligence/truth/repositories/swift/cirepo_swift_vapor_vapor.json b/evals/code-intelligence/truth/repositories/swift/cirepo_swift_vapor_vapor.json
new file mode 100644
index 00000000..08ef960c
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/swift/cirepo_swift_vapor_vapor.json
@@ -0,0 +1,16 @@
+{
+ "schemaVersion": "1.0.0", "truthVersion": "memory-recall-code-intelligence-truth-1", "id": "citruth_swift_vapor_parameters", "language": "swift",
+ "source": { "class": "real-repo", "ref": "corpus://cirepo_swift_vapor_vapor@059b578bde8a037a42543914b8e14041fbec01e7#Sources/Vapor/Routing" },
+ "review": { "status": "reviewed", "method": "source-locator", "reviewedBy": "memory-recall-maintainer", "reviewedAt": "2026-07-16T00:00:00.000Z" },
+ "reviewCoverage": { "declarations": "sampled", "relationships": "sampled", "calls": "sampled" },
+ "capabilityClaims": { "parse": "partial", "structure": "partial", "imports": "partial", "exports": "unmeasured", "heritage": "partial", "types": "partial", "calls": "unmeasured", "config": "unmeasured", "frameworks": "unmeasured", "impact": "unmeasured", "processes": "unmeasured" },
+ "items": [
+ { "id": "cititem_vapor_parameters_extension", "semanticKey": "node:extension:Parameters", "capability": "heritage", "expectation": "present", "recordKind": "node", "kind": "extension", "name": "Parameters", "qualifiedName": "Parameters+Require.swift::Parameters", "locator": "workspace://Parameters+Require.swift#L5-L38" },
+ { "id": "cititem_vapor_require_string", "semanticKey": "node:method:Parameters-require-string", "capability": "structure", "expectation": "present", "recordKind": "node", "kind": "method", "name": "require(String)", "qualifiedName": "Parameters+Require.swift::Parameters::require(String)", "locator": "workspace://Parameters+Require.swift#L12-L14" },
+ { "id": "cititem_vapor_require_type", "semanticKey": "node:method:Parameters-require-type", "capability": "types", "expectation": "present", "recordKind": "node", "kind": "method", "name": "require(String,Type)", "qualifiedName": "Parameters+Require.swift::Parameters::require(String,Type)", "locator": "workspace://Parameters+Require.swift#L23-L37" },
+ { "id": "cititem_vapor_defines_require", "semanticKey": "edge:defines:Parameters:require-string", "capability": "structure", "expectation": "present", "recordKind": "edge", "kind": "defines", "from": { "kind": "extension", "name": "Parameters", "locator": "workspace://Parameters+Require.swift#L5-L38" }, "to": { "kind": "method", "name": "require(String)", "locator": "workspace://Parameters+Require.swift#L12-L14" }, "locator": "workspace://Parameters+Require.swift#L12-L14", "resolution": "exact" },
+ { "id": "cititem_vapor_import_routingkit", "semanticKey": "edge:imports:ParametersRequire:RoutingKit", "capability": "imports", "expectation": "present", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "ParametersRequire", "locator": "workspace://Parameters+Require.swift#L1-L39" }, "to": { "kind": "module", "name": "RoutingKit", "locator": "workspace://Application+routesASCIITable.swift#L1-L1" }, "locator": "workspace://Parameters+Require.swift#L1-L1", "resolution": "unresolved" },
+ { "id": "cititem_vapor_import_routingkit_not_http_types", "semanticKey": "edge:imports:ParametersRequire:RoutingKit-line:not-HTTPTypes", "capability": "imports", "expectation": "absent", "recordKind": "edge", "kind": "imports", "from": { "kind": "module", "name": "ParametersRequire", "locator": "workspace://Parameters+Require.swift#L1-L39" }, "to": { "kind": "module", "name": "HTTPTypes", "locator": "workspace://Application+routesASCIITable.swift#L2-L2" }, "locator": "workspace://Parameters+Require.swift#L1-L1", "resolution": "unresolved" }
+ ],
+ "truthFingerprint": "sha256:9dabdd223ab8895d8681080e278d1cef3067fcde4e237a82935a1c5b01efa4ac"
+}
diff --git a/evals/code-intelligence/truth/repositories/typescript/cirepo_typescript_microsoft_typescript.json b/evals/code-intelligence/truth/repositories/typescript/cirepo_typescript_microsoft_typescript.json
new file mode 100644
index 00000000..69a4133d
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/typescript/cirepo_typescript_microsoft_typescript.json
@@ -0,0 +1,157 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_typescript_microsoft_typescript",
+ "language": "typescript",
+ "source": {
+ "class": "real-repo",
+ "ref": "corpus://cirepo_typescript_microsoft_typescript@637d5746b70257028fb95aad32ddec6b26ab0a14#src/testRunner/unittests/helpers"
+ },
+ "review": {
+ "status": "reviewed",
+ "method": "source-locator",
+ "reviewedBy": "memory-recall-maintainer",
+ "reviewedAt": "2026-07-17T00:00:00.000Z"
+ },
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "capabilityClaims": {
+ "parse": "partial",
+ "structure": "partial",
+ "imports": "partial",
+ "exports": "partial",
+ "heritage": "unmeasured",
+ "types": "partial",
+ "calls": "partial",
+ "config": "unmeasured",
+ "frameworks": "unmeasured",
+ "impact": "unmeasured",
+ "processes": "unmeasured"
+ },
+ "items": [
+ {
+ "id": "cititem_ts_helpers_test_server_host",
+ "semanticKey": "node:class:virtualFileSystemWithWatch.ts:TestServerHost",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "class",
+ "name": "TestServerHost",
+ "qualifiedName": "virtualFileSystemWithWatch.ts::TestServerHost",
+ "locator": "workspace://virtualFileSystemWithWatch.ts#L396-L1290"
+ },
+ {
+ "id": "cititem_ts_helpers_import_tsserver",
+ "semanticKey": "edge:imports:typingsInstaller.ts:tsserver.ts",
+ "capability": "imports",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "imports",
+ "from": {
+ "kind": "module",
+ "name": "typingsInstaller",
+ "qualifiedName": "typingsInstaller.ts::typingsInstaller",
+ "locator": "workspace://typingsInstaller.ts#L1-L234"
+ },
+ "to": {
+ "kind": "module",
+ "name": "tsserver",
+ "qualifiedName": "tsserver.ts::tsserver",
+ "locator": "workspace://tsserver.ts#L1-L662"
+ },
+ "locator": "workspace://typingsInstaller.ts#L9-L9",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_ts_helpers_export_test_server_host",
+ "semanticKey": "edge:exports:virtualFileSystemWithWatch.ts:TestServerHost",
+ "capability": "exports",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "exports",
+ "from": {
+ "kind": "module",
+ "name": "virtualFileSystemWithWatch",
+ "qualifiedName": "virtualFileSystemWithWatch.ts::virtualFileSystemWithWatch",
+ "locator": "workspace://virtualFileSystemWithWatch.ts#L1-L1405"
+ },
+ "to": {
+ "kind": "class",
+ "name": "TestServerHost",
+ "qualifiedName": "virtualFileSystemWithWatch.ts::TestServerHost",
+ "locator": "workspace://virtualFileSystemWithWatch.ts#L396-L1290"
+ },
+ "locator": "workspace://virtualFileSystemWithWatch.ts#L396-L1290",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_ts_helpers_reset_token_typed_call",
+ "semanticKey": "edge:calls:tsserver.ts:TestServerCancellationToken.setRequestToCancel:resetToken",
+ "capability": "types",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "calls",
+ "from": {
+ "kind": "method",
+ "name": "setRequestToCancel",
+ "qualifiedName": "tsserver.ts::TestServerCancellationToken::setRequestToCancel",
+ "locator": "workspace://tsserver.ts#L410-L414"
+ },
+ "to": {
+ "kind": "method",
+ "name": "resetToken",
+ "qualifiedName": "tsserver.ts::TestServerCancellationToken::resetToken",
+ "locator": "workspace://tsserver.ts#L432-L436"
+ },
+ "locator": "workspace://tsserver.ts#L412-L412",
+ "resolution": "typed"
+ },
+ {
+ "id": "cititem_ts_helpers_rename_folder_entries_call",
+ "semanticKey": "edge:calls:virtualFileSystemWithWatch.ts:TestServerHost.renameFolder:renameFolderEntries",
+ "capability": "calls",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "calls",
+ "from": {
+ "kind": "method",
+ "name": "renameFolder",
+ "qualifiedName": "virtualFileSystemWithWatch.ts::TestServerHost::renameFolder",
+ "locator": "workspace://virtualFileSystemWithWatch.ts#L709-L730"
+ },
+ "to": {
+ "kind": "method",
+ "name": "renameFolderEntries",
+ "qualifiedName": "virtualFileSystemWithWatch.ts::TestServerHost::renameFolderEntries",
+ "locator": "workspace://virtualFileSystemWithWatch.ts#L732-L749"
+ },
+ "locator": "workspace://virtualFileSystemWithWatch.ts#L719-L719",
+ "resolution": "typed"
+ },
+ {
+ "id": "cititem_ts_helpers_rename_reset_false_call",
+ "semanticKey": "edge:calls:virtualFileSystemWithWatch.ts:TestServerHost.renameFolder:resetToken:absent",
+ "capability": "calls",
+ "expectation": "absent",
+ "recordKind": "edge",
+ "kind": "calls",
+ "from": {
+ "kind": "method",
+ "name": "renameFolder",
+ "qualifiedName": "virtualFileSystemWithWatch.ts::TestServerHost::renameFolder",
+ "locator": "workspace://virtualFileSystemWithWatch.ts#L709-L730"
+ },
+ "to": {
+ "kind": "method",
+ "name": "resetToken",
+ "qualifiedName": "tsserver.ts::TestServerCancellationToken::resetToken",
+ "locator": "workspace://tsserver.ts#L432-L436"
+ },
+ "locator": "workspace://virtualFileSystemWithWatch.ts#L719-L719"
+ }
+ ],
+ "truthFingerprint": "sha256:c1212992d14eb84811588132f3bfb45f4cc943cc5a71b042938ddcdaf8284e2c"
+}
diff --git a/evals/code-intelligence/truth/repositories/typescript/cirepo_typescript_microsoft_vscode.json b/evals/code-intelligence/truth/repositories/typescript/cirepo_typescript_microsoft_vscode.json
new file mode 100644
index 00000000..f975ad47
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/typescript/cirepo_typescript_microsoft_vscode.json
@@ -0,0 +1,157 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_typescript_microsoft_vscode",
+ "language": "typescript",
+ "source": {
+ "class": "real-repo",
+ "ref": "corpus://cirepo_typescript_microsoft_vscode@53e335d0387969ba6b6bd68f2481be89252089ca#src/vs/base/common"
+ },
+ "review": {
+ "status": "reviewed",
+ "method": "source-locator",
+ "reviewedBy": "memory-recall-maintainer",
+ "reviewedAt": "2026-07-17T00:00:00.000Z"
+ },
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "capabilityClaims": {
+ "parse": "partial",
+ "structure": "partial",
+ "imports": "partial",
+ "exports": "partial",
+ "heritage": "unmeasured",
+ "types": "partial",
+ "calls": "partial",
+ "config": "unmeasured",
+ "frameworks": "unmeasured",
+ "impact": "unmeasured",
+ "processes": "unmeasured"
+ },
+ "items": [
+ {
+ "id": "cititem_vscode_action",
+ "semanticKey": "node:class:actions.ts:Action",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "class",
+ "name": "Action",
+ "qualifiedName": "actions.ts::Action",
+ "locator": "workspace://actions.ts#L60-L166"
+ },
+ {
+ "id": "cititem_vscode_export_action",
+ "semanticKey": "edge:exports:actions.ts:Action",
+ "capability": "exports",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "exports",
+ "from": {
+ "kind": "module",
+ "name": "actions",
+ "qualifiedName": "actions.ts::actions",
+ "locator": "workspace://actions.ts#L1-L295"
+ },
+ "to": {
+ "kind": "class",
+ "name": "Action",
+ "qualifiedName": "actions.ts::Action",
+ "locator": "workspace://actions.ts#L60-L166"
+ },
+ "locator": "workspace://actions.ts#L60-L166",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_vscode_import_event",
+ "semanticKey": "edge:imports:actions.ts:event.ts",
+ "capability": "imports",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "imports",
+ "from": {
+ "kind": "module",
+ "name": "actions",
+ "qualifiedName": "actions.ts::actions",
+ "locator": "workspace://actions.ts#L1-L295"
+ },
+ "to": {
+ "kind": "module",
+ "name": "event",
+ "qualifiedName": "event.ts::event",
+ "locator": "workspace://event.ts#L1-L1965"
+ },
+ "locator": "workspace://actions.ts#L6-L6",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_vscode_enum_validator_construct",
+ "semanticKey": "edge:constructs:validation.ts:vEnum:EnumValidator",
+ "capability": "types",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "constructs",
+ "from": {
+ "kind": "function",
+ "name": "vEnum",
+ "qualifiedName": "validation.ts::vEnum",
+ "locator": "workspace://validation.ts#L331-L333"
+ },
+ "to": {
+ "kind": "class",
+ "name": "EnumValidator",
+ "qualifiedName": "validation.ts::EnumValidator",
+ "locator": "workspace://validation.ts#L311-L329"
+ },
+ "locator": "workspace://validation.ts#L332-L332",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_vscode_fuzzy_multiple_call",
+ "semanticKey": "edge:calls:fuzzyScorer.ts:scoreFuzzy2:doScoreFuzzy2Multiple",
+ "capability": "calls",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "calls",
+ "from": {
+ "kind": "function",
+ "name": "scoreFuzzy2",
+ "qualifiedName": "fuzzyScorer.ts::scoreFuzzy2",
+ "locator": "workspace://fuzzyScorer.ts#L291-L301"
+ },
+ "to": {
+ "kind": "function",
+ "name": "doScoreFuzzy2Multiple",
+ "qualifiedName": "fuzzyScorer.ts::doScoreFuzzy2Multiple",
+ "locator": "workspace://fuzzyScorer.ts#L303-L322"
+ },
+ "locator": "workspace://fuzzyScorer.ts#L296-L296",
+ "resolution": "inferred"
+ },
+ {
+ "id": "cititem_vscode_fuzzy_false_call",
+ "semanticKey": "edge:calls:fuzzyScorer.ts:scoreFuzzy2:Action:absent",
+ "capability": "calls",
+ "expectation": "absent",
+ "recordKind": "edge",
+ "kind": "calls",
+ "from": {
+ "kind": "function",
+ "name": "scoreFuzzy2",
+ "qualifiedName": "fuzzyScorer.ts::scoreFuzzy2",
+ "locator": "workspace://fuzzyScorer.ts#L291-L301"
+ },
+ "to": {
+ "kind": "class",
+ "name": "Action",
+ "qualifiedName": "actions.ts::Action",
+ "locator": "workspace://actions.ts#L60-L166"
+ },
+ "locator": "workspace://fuzzyScorer.ts#L296-L296"
+ }
+ ],
+ "truthFingerprint": "sha256:4680d48ac75b7936ca53134f3e5e7142d75ee98720cb61c6b792546f58a0bc76"
+}
diff --git a/evals/code-intelligence/truth/repositories/typescript/cirepo_typescript_vercel_next_js.json b/evals/code-intelligence/truth/repositories/typescript/cirepo_typescript_vercel_next_js.json
new file mode 100644
index 00000000..028ece2c
--- /dev/null
+++ b/evals/code-intelligence/truth/repositories/typescript/cirepo_typescript_vercel_next_js.json
@@ -0,0 +1,157 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_typescript_vercel_next_js",
+ "language": "typescript",
+ "source": {
+ "class": "real-repo",
+ "ref": "corpus://cirepo_typescript_vercel_next_js@153bf8ac5fa00888ef5fbb2b65cac12f0942a44f#packages/next/src/server/route-modules/app-route"
+ },
+ "review": {
+ "status": "reviewed",
+ "method": "source-locator",
+ "reviewedBy": "memory-recall-maintainer",
+ "reviewedAt": "2026-07-16T00:00:00.000Z"
+ },
+ "reviewCoverage": {
+ "declarations": "sampled",
+ "relationships": "sampled",
+ "calls": "sampled"
+ },
+ "capabilityClaims": {
+ "parse": "partial",
+ "structure": "partial",
+ "imports": "partial",
+ "exports": "partial",
+ "heritage": "unmeasured",
+ "types": "partial",
+ "calls": "partial",
+ "config": "unmeasured",
+ "frameworks": "unmeasured",
+ "impact": "unmeasured",
+ "processes": "unmeasured"
+ },
+ "items": [
+ {
+ "id": "cititem_next_parsed_query_function",
+ "semanticKey": "node:function:helpers/parsed-url-query-to-params.ts:parsedUrlQueryToParams",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "function",
+ "name": "parsedUrlQueryToParams",
+ "qualifiedName": "helpers/parsed-url-query-to-params.ts::parsedUrlQueryToParams",
+ "locator": "workspace://helpers/parsed-url-query-to-params.ts#L9-L20"
+ },
+ {
+ "id": "cititem_next_import_parsed_query",
+ "semanticKey": "edge:imports:module.ts:helpers/parsed-url-query-to-params.ts",
+ "capability": "imports",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "imports",
+ "from": {
+ "kind": "module",
+ "name": "module",
+ "qualifiedName": "module.ts::module",
+ "locator": "workspace://module.ts#L1-L1343"
+ },
+ "to": {
+ "kind": "module",
+ "name": "helpers_parsed_url_query_to_params",
+ "qualifiedName": "helpers/parsed-url-query-to-params.ts::helpers_parsed_url_query_to_params",
+ "locator": "workspace://helpers/parsed-url-query-to-params.ts#L1-L21"
+ },
+ "locator": "workspace://module.ts#L33-L33",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_next_export_parsed_query",
+ "semanticKey": "edge:exports:helpers/parsed-url-query-to-params.ts:parsedUrlQueryToParams",
+ "capability": "exports",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "exports",
+ "from": {
+ "kind": "module",
+ "name": "helpers_parsed_url_query_to_params",
+ "qualifiedName": "helpers/parsed-url-query-to-params.ts::helpers_parsed_url_query_to_params",
+ "locator": "workspace://helpers/parsed-url-query-to-params.ts#L1-L21"
+ },
+ "to": {
+ "kind": "function",
+ "name": "parsedUrlQueryToParams",
+ "qualifiedName": "helpers/parsed-url-query-to-params.ts::parsedUrlQueryToParams",
+ "locator": "workspace://helpers/parsed-url-query-to-params.ts#L9-L20"
+ },
+ "locator": "workspace://helpers/parsed-url-query-to-params.ts#L9-L20",
+ "resolution": "exact"
+ },
+ {
+ "id": "cititem_next_resolve_handler_call",
+ "semanticKey": "edge:calls:module.ts:AppRouteRouteModule.handle:resolveHandler",
+ "capability": "calls",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "calls",
+ "from": {
+ "kind": "method",
+ "name": "handle",
+ "qualifiedName": "module.ts::AppRouteRouteModule::handle",
+ "locator": "workspace://module.ts#L751-L936"
+ },
+ "to": {
+ "kind": "method",
+ "name": "resolveHandler",
+ "qualifiedName": "module.ts::AppRouteRouteModule::resolveHandler",
+ "locator": "workspace://module.ts#L349-L354"
+ },
+ "locator": "workspace://module.ts#L773-L773",
+ "resolution": "typed"
+ },
+ {
+ "id": "cititem_next_on_userland_loaded_typed_call",
+ "semanticKey": "edge:calls:module.ts:AppRouteRouteModule.constructor:_onUserlandLoaded",
+ "capability": "types",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "calls",
+ "from": {
+ "kind": "method",
+ "name": "constructor",
+ "qualifiedName": "module.ts::AppRouteRouteModule::constructor",
+ "locator": "workspace://module.ts#L256-L284"
+ },
+ "to": {
+ "kind": "method",
+ "name": "_onUserlandLoaded",
+ "qualifiedName": "module.ts::AppRouteRouteModule::_onUserlandLoaded",
+ "locator": "workspace://module.ts#L286-L342"
+ },
+ "locator": "workspace://module.ts#L276-L276",
+ "resolution": "typed"
+ },
+ {
+ "id": "cititem_next_resolve_handler_false_call",
+ "semanticKey": "edge:calls:module.ts:AppRouteRouteModule.handle:parsedUrlQueryToParams:absent",
+ "capability": "calls",
+ "expectation": "absent",
+ "recordKind": "edge",
+ "kind": "calls",
+ "from": {
+ "kind": "method",
+ "name": "handle",
+ "qualifiedName": "module.ts::AppRouteRouteModule::handle",
+ "locator": "workspace://module.ts#L751-L936"
+ },
+ "to": {
+ "kind": "function",
+ "name": "parsedUrlQueryToParams",
+ "qualifiedName": "helpers/parsed-url-query-to-params.ts::parsedUrlQueryToParams",
+ "locator": "workspace://helpers/parsed-url-query-to-params.ts#L9-L20"
+ },
+ "locator": "workspace://module.ts#L773-L773"
+ }
+ ],
+ "truthFingerprint": "sha256:fd1169366c4951e02d6a85af53eb3054e9595f1a2ed121c0af91253f7b7fd8ed"
+}
diff --git a/evals/context-recall/oaf-repo-gold.v1.json b/evals/context-recall/oaf-repo-gold.v1.json
index 961351fe..614fbec4 100644
--- a/evals/context-recall/oaf-repo-gold.v1.json
+++ b/evals/context-recall/oaf-repo-gold.v1.json
@@ -40,11 +40,11 @@
]
},
{
- "id": "ctxrec_ast_source_graph",
- "query": "AST code candidate source JS TS source graph callers callees",
+ "id": "ctxrec_native_code_intelligence",
+ "query": "Rust code intelligence index search trace dependencies fourteen languages",
"goldFiles": [
- "providers/native/context-candidate-ast-code/src/index.mjs",
- "tests/ast-code-candidate-source.test.mjs"
+ "rust/oaf-index/src/lib.rs",
+ "tests/native-code-intelligence-14-languages.test.mjs"
]
},
{
diff --git a/evals/recall-map/architecture-ranking.v1.json b/evals/recall-map/architecture-ranking.v1.json
deleted file mode 100644
index 0a0785e3..00000000
--- a/evals/recall-map/architecture-ranking.v1.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "schemaVersion": "1.0.0",
- "suite": "recall-map-architecture-ranking",
- "version": "v1",
- "scope": "bounded_local_static_js_ts",
- "cases": [
- {
- "id": "exported-entry-points-over-generic-helpers",
- "expectedTopEntryPoints": ["GET", "startServer"],
- "mustDeprioritize": ["assert", "assertPlainObject", "#privateMethod", "byteLength", "testOnlyProbe"]
- },
- {
- "id": "changed-source-promotes-otherwise-equal-entry",
- "changedLocator": "workspace://src/changed.ts",
- "expectedTopEntryPoint": "changedEntry"
- },
- {
- "id": "coverage-is-partial-when-static-js-ts-scope-is-incomplete",
- "expectedReasonCodes": ["file_too_large", "max_files_reached", "unsupported_extensions_skipped"]
- }
- ],
- "limitations": [
- "No language-server, semantic, graph-database, model, network, or source-body claim.",
- "Ranking uses only bounded local graph nodes, edges, and safe workspace locators."
- ]
-}
diff --git a/examples/protocol/code-intelligence-engine-request.json b/examples/protocol/code-intelligence-engine-request.json
new file mode 100644
index 00000000..a07c4893
--- /dev/null
+++ b/examples/protocol/code-intelligence-engine-request.json
@@ -0,0 +1,17 @@
+{
+ "protocolVersion": "1.0.0",
+ "requestId": "cireq_0123456789abcdef0123456789abcdef",
+ "workspaceId": "ws_local",
+ "operation": "graph.build",
+ "root": ".",
+ "deadlineMs": 30000,
+ "cancellationToken": "cancel_0123456789abcdef0123456789abcdef",
+ "responseSchemaVersion": "1.0.0",
+ "arguments": {
+ "maxFiles": 1000,
+ "maxFileBytes": 524288,
+ "maxNodes": 5000,
+ "maxEdges": 10000,
+ "languages": ["javascript", "typescript"]
+ }
+}
diff --git a/examples/protocol/code-intelligence-engine-response.json b/examples/protocol/code-intelligence-engine-response.json
new file mode 100644
index 00000000..e6e2cb10
--- /dev/null
+++ b/examples/protocol/code-intelligence-engine-response.json
@@ -0,0 +1,72 @@
+{
+ "protocolVersion": "1.0.0",
+ "requestId": "cireq_0123456789abcdef0123456789abcdef",
+ "ok": true,
+ "result": {
+ "responseSchemaVersion": "1.0.0",
+ "graph": {
+ "schemaVersion": "1.0.0",
+ "graphVersion": "memory-recall-code-intelligence-1",
+ "repository": {
+ "id": "repo_0123456789abcdef0123456789abcdef",
+ "workspaceId": "ws_local",
+ "rootIdentityHash": "sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
+ },
+ "engine": {
+ "name": "memory-recall-native",
+ "version": "0.1.0",
+ "protocolVersion": "1.0.0"
+ },
+ "generation": {
+ "id": "cigen_0123456789abcdef0123456789abcdef",
+ "builtAt": "2026-07-16T00:00:00.000Z",
+ "freshness": "current"
+ },
+ "coverage": [
+ {
+ "language": "typescript",
+ "support": "partial",
+ "discoveredFileCount": 1,
+ "indexedFileCount": 1,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": []
+ }
+ ],
+ "nodes": [
+ {
+ "id": "cinode_0123456789abcdef0123456789abcdef",
+ "kind": "file",
+ "language": "typescript",
+ "languageKind": "source_file",
+ "name": "index.ts",
+ "qualifiedName": "src/index.ts",
+ "locator": "workspace://src/index.ts#L1-L3",
+ "span": { "startLine": 1, "startColumn": 0, "endLine": 3, "endColumn": 1 },
+ "generationId": "cigen_0123456789abcdef0123456789abcdef",
+ "freshness": "current",
+ "contentHash": "sha256:123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0"
+ }
+ ],
+ "edges": [],
+ "diagnostics": [],
+ "graphFingerprint": "sha256:abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789"
+ },
+ "measurements": {
+ "scannedFileCount": 1,
+ "indexedFileCount": 1,
+ "nodeCount": 1,
+ "edgeCount": 0,
+ "omittedNodeCount": 0,
+ "omittedEdgeCount": 0
+ },
+ "safeguards": {
+ "readOnly": true,
+ "localFilesWritten": 0,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "rawSourceBodiesIncluded": false,
+ "absolutePathsIncluded": false
+ }
+ }
+}
diff --git a/examples/protocol/code-intelligence-graph.json b/examples/protocol/code-intelligence-graph.json
new file mode 100644
index 00000000..797b6d01
--- /dev/null
+++ b/examples/protocol/code-intelligence-graph.json
@@ -0,0 +1,96 @@
+{
+ "schemaVersion": "1.0.0",
+ "graphVersion": "memory-recall-code-intelligence-1",
+ "repository": {
+ "id": "repo_0123456789abcdef0123456789abcdef",
+ "workspaceId": "ws_local",
+ "rootIdentityHash": "sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
+ },
+ "engine": {
+ "name": "memory-recall-native",
+ "version": "0.1.0",
+ "protocolVersion": "1.0.0"
+ },
+ "generation": {
+ "id": "cigen_0123456789abcdef0123456789abcdef",
+ "builtAt": "2026-07-16T00:00:00.000Z",
+ "freshness": "current"
+ },
+ "coverage": [
+ {
+ "language": "typescript",
+ "support": "partial",
+ "discoveredFileCount": 1,
+ "indexedFileCount": 1,
+ "failedFileCount": 0,
+ "omittedFileCount": 0,
+ "reasonCodes": []
+ }
+ ],
+ "nodes": [
+ {
+ "id": "cinode_0123456789abcdef0123456789abcdef",
+ "kind": "file",
+ "language": "typescript",
+ "languageKind": "source_file",
+ "name": "index.ts",
+ "qualifiedName": "src/index.ts",
+ "locator": "workspace://src/index.ts#L1-L3",
+ "span": {
+ "startLine": 1,
+ "startColumn": 0,
+ "endLine": 3,
+ "endColumn": 1
+ },
+ "generationId": "cigen_0123456789abcdef0123456789abcdef",
+ "freshness": "current",
+ "contentHash": "sha256:123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0"
+ },
+ {
+ "id": "cinode_abcdef0123456789abcdef0123456789",
+ "kind": "function",
+ "language": "typescript",
+ "languageKind": "function_declaration",
+ "name": "buildIndex",
+ "qualifiedName": "src/index.ts::buildIndex",
+ "locator": "workspace://src/index.ts#L1-L3",
+ "span": {
+ "startLine": 1,
+ "startColumn": 0,
+ "endLine": 3,
+ "endColumn": 1
+ },
+ "generationId": "cigen_0123456789abcdef0123456789abcdef",
+ "freshness": "current"
+ }
+ ],
+ "edges": [
+ {
+ "id": "ciedge_0123456789abcdef0123456789abcdef",
+ "kind": "defines",
+ "fromNodeId": "cinode_0123456789abcdef0123456789abcdef",
+ "toNodeId": "cinode_abcdef0123456789abcdef0123456789",
+ "evidence": {
+ "kind": "declaration",
+ "locator": "workspace://src/index.ts#L1-L3",
+ "span": {
+ "startLine": 1,
+ "startColumn": 0,
+ "endLine": 3,
+ "endColumn": 1
+ }
+ },
+ "resolver": {
+ "name": "typescript.declarations",
+ "version": "0.1.0"
+ },
+ "confidence": 1,
+ "resolution": "exact",
+ "language": "typescript",
+ "generationId": "cigen_0123456789abcdef0123456789abcdef",
+ "freshness": "current"
+ }
+ ],
+ "diagnostics": [],
+ "graphFingerprint": "sha256:abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789"
+}
diff --git a/examples/protocol/code-intelligence-index-build-request.json b/examples/protocol/code-intelligence-index-build-request.json
new file mode 100644
index 00000000..517e8fac
--- /dev/null
+++ b/examples/protocol/code-intelligence-index-build-request.json
@@ -0,0 +1,18 @@
+{
+ "protocolVersion": "1.0.0",
+ "requestId": "ciidxreq_00000000000000000000000000000001",
+ "workspaceId": "ws_local",
+ "operation": "index.build",
+ "root": ".",
+ "indexLocator": "workspace://.local/source-index/index.v1.sqlite",
+ "deadlineMs": 120000,
+ "responseSchemaVersion": "1.0.0",
+ "arguments": {
+ "write": true,
+ "maxFiles": 100000,
+ "maxFileBytes": 1048576,
+ "maxNodes": 250000,
+ "maxEdges": 1000000,
+ "languages": ["typescript", "javascript", "python"]
+ }
+}
diff --git a/examples/protocol/code-intelligence-index-doctor-request.json b/examples/protocol/code-intelligence-index-doctor-request.json
new file mode 100644
index 00000000..c1c915b5
--- /dev/null
+++ b/examples/protocol/code-intelligence-index-doctor-request.json
@@ -0,0 +1,11 @@
+{
+ "protocolVersion": "1.0.0",
+ "requestId": "ciidxreq_00000000000000000000000000000004",
+ "workspaceId": "ws_local",
+ "operation": "index.doctor",
+ "root": ".",
+ "indexLocator": "workspace://.local/source-index/index.v1.sqlite",
+ "deadlineMs": 30000,
+ "responseSchemaVersion": "1.0.0",
+ "arguments": {}
+}
diff --git a/examples/protocol/code-intelligence-index-query-request.json b/examples/protocol/code-intelligence-index-query-request.json
new file mode 100644
index 00000000..98c26e76
--- /dev/null
+++ b/examples/protocol/code-intelligence-index-query-request.json
@@ -0,0 +1,18 @@
+{
+ "protocolVersion": "1.0.0",
+ "requestId": "ciidxreq_00000000000000000000000000000005",
+ "workspaceId": "ws_local",
+ "operation": "index.query",
+ "root": ".",
+ "indexLocator": "workspace://.local/source-index/index.v1.sqlite",
+ "deadlineMs": 30000,
+ "responseSchemaVersion": "1.0.0",
+ "arguments": {
+ "kind": "dependencies",
+ "query": "UserController",
+ "direction": "outbound",
+ "depth": 2,
+ "edgeKinds": ["calls", "constructs"],
+ "limit": 25
+ }
+}
diff --git a/examples/protocol/code-intelligence-index-reader-response.json b/examples/protocol/code-intelligence-index-reader-response.json
new file mode 100644
index 00000000..fa01a11d
--- /dev/null
+++ b/examples/protocol/code-intelligence-index-reader-response.json
@@ -0,0 +1,84 @@
+{
+ "protocolVersion": "1.0.0",
+ "requestId": "ciidxreq_00000000000000000000000000000005",
+ "ok": true,
+ "result": {
+ "responseSchemaVersion": "1.0.0",
+ "operation": "index.query",
+ "repositoryIdentityHash": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+ "indexLocator": "workspace://.local/source-index/index.v1.sqlite",
+ "storageSchemaVersion": "1",
+ "engineVersion": "2.0.0",
+ "state": "ready",
+ "activeGeneration": 1,
+ "freshness": "current",
+ "health": {
+ "status": "ready",
+ "reasonCodes": [],
+ "lastSuccessfulRefreshAt": "2026-07-16T15:30:00.000Z",
+ "repairRequired": false
+ },
+ "summary": {
+ "fileCount": 144,
+ "nodeCount": 1280,
+ "edgeCount": 2310,
+ "unresolvedCount": 41,
+ "omittedCount": 0,
+ "databaseBytes": 1048576
+ },
+ "measurements": {
+ "durationMs": 4,
+ "parsedFileCount": 0,
+ "reusedFileCount": 144,
+ "changedFileCount": 0,
+ "deletedFileCount": 0,
+ "localFilesWritten": 0
+ },
+ "results": [
+ {
+ "id": "cinode_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+ "kind": "class",
+ "label": "UserController",
+ "locator": "workspace://src/user-controller.ts#L12-L48",
+ "confidence": 1,
+ "generation": 1
+ },
+ {
+ "id": "cinode_bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
+ "kind": "class",
+ "label": "UserService",
+ "locator": "workspace://src/user-service.ts#L4-L32",
+ "confidence": 1,
+ "generation": 1
+ }
+ ],
+ "relationships": [
+ {
+ "id": "ciedge_cccccccccccccccccccccccccccccccc",
+ "kind": "calls",
+ "fromNodeId": "cinode_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+ "toNodeId": "cinode_bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
+ "locator": "workspace://src/user-controller.ts#L24",
+ "confidence": 0.95,
+ "resolution": "typed",
+ "resolver": "memory-recall.typed-call",
+ "resolverVersion": "0.1.0",
+ "generation": 1,
+ "stale": false
+ }
+ ],
+ "truncated": false,
+ "nextCursor": null,
+ "diagnostics": [],
+ "safeguards": {
+ "readOnly": true,
+ "localFilesWritten": 0,
+ "canonicalMemoryWrites": 0,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "rawSourceBodiesIncluded": false,
+ "absolutePathsIncluded": false,
+ "repairPerformed": false
+ }
+ }
+}
diff --git a/examples/protocol/code-intelligence-index-refresh-request.json b/examples/protocol/code-intelligence-index-refresh-request.json
new file mode 100644
index 00000000..6fa35813
--- /dev/null
+++ b/examples/protocol/code-intelligence-index-refresh-request.json
@@ -0,0 +1,17 @@
+{
+ "protocolVersion": "1.0.0",
+ "requestId": "ciidxreq_00000000000000000000000000000002",
+ "workspaceId": "ws_local",
+ "operation": "index.refresh",
+ "root": ".",
+ "indexLocator": "workspace://.local/source-index/index.v1.sqlite",
+ "deadlineMs": 120000,
+ "responseSchemaVersion": "1.0.0",
+ "arguments": {
+ "write": true,
+ "maxFiles": 100000,
+ "maxFileBytes": 1048576,
+ "maxNodes": 250000,
+ "maxEdges": 1000000
+ }
+}
diff --git a/examples/protocol/code-intelligence-index-repair-request.json b/examples/protocol/code-intelligence-index-repair-request.json
new file mode 100644
index 00000000..c67f1195
--- /dev/null
+++ b/examples/protocol/code-intelligence-index-repair-request.json
@@ -0,0 +1,20 @@
+{
+ "protocolVersion": "1.0.0",
+ "requestId": "ciidxreq_00000000000000000000000000000006",
+ "workspaceId": "ws_local",
+ "operation": "index.repair",
+ "root": ".",
+ "indexLocator": "workspace://.local/source-index/index.v1.sqlite",
+ "deadlineMs": 300000,
+ "cancellationToken": "cancel_00000000000000000000000000000006",
+ "responseSchemaVersion": "1.0.0",
+ "arguments": {
+ "write": true,
+ "confirmRepairPlan": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+ "maxFiles": 100000,
+ "maxFileBytes": 1048576,
+ "maxNodes": 1000000,
+ "maxEdges": 5000000,
+ "languages": ["typescript", "javascript"]
+ }
+}
diff --git a/examples/protocol/code-intelligence-index-status-request.json b/examples/protocol/code-intelligence-index-status-request.json
new file mode 100644
index 00000000..b34633ae
--- /dev/null
+++ b/examples/protocol/code-intelligence-index-status-request.json
@@ -0,0 +1,11 @@
+{
+ "protocolVersion": "1.0.0",
+ "requestId": "ciidxreq_00000000000000000000000000000003",
+ "workspaceId": "ws_local",
+ "operation": "index.status",
+ "root": ".",
+ "indexLocator": "workspace://.local/source-index/index.v1.sqlite",
+ "deadlineMs": 30000,
+ "responseSchemaVersion": "1.0.0",
+ "arguments": {}
+}
diff --git a/examples/protocol/code-intelligence-index-writer-response.json b/examples/protocol/code-intelligence-index-writer-response.json
new file mode 100644
index 00000000..c2d1d95f
--- /dev/null
+++ b/examples/protocol/code-intelligence-index-writer-response.json
@@ -0,0 +1,52 @@
+{
+ "protocolVersion": "1.0.0",
+ "requestId": "ciidxreq_00000000000000000000000000000001",
+ "ok": true,
+ "result": {
+ "responseSchemaVersion": "1.0.0",
+ "operation": "index.build",
+ "repositoryIdentityHash": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+ "indexLocator": "workspace://.local/source-index/index.v1.sqlite",
+ "storageSchemaVersion": "1",
+ "engineVersion": "2.0.0",
+ "state": "ready",
+ "activeGeneration": 1,
+ "freshness": "current",
+ "health": {
+ "status": "ready",
+ "reasonCodes": [],
+ "lastSuccessfulRefreshAt": "2026-07-16T15:30:00.000Z",
+ "repairRequired": false
+ },
+ "summary": {
+ "fileCount": 144,
+ "nodeCount": 1280,
+ "edgeCount": 2310,
+ "unresolvedCount": 41,
+ "omittedCount": 0,
+ "databaseBytes": 1048576
+ },
+ "measurements": {
+ "durationMs": 842,
+ "parsedFileCount": 144,
+ "reusedFileCount": 0,
+ "changedFileCount": 144,
+ "deletedFileCount": 0,
+ "localFilesWritten": 1
+ },
+ "results": [],
+ "truncated": false,
+ "nextCursor": null,
+ "diagnostics": [],
+ "safeguards": {
+ "readOnly": false,
+ "localFilesWritten": 1,
+ "canonicalMemoryWrites": 0,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "rawSourceBodiesIncluded": false,
+ "absolutePathsIncluded": false,
+ "repairPerformed": false
+ }
+ }
+}
diff --git a/examples/protocol/code-intelligence-language-report.json b/examples/protocol/code-intelligence-language-report.json
new file mode 100644
index 00000000..d7dac4ea
--- /dev/null
+++ b/examples/protocol/code-intelligence-language-report.json
@@ -0,0 +1,52 @@
+{
+ "schemaVersion": "1.0.0",
+ "reportVersion": "memory-recall-code-intelligence-language-report-1",
+ "truthId": "citruth_typescript_protocol_fixture",
+ "language": "typescript",
+ "sourceRef": "fixture://sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
+ "graphFingerprints": [
+ "sha256:abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789",
+ "sha256:abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789"
+ ],
+ "reviewCoverage": {
+ "declarations": "exhaustive",
+ "relationships": "exhaustive",
+ "calls": "not-applicable"
+ },
+ "metrics": {
+ "declarationRecall": { "numerator": 1, "denominator": 1, "value": 1 },
+ "relationshipRecall": { "numerator": 1, "denominator": 1, "value": 1 },
+ "reviewedCallPrecision": { "numerator": 0, "denominator": 0, "value": null },
+ "duplicateCanonicalSymbolCount": 0,
+ "parseFailureCount": 0,
+ "deterministicGraphFingerprint": true,
+ "truthItemCount": 2,
+ "matchedTruthItemCount": 2
+ },
+ "capabilities": [
+ { "id": "parse", "claim": "partial", "benchmarkStatus": "unmeasured", "itemCount": 0, "matchedItemCount": 0 },
+ { "id": "structure", "claim": "partial", "benchmarkStatus": "unmeasured", "itemCount": 2, "matchedItemCount": 2 },
+ { "id": "imports", "claim": "unmeasured", "benchmarkStatus": "unmeasured", "itemCount": 0, "matchedItemCount": 0 },
+ { "id": "exports", "claim": "unmeasured", "benchmarkStatus": "unmeasured", "itemCount": 0, "matchedItemCount": 0 },
+ { "id": "heritage", "claim": "unmeasured", "benchmarkStatus": "unmeasured", "itemCount": 0, "matchedItemCount": 0 },
+ { "id": "types", "claim": "unmeasured", "benchmarkStatus": "unmeasured", "itemCount": 0, "matchedItemCount": 0 },
+ { "id": "calls", "claim": "unmeasured", "benchmarkStatus": "not-applicable", "itemCount": 0, "matchedItemCount": 0 },
+ { "id": "config", "claim": "unmeasured", "benchmarkStatus": "unmeasured", "itemCount": 0, "matchedItemCount": 0 },
+ { "id": "frameworks", "claim": "unmeasured", "benchmarkStatus": "unmeasured", "itemCount": 0, "matchedItemCount": 0 },
+ { "id": "impact", "claim": "unmeasured", "benchmarkStatus": "unmeasured", "itemCount": 0, "matchedItemCount": 0 },
+ { "id": "processes", "claim": "unmeasured", "benchmarkStatus": "unmeasured", "itemCount": 0, "matchedItemCount": 0 }
+ ],
+ "failures": [],
+ "gateDecision": "pass",
+ "claims": { "accuracyFloorMet": false, "parity": false, "leadership": false },
+ "safeguards": {
+ "rawSourceStored": false,
+ "absolutePathsStored": false,
+ "environmentVariablesStored": false,
+ "networkCalls": 0,
+ "modelCalls": 0,
+ "canonicalMemoryWrites": 0,
+ "workspaceWrites": 0
+ },
+ "reportFingerprint": "sha256:a3549e0472f11b1afba67b04eb9f295904441f3f55b3a428248a74023505a63c"
+}
diff --git a/examples/protocol/code-intelligence-language-truth.json b/examples/protocol/code-intelligence-language-truth.json
new file mode 100644
index 00000000..2d86471b
--- /dev/null
+++ b/examples/protocol/code-intelligence-language-truth.json
@@ -0,0 +1,70 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_typescript_protocol_fixture",
+ "language": "typescript",
+ "source": {
+ "class": "fixture",
+ "ref": "fixture://sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
+ },
+ "review": {
+ "status": "reviewed",
+ "method": "source-locator",
+ "reviewedBy": "memory-recall-maintainer",
+ "reviewedAt": "2026-07-16T00:00:00.000Z"
+ },
+ "reviewCoverage": {
+ "declarations": "exhaustive",
+ "relationships": "exhaustive",
+ "calls": "not-applicable"
+ },
+ "capabilityClaims": {
+ "parse": "partial",
+ "structure": "partial",
+ "imports": "unmeasured",
+ "exports": "unmeasured",
+ "heritage": "unmeasured",
+ "types": "unmeasured",
+ "calls": "unmeasured",
+ "config": "unmeasured",
+ "frameworks": "unmeasured",
+ "impact": "unmeasured",
+ "processes": "unmeasured"
+ },
+ "items": [
+ {
+ "id": "cititem_build_index_function",
+ "semanticKey": "node:function:src/index.ts:buildIndex",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "function",
+ "name": "buildIndex",
+ "qualifiedName": "src/index.ts::buildIndex",
+ "locator": "workspace://src/index.ts#L1-L3"
+ },
+ {
+ "id": "cititem_file_defines_build_index",
+ "semanticKey": "edge:defines:src/index.ts:buildIndex",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "edge",
+ "kind": "defines",
+ "from": {
+ "kind": "file",
+ "name": "index.ts",
+ "qualifiedName": "src/index.ts",
+ "locator": "workspace://src/index.ts#L1-L3"
+ },
+ "to": {
+ "kind": "function",
+ "name": "buildIndex",
+ "qualifiedName": "src/index.ts::buildIndex",
+ "locator": "workspace://src/index.ts#L1-L3"
+ },
+ "locator": "workspace://src/index.ts#L1-L3",
+ "resolution": "exact"
+ }
+ ],
+ "truthFingerprint": "sha256:507bece7a21fa7a7c07b4594e954e5a0a32267435960174c297f452a8bfeffbe"
+}
diff --git a/examples/protocol/compatibility/fixtures.json b/examples/protocol/compatibility/fixtures.json
index 81226bbe..72b1d0d0 100644
--- a/examples/protocol/compatibility/fixtures.json
+++ b/examples/protocol/compatibility/fixtures.json
@@ -853,6 +853,60 @@
"instance": "examples/protocol/source-graph.json",
"expectedValid": true
},
+ {
+ "id": "code-intelligence-graph-current-valid",
+ "schema": "packages/protocol/schemas/code-intelligence-graph.schema.json",
+ "instance": "examples/protocol/code-intelligence-graph.json",
+ "expectedValid": true
+ },
+ {
+ "id": "code-intelligence-graph-raw-body-invalid",
+ "schema": "packages/protocol/schemas/code-intelligence-graph.schema.json",
+ "instance": "examples/protocol/compatibility/invalid/code-intelligence-graph-raw-body.json",
+ "expectedValid": false
+ },
+ {
+ "id": "code-intelligence-graph-absolute-path-invalid",
+ "schema": "packages/protocol/schemas/code-intelligence-graph.schema.json",
+ "instance": "examples/protocol/compatibility/invalid/code-intelligence-graph-absolute-path.json",
+ "expectedValid": false
+ },
+ {
+ "id": "code-intelligence-language-truth-current-valid",
+ "schema": "packages/protocol/schemas/code-intelligence-language-truth.schema.json",
+ "instance": "examples/protocol/code-intelligence-language-truth.json",
+ "expectedValid": true
+ },
+ {
+ "id": "code-intelligence-language-report-current-valid",
+ "schema": "packages/protocol/schemas/code-intelligence-language-report.schema.json",
+ "instance": "examples/protocol/code-intelligence-language-report.json",
+ "expectedValid": true
+ },
+ {
+ "id": "code-intelligence-language-truth-raw-body-invalid",
+ "schema": "packages/protocol/schemas/code-intelligence-language-truth.schema.json",
+ "instance": "examples/protocol/compatibility/invalid/code-intelligence-language-truth-raw-body.json",
+ "expectedValid": false
+ },
+ {
+ "id": "code-intelligence-language-truth-absolute-path-invalid",
+ "schema": "packages/protocol/schemas/code-intelligence-language-truth.schema.json",
+ "instance": "examples/protocol/compatibility/invalid/code-intelligence-language-truth-absolute-path.json",
+ "expectedValid": false
+ },
+ {
+ "id": "code-intelligence-capability-matrix-current-valid",
+ "schema": "packages/protocol/schemas/code-intelligence-capability-matrix.schema.json",
+ "instance": "evals/code-intelligence/capability-matrix.v1.json",
+ "expectedValid": true
+ },
+ {
+ "id": "code-intelligence-capability-matrix-false-full-invalid",
+ "schema": "packages/protocol/schemas/code-intelligence-capability-matrix.schema.json",
+ "instance": "examples/protocol/compatibility/invalid/code-intelligence-capability-matrix-false-full.json",
+ "expectedValid": false
+ },
{
"id": "source-graph-preview-current-valid",
"schema": "packages/protocol/schemas/source-graph-preview.schema.json",
@@ -1092,6 +1146,108 @@
"schema": "packages/protocol/schemas/loop-run.schema.json",
"instance": "examples/protocol/compatibility/invalid/loop-run-auto-merge.json",
"expectedValid": false
+ },
+ {
+ "id": "code-intelligence-engine-request-current-valid",
+ "schema": "packages/protocol/schemas/code-intelligence-engine-request.schema.json",
+ "instance": "examples/protocol/code-intelligence-engine-request.json",
+ "expectedValid": true
+ },
+ {
+ "id": "code-intelligence-engine-response-current-valid",
+ "schema": "packages/protocol/schemas/code-intelligence-engine-response.schema.json",
+ "instance": "examples/protocol/code-intelligence-engine-response.json",
+ "expectedValid": true
+ },
+ {
+ "id": "code-intelligence-engine-request-absolute-root-invalid",
+ "schema": "packages/protocol/schemas/code-intelligence-engine-request.schema.json",
+ "instance": "examples/protocol/compatibility/invalid/code-intelligence-engine-request-absolute-root.json",
+ "expectedValid": false
+ },
+ {
+ "id": "code-intelligence-engine-response-raw-error-invalid",
+ "schema": "packages/protocol/schemas/code-intelligence-engine-response.schema.json",
+ "instance": "examples/protocol/compatibility/invalid/code-intelligence-engine-response-raw-error.json",
+ "expectedValid": false
+ },
+ {
+ "id": "code-intelligence-index-build-request-current-valid",
+ "schema": "packages/protocol/schemas/code-intelligence-index-request.schema.json",
+ "instance": "examples/protocol/code-intelligence-index-build-request.json",
+ "expectedValid": true
+ },
+ {
+ "id": "code-intelligence-index-refresh-request-current-valid",
+ "schema": "packages/protocol/schemas/code-intelligence-index-request.schema.json",
+ "instance": "examples/protocol/code-intelligence-index-refresh-request.json",
+ "expectedValid": true
+ },
+ {
+ "id": "code-intelligence-index-repair-request-current-valid",
+ "schema": "packages/protocol/schemas/code-intelligence-index-request.schema.json",
+ "instance": "examples/protocol/code-intelligence-index-repair-request.json",
+ "expectedValid": true
+ },
+ {
+ "id": "code-intelligence-index-status-request-current-valid",
+ "schema": "packages/protocol/schemas/code-intelligence-index-request.schema.json",
+ "instance": "examples/protocol/code-intelligence-index-status-request.json",
+ "expectedValid": true
+ },
+ {
+ "id": "code-intelligence-index-doctor-request-current-valid",
+ "schema": "packages/protocol/schemas/code-intelligence-index-request.schema.json",
+ "instance": "examples/protocol/code-intelligence-index-doctor-request.json",
+ "expectedValid": true
+ },
+ {
+ "id": "code-intelligence-index-query-request-current-valid",
+ "schema": "packages/protocol/schemas/code-intelligence-index-request.schema.json",
+ "instance": "examples/protocol/code-intelligence-index-query-request.json",
+ "expectedValid": true
+ },
+ {
+ "id": "code-intelligence-index-writer-response-current-valid",
+ "schema": "packages/protocol/schemas/code-intelligence-index-response.schema.json",
+ "instance": "examples/protocol/code-intelligence-index-writer-response.json",
+ "expectedValid": true
+ },
+ {
+ "id": "code-intelligence-index-reader-response-current-valid",
+ "schema": "packages/protocol/schemas/code-intelligence-index-response.schema.json",
+ "instance": "examples/protocol/code-intelligence-index-reader-response.json",
+ "expectedValid": true
+ },
+ {
+ "id": "code-intelligence-index-absolute-path-invalid",
+ "schema": "packages/protocol/schemas/code-intelligence-index-request.schema.json",
+ "instance": "examples/protocol/compatibility/invalid/code-intelligence-index-absolute-path.json",
+ "expectedValid": false
+ },
+ {
+ "id": "code-intelligence-index-raw-sql-invalid",
+ "schema": "packages/protocol/schemas/code-intelligence-index-request.schema.json",
+ "instance": "examples/protocol/compatibility/invalid/code-intelligence-index-raw-sql.json",
+ "expectedValid": false
+ },
+ {
+ "id": "code-intelligence-index-unbounded-query-invalid",
+ "schema": "packages/protocol/schemas/code-intelligence-index-request.schema.json",
+ "instance": "examples/protocol/compatibility/invalid/code-intelligence-index-unbounded-query.json",
+ "expectedValid": false
+ },
+ {
+ "id": "code-intelligence-index-status-writer-invalid",
+ "schema": "packages/protocol/schemas/code-intelligence-index-request.schema.json",
+ "instance": "examples/protocol/compatibility/invalid/code-intelligence-index-status-writer.json",
+ "expectedValid": false
+ },
+ {
+ "id": "code-intelligence-index-doctor-repair-invalid",
+ "schema": "packages/protocol/schemas/code-intelligence-index-request.schema.json",
+ "instance": "examples/protocol/compatibility/invalid/code-intelligence-index-doctor-repair.json",
+ "expectedValid": false
}
]
}
diff --git a/examples/protocol/compatibility/invalid/code-intelligence-capability-matrix-false-full.json b/examples/protocol/compatibility/invalid/code-intelligence-capability-matrix-false-full.json
new file mode 100644
index 00000000..8495048c
--- /dev/null
+++ b/examples/protocol/compatibility/invalid/code-intelligence-capability-matrix-false-full.json
@@ -0,0 +1,32 @@
+{
+ "schemaVersion": "1.0.0",
+ "matrixVersion": "memory-recall-code-intelligence-capabilities-1",
+ "generatedAt": "2026-07-16T00:00:00.000Z",
+ "languages": [
+ {
+ "id": "typescript",
+ "displayName": "TypeScript",
+ "tier": 1,
+ "benchmarkStatus": "unmeasured",
+ "capabilities": {
+ "parse": {
+ "productStatus": "implemented",
+ "benchmarkStatus": "meets-floor",
+ "evidence": [
+ {
+ "class": "implementation",
+ "path": "providers/native/code-intelligence-rust/src/index.mjs"
+ }
+ ],
+ "limitations": [
+ "No fixture or real-repository benchmark evidence is attached."
+ ],
+ "claim": "full"
+ }
+ },
+ "limitations": [
+ "This fixture intentionally makes an unsupported full claim."
+ ]
+ }
+ ]
+}
diff --git a/examples/protocol/compatibility/invalid/code-intelligence-engine-request-absolute-root.json b/examples/protocol/compatibility/invalid/code-intelligence-engine-request-absolute-root.json
new file mode 100644
index 00000000..fdfc97cd
--- /dev/null
+++ b/examples/protocol/compatibility/invalid/code-intelligence-engine-request-absolute-root.json
@@ -0,0 +1,15 @@
+{
+ "protocolVersion": "1.0.0",
+ "requestId": "cireq_0123456789abcdef0123456789abcdef",
+ "workspaceId": "ws_local",
+ "operation": "graph.build",
+ "root": "/private/tmp/repository",
+ "deadlineMs": 30000,
+ "responseSchemaVersion": "1.0.0",
+ "arguments": {
+ "maxFiles": 1000,
+ "maxFileBytes": 524288,
+ "maxNodes": 5000,
+ "maxEdges": 10000
+ }
+}
diff --git a/examples/protocol/compatibility/invalid/code-intelligence-engine-response-raw-error.json b/examples/protocol/compatibility/invalid/code-intelligence-engine-response-raw-error.json
new file mode 100644
index 00000000..e949f7d2
--- /dev/null
+++ b/examples/protocol/compatibility/invalid/code-intelligence-engine-response-raw-error.json
@@ -0,0 +1,11 @@
+{
+ "protocolVersion": "1.0.0",
+ "requestId": "cireq_0123456789abcdef0123456789abcdef",
+ "ok": false,
+ "error": {
+ "code": "engine_internal",
+ "retryable": false,
+ "details": ["read /Users/example/private.ts"],
+ "rawError": "parser failed on export const secret = true"
+ }
+}
diff --git a/examples/protocol/compatibility/invalid/code-intelligence-graph-absolute-path.json b/examples/protocol/compatibility/invalid/code-intelligence-graph-absolute-path.json
new file mode 100644
index 00000000..a4d9ab9b
--- /dev/null
+++ b/examples/protocol/compatibility/invalid/code-intelligence-graph-absolute-path.json
@@ -0,0 +1,41 @@
+{
+ "schemaVersion": "1.0.0",
+ "graphVersion": "memory-recall-code-intelligence-1",
+ "repository": {
+ "id": "repo_0123456789abcdef0123456789abcdef",
+ "workspaceId": "ws_local",
+ "rootIdentityHash": "sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
+ },
+ "engine": {
+ "name": "memory-recall-native",
+ "version": "0.1.0",
+ "protocolVersion": "1.0.0"
+ },
+ "generation": {
+ "id": "cigen_0123456789abcdef0123456789abcdef",
+ "builtAt": "2026-07-16T00:00:00.000Z",
+ "freshness": "current"
+ },
+ "coverage": [],
+ "nodes": [
+ {
+ "id": "cinode_0123456789abcdef0123456789abcdef",
+ "kind": "file",
+ "language": "typescript",
+ "name": "private.ts",
+ "qualifiedName": "private.ts",
+ "locator": "/Users/example/private.ts",
+ "span": {
+ "startLine": 1,
+ "startColumn": 0,
+ "endLine": 1,
+ "endColumn": 1
+ },
+ "generationId": "cigen_0123456789abcdef0123456789abcdef",
+ "freshness": "current"
+ }
+ ],
+ "edges": [],
+ "diagnostics": [],
+ "graphFingerprint": "sha256:abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789"
+}
diff --git a/examples/protocol/compatibility/invalid/code-intelligence-graph-raw-body.json b/examples/protocol/compatibility/invalid/code-intelligence-graph-raw-body.json
new file mode 100644
index 00000000..246131a0
--- /dev/null
+++ b/examples/protocol/compatibility/invalid/code-intelligence-graph-raw-body.json
@@ -0,0 +1,42 @@
+{
+ "schemaVersion": "1.0.0",
+ "graphVersion": "memory-recall-code-intelligence-1",
+ "repository": {
+ "id": "repo_0123456789abcdef0123456789abcdef",
+ "workspaceId": "ws_local",
+ "rootIdentityHash": "sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
+ },
+ "engine": {
+ "name": "memory-recall-native",
+ "version": "0.1.0",
+ "protocolVersion": "1.0.0"
+ },
+ "generation": {
+ "id": "cigen_0123456789abcdef0123456789abcdef",
+ "builtAt": "2026-07-16T00:00:00.000Z",
+ "freshness": "current"
+ },
+ "coverage": [],
+ "nodes": [
+ {
+ "id": "cinode_0123456789abcdef0123456789abcdef",
+ "kind": "file",
+ "language": "typescript",
+ "name": "index.ts",
+ "qualifiedName": "src/index.ts",
+ "locator": "workspace://src/index.ts#L1-L1",
+ "span": {
+ "startLine": 1,
+ "startColumn": 0,
+ "endLine": 1,
+ "endColumn": 1
+ },
+ "generationId": "cigen_0123456789abcdef0123456789abcdef",
+ "freshness": "current",
+ "sourceText": "export const secret = true;"
+ }
+ ],
+ "edges": [],
+ "diagnostics": [],
+ "graphFingerprint": "sha256:abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789"
+}
diff --git a/examples/protocol/compatibility/invalid/code-intelligence-index-absolute-path.json b/examples/protocol/compatibility/invalid/code-intelligence-index-absolute-path.json
new file mode 100644
index 00000000..f1bfdb24
--- /dev/null
+++ b/examples/protocol/compatibility/invalid/code-intelligence-index-absolute-path.json
@@ -0,0 +1,11 @@
+{
+ "protocolVersion": "1.0.0",
+ "requestId": "ciidxreq_00000000000000000000000000000006",
+ "workspaceId": "ws_local",
+ "operation": "index.status",
+ "root": ".",
+ "indexLocator": "/Users/example/repository/.local/source-index/index.v1.sqlite",
+ "deadlineMs": 30000,
+ "responseSchemaVersion": "1.0.0",
+ "arguments": {}
+}
diff --git a/examples/protocol/compatibility/invalid/code-intelligence-index-doctor-repair.json b/examples/protocol/compatibility/invalid/code-intelligence-index-doctor-repair.json
new file mode 100644
index 00000000..f7d9942a
--- /dev/null
+++ b/examples/protocol/compatibility/invalid/code-intelligence-index-doctor-repair.json
@@ -0,0 +1,13 @@
+{
+ "protocolVersion": "1.0.0",
+ "requestId": "ciidxreq_0000000000000000000000000000000a",
+ "workspaceId": "ws_local",
+ "operation": "index.doctor",
+ "root": ".",
+ "indexLocator": "workspace://.local/source-index/index.v1.sqlite",
+ "deadlineMs": 30000,
+ "responseSchemaVersion": "1.0.0",
+ "arguments": {
+ "repair": true
+ }
+}
diff --git a/examples/protocol/compatibility/invalid/code-intelligence-index-raw-sql.json b/examples/protocol/compatibility/invalid/code-intelligence-index-raw-sql.json
new file mode 100644
index 00000000..2506453d
--- /dev/null
+++ b/examples/protocol/compatibility/invalid/code-intelligence-index-raw-sql.json
@@ -0,0 +1,15 @@
+{
+ "protocolVersion": "1.0.0",
+ "requestId": "ciidxreq_00000000000000000000000000000007",
+ "workspaceId": "ws_local",
+ "operation": "index.query",
+ "root": ".",
+ "indexLocator": "workspace://.local/source-index/index.v1.sqlite",
+ "deadlineMs": 30000,
+ "responseSchemaVersion": "1.0.0",
+ "arguments": {
+ "kind": "exact",
+ "limit": 10,
+ "sql": "SELECT * FROM index_nodes"
+ }
+}
diff --git a/examples/protocol/compatibility/invalid/code-intelligence-index-status-writer.json b/examples/protocol/compatibility/invalid/code-intelligence-index-status-writer.json
new file mode 100644
index 00000000..42e82198
--- /dev/null
+++ b/examples/protocol/compatibility/invalid/code-intelligence-index-status-writer.json
@@ -0,0 +1,13 @@
+{
+ "protocolVersion": "1.0.0",
+ "requestId": "ciidxreq_00000000000000000000000000000009",
+ "workspaceId": "ws_local",
+ "operation": "index.status",
+ "root": ".",
+ "indexLocator": "workspace://.local/source-index/index.v1.sqlite",
+ "deadlineMs": 30000,
+ "responseSchemaVersion": "1.0.0",
+ "arguments": {
+ "write": true
+ }
+}
diff --git a/examples/protocol/compatibility/invalid/code-intelligence-index-unbounded-query.json b/examples/protocol/compatibility/invalid/code-intelligence-index-unbounded-query.json
new file mode 100644
index 00000000..2cecf963
--- /dev/null
+++ b/examples/protocol/compatibility/invalid/code-intelligence-index-unbounded-query.json
@@ -0,0 +1,14 @@
+{
+ "protocolVersion": "1.0.0",
+ "requestId": "ciidxreq_00000000000000000000000000000008",
+ "workspaceId": "ws_local",
+ "operation": "index.query",
+ "root": ".",
+ "indexLocator": "workspace://.local/source-index/index.v1.sqlite",
+ "deadlineMs": 30000,
+ "responseSchemaVersion": "1.0.0",
+ "arguments": {
+ "kind": "summary",
+ "limit": 1000000
+ }
+}
diff --git a/examples/protocol/compatibility/invalid/code-intelligence-language-truth-absolute-path.json b/examples/protocol/compatibility/invalid/code-intelligence-language-truth-absolute-path.json
new file mode 100644
index 00000000..7326f90e
--- /dev/null
+++ b/examples/protocol/compatibility/invalid/code-intelligence-language-truth-absolute-path.json
@@ -0,0 +1,47 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_typescript_absolute_path",
+ "language": "typescript",
+ "source": {
+ "class": "fixture",
+ "ref": "fixture://sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
+ },
+ "review": {
+ "status": "reviewed",
+ "method": "source-locator",
+ "reviewedBy": "memory-recall-maintainer",
+ "reviewedAt": "2026-07-16T00:00:00.000Z"
+ },
+ "reviewCoverage": {
+ "declarations": "exhaustive",
+ "relationships": "not-applicable",
+ "calls": "not-applicable"
+ },
+ "capabilityClaims": {
+ "parse": "partial",
+ "structure": "partial",
+ "imports": "unmeasured",
+ "exports": "unmeasured",
+ "heritage": "unmeasured",
+ "types": "unmeasured",
+ "calls": "unmeasured",
+ "config": "unmeasured",
+ "frameworks": "unmeasured",
+ "impact": "unmeasured",
+ "processes": "unmeasured"
+ },
+ "items": [
+ {
+ "id": "cititem_build_index_function",
+ "semanticKey": "node:function:src/index.ts:buildIndex",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "function",
+ "name": "buildIndex",
+ "locator": "/Users/example/private/src/index.ts"
+ }
+ ],
+ "truthFingerprint": "sha256:0000000000000000000000000000000000000000000000000000000000000000"
+}
diff --git a/examples/protocol/compatibility/invalid/code-intelligence-language-truth-duplicate-id.json b/examples/protocol/compatibility/invalid/code-intelligence-language-truth-duplicate-id.json
new file mode 100644
index 00000000..de0e77c9
--- /dev/null
+++ b/examples/protocol/compatibility/invalid/code-intelligence-language-truth-duplicate-id.json
@@ -0,0 +1,57 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_typescript_duplicate_id",
+ "language": "typescript",
+ "source": {
+ "class": "fixture",
+ "ref": "fixture://sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
+ },
+ "review": {
+ "status": "reviewed",
+ "method": "source-locator",
+ "reviewedBy": "memory-recall-maintainer",
+ "reviewedAt": "2026-07-16T00:00:00.000Z"
+ },
+ "reviewCoverage": {
+ "declarations": "exhaustive",
+ "relationships": "not-applicable",
+ "calls": "not-applicable"
+ },
+ "capabilityClaims": {
+ "parse": "partial",
+ "structure": "partial",
+ "imports": "unmeasured",
+ "exports": "unmeasured",
+ "heritage": "unmeasured",
+ "types": "unmeasured",
+ "calls": "unmeasured",
+ "config": "unmeasured",
+ "frameworks": "unmeasured",
+ "impact": "unmeasured",
+ "processes": "unmeasured"
+ },
+ "items": [
+ {
+ "id": "cititem_duplicate_function",
+ "semanticKey": "node:function:src/index.ts:first",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "function",
+ "name": "first",
+ "locator": "workspace://src/index.ts#L1-L1"
+ },
+ {
+ "id": "cititem_duplicate_function",
+ "semanticKey": "node:function:src/index.ts:second",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "function",
+ "name": "second",
+ "locator": "workspace://src/index.ts#L2-L2"
+ }
+ ],
+ "truthFingerprint": "sha256:0000000000000000000000000000000000000000000000000000000000000000"
+}
diff --git a/examples/protocol/compatibility/invalid/code-intelligence-language-truth-raw-body.json b/examples/protocol/compatibility/invalid/code-intelligence-language-truth-raw-body.json
new file mode 100644
index 00000000..16ced17e
--- /dev/null
+++ b/examples/protocol/compatibility/invalid/code-intelligence-language-truth-raw-body.json
@@ -0,0 +1,48 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_typescript_raw_body",
+ "language": "typescript",
+ "source": {
+ "class": "fixture",
+ "ref": "fixture://sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
+ },
+ "review": {
+ "status": "reviewed",
+ "method": "source-locator",
+ "reviewedBy": "memory-recall-maintainer",
+ "reviewedAt": "2026-07-16T00:00:00.000Z"
+ },
+ "reviewCoverage": {
+ "declarations": "exhaustive",
+ "relationships": "not-applicable",
+ "calls": "not-applicable"
+ },
+ "capabilityClaims": {
+ "parse": "partial",
+ "structure": "partial",
+ "imports": "unmeasured",
+ "exports": "unmeasured",
+ "heritage": "unmeasured",
+ "types": "unmeasured",
+ "calls": "unmeasured",
+ "config": "unmeasured",
+ "frameworks": "unmeasured",
+ "impact": "unmeasured",
+ "processes": "unmeasured"
+ },
+ "items": [
+ {
+ "id": "cititem_build_index_function",
+ "semanticKey": "node:function:src/index.ts:buildIndex",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "function",
+ "name": "buildIndex",
+ "locator": "workspace://src/index.ts#L1-L3",
+ "rawSource": "export function buildIndex() {}"
+ }
+ ],
+ "truthFingerprint": "sha256:0000000000000000000000000000000000000000000000000000000000000000"
+}
diff --git a/examples/protocol/compatibility/invalid/code-intelligence-language-truth-unsupported-full.json b/examples/protocol/compatibility/invalid/code-intelligence-language-truth-unsupported-full.json
new file mode 100644
index 00000000..28c109f7
--- /dev/null
+++ b/examples/protocol/compatibility/invalid/code-intelligence-language-truth-unsupported-full.json
@@ -0,0 +1,47 @@
+{
+ "schemaVersion": "1.0.0",
+ "truthVersion": "memory-recall-code-intelligence-truth-1",
+ "id": "citruth_typescript_unsupported_full",
+ "language": "typescript",
+ "source": {
+ "class": "fixture",
+ "ref": "fixture://sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
+ },
+ "review": {
+ "status": "reviewed",
+ "method": "source-locator",
+ "reviewedBy": "memory-recall-maintainer",
+ "reviewedAt": "2026-07-16T00:00:00.000Z"
+ },
+ "reviewCoverage": {
+ "declarations": "exhaustive",
+ "relationships": "not-applicable",
+ "calls": "not-applicable"
+ },
+ "capabilityClaims": {
+ "parse": "full",
+ "structure": "full",
+ "imports": "unmeasured",
+ "exports": "unmeasured",
+ "heritage": "unmeasured",
+ "types": "unmeasured",
+ "calls": "unmeasured",
+ "config": "unmeasured",
+ "frameworks": "unmeasured",
+ "impact": "unmeasured",
+ "processes": "unmeasured"
+ },
+ "items": [
+ {
+ "id": "cititem_build_index_function",
+ "semanticKey": "node:function:src/index.ts:buildIndex",
+ "capability": "structure",
+ "expectation": "present",
+ "recordKind": "node",
+ "kind": "function",
+ "name": "buildIndex",
+ "locator": "workspace://src/index.ts#L1-L3"
+ }
+ ],
+ "truthFingerprint": "sha256:0000000000000000000000000000000000000000000000000000000000000000"
+}
diff --git a/examples/protocol/compatibility/invalid/source-graph-local-path.json b/examples/protocol/compatibility/invalid/source-graph-local-path.json
index b3911cf1..6b855b32 100644
--- a/examples/protocol/compatibility/invalid/source-graph-local-path.json
+++ b/examples/protocol/compatibility/invalid/source-graph-local-path.json
@@ -22,7 +22,7 @@
"workspaceId": "ws_ast",
"kind": "symbol",
"label": "/Users/rebel/private/auth.ts",
- "locator": "workspace://Users/rebel/private/auth.ts#L4-L8"
+ "locator": "workspace:///Users/rebel/project/src/auth.ts#L4-L8"
}
],
"edges": [],
diff --git a/examples/protocol/compatibility/invalid/source-graph-preview-local-path.json b/examples/protocol/compatibility/invalid/source-graph-preview-local-path.json
index 01c5eb90..c5daeb60 100644
--- a/examples/protocol/compatibility/invalid/source-graph-preview-local-path.json
+++ b/examples/protocol/compatibility/invalid/source-graph-preview-local-path.json
@@ -30,7 +30,7 @@
"workspaceId": "ws_local",
"kind": "symbol",
"label": "/Users/rebel/private/auth.ts",
- "locator": "workspace://Users/rebel/private/auth.ts"
+ "locator": "workspace:///Users/rebel/project/src/auth.ts"
}
],
"sampleEdges": [],
diff --git a/examples/protocol/recall-map.json b/examples/protocol/recall-map.json
index 58361fb0..72a38907 100644
--- a/examples/protocol/recall-map.json
+++ b/examples/protocol/recall-map.json
@@ -16,12 +16,20 @@
"status": "implemented",
"languages": ["javascript", "typescript"],
"coverage": {
- "status": "partial",
+ "status": "complete",
"analyzedFileCount": 2,
"maxFiles": 1000,
"maxFileBytes": 524288,
"diagnosticCount": 0,
"reasonCodes": ["static_js_ts_only", "bounded_file_scan"]
+ },
+ "snapshot": {
+ "status": "fresh",
+ "reuse": "cache",
+ "reason": null,
+ "validationMode": "watcher",
+ "builtAt": "2026-07-10T00:00:00.000Z",
+ "buildDurationMs": 18
}
},
"memory": {
@@ -38,6 +46,25 @@
}
],
"hotspots": [],
+ "groups": [
+ {
+ "id": "sggroup_111111111111111111111111",
+ "prefix": "src",
+ "fileCount": 1,
+ "symbolCount": 1,
+ "changedFileCount": 1,
+ "entryPoints": [
+ {
+ "nodeId": "sgnode_11111111111111111111111111111111",
+ "label": "startWorkspace",
+ "qualifiedLabel": null,
+ "locator": "workspace://src/index.ts#L1-L3",
+ "symbolKind": "function"
+ }
+ ]
+ }
+ ],
+ "groupRelations": [],
"search": {
"status": "available",
"queryFingerprint": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
diff --git a/examples/protocol/source-graph-preview.json b/examples/protocol/source-graph-preview.json
index 0aeadac3..860ea501 100644
--- a/examples/protocol/source-graph-preview.json
+++ b/examples/protocol/source-graph-preview.json
@@ -20,7 +20,7 @@
"nodeKindCounts": { "file": 1, "symbol": 1 },
"edgeKindCounts": { "defined_in": 1 },
"coverage": {
- "status": "complete",
+ "status": "partial",
"representedFileCount": 1,
"representedJsTsLocators": ["workspace://src/auth.ts"],
"skippedFileCount": 0,
@@ -35,8 +35,26 @@
"sourceRelevantExcludedDirectoryLocators": [],
"unsupportedFileCount": 0,
"unsupportedExtensions": [],
+ "unsupportedExtensionCounts": {},
+ "ignoredFileCount": 1,
+ "ignoredDirectoryCount": 0,
+ "ignoredSamples": ["workspace://src/legacy.test.ts"],
+ "ignoreRuleFingerprint": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+ "ignoreFileLocators": ["workspace://.recallignore"],
+ "candidateNodeCount": 2,
+ "representedNodeCount": 2,
+ "omittedNodeCount": 0,
+ "candidateNodeKindCounts": { "file": 1, "symbol": 1 },
+ "representedNodeKindCounts": { "file": 1, "symbol": 1 },
+ "omittedNodeKindCounts": {},
+ "candidateEdgeCount": 2,
+ "representedEdgeCount": 1,
+ "omittedEdgeCount": 1,
+ "candidateEdgeKindCounts": { "defined_in": 1, "references": 1 },
+ "representedEdgeKindCounts": { "defined_in": 1 },
+ "omittedEdgeKindCounts": { "references": 1 },
"maxFilesReached": false,
- "reasonCodes": []
+ "reasonCodes": ["edge_budget_reached"]
},
"hotspots": [
{
@@ -125,6 +143,75 @@
},
"trace": null,
"impact": null,
+ "orientation": {
+ "groups": [
+ {
+ "id": "sggroup_111111111111111111111111",
+ "prefix": "src",
+ "fileCount": 1,
+ "symbolCount": 1,
+ "changedFileCount": 0,
+ "entryPoints": [
+ {
+ "nodeId": "sgnode_22222222222222222222222222222222",
+ "label": "approveTokenReset",
+ "locator": "workspace://src/auth.ts#L2-L4",
+ "symbolKind": "method"
+ }
+ ]
+ }
+ ],
+ "relations": []
+ },
+ "focus": {
+ "nodeLimit": 200,
+ "edgeLimit": 400,
+ "nodes": [
+ {
+ "id": "sgnode_11111111111111111111111111111111",
+ "workspaceId": "ws_local",
+ "kind": "file",
+ "label": "src/auth.ts",
+ "locator": "workspace://src/auth.ts",
+ "contentHash": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
+ "sourceSnapshotId": "srcsnap_1111111111111111"
+ },
+ {
+ "id": "sgnode_22222222222222222222222222222222",
+ "workspaceId": "ws_local",
+ "kind": "symbol",
+ "label": "approveTokenReset",
+ "locator": "workspace://src/auth.ts#L2-L4",
+ "sourceRef": "symbol_11111111111111111111111111111111",
+ "symbolKind": "method",
+ "contentHash": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
+ "sourceSnapshotId": "srcsnap_1111111111111111"
+ }
+ ],
+ "edges": [
+ {
+ "id": "sgedge_11111111111111111111111111111111",
+ "workspaceId": "ws_local",
+ "kind": "defined_in",
+ "fromNodeId": "sgnode_22222222222222222222222222222222",
+ "toNodeId": "sgnode_11111111111111111111111111111111",
+ "locator": "workspace://src/auth.ts#L2-L4",
+ "sourceRef": "symbol_11111111111111111111111111111111",
+ "confidence": 1
+ }
+ ],
+ "omittedNodes": 0,
+ "omittedEdges": 0
+ },
+ "snapshot": {
+ "status": "fresh",
+ "reuse": "cache",
+ "reason": null,
+ "generation": 1,
+ "validationMode": "watcher",
+ "buildDurationMs": 18,
+ "builtAt": "2026-06-23T00:00:00.000Z"
+ },
"measurements": {
"schemaVersion": "1.0.0",
"measurementScope": "full graph nodes/edges/diagnostics versus delivered preview payload",
diff --git a/examples/protocol/source-graph.json b/examples/protocol/source-graph.json
index b90083ef..11350e35 100644
--- a/examples/protocol/source-graph.json
+++ b/examples/protocol/source-graph.json
@@ -24,7 +24,7 @@
"imports": 1
},
"coverage": {
- "status": "complete",
+ "status": "partial",
"representedFileCount": 2,
"representedJsTsLocators": [
"workspace://src/auth.ts",
@@ -42,8 +42,26 @@
"sourceRelevantExcludedDirectoryLocators": [],
"unsupportedFileCount": 0,
"unsupportedExtensions": [],
+ "unsupportedExtensionCounts": {},
+ "ignoredFileCount": 1,
+ "ignoredDirectoryCount": 0,
+ "ignoredSamples": ["workspace://src/legacy.test.ts"],
+ "ignoreRuleFingerprint": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+ "ignoreFileLocators": ["workspace://.recallignore"],
+ "candidateNodeCount": 6,
+ "representedNodeCount": 6,
+ "omittedNodeCount": 0,
+ "candidateNodeKindCounts": { "chunk": 1, "file": 2, "module": 1, "symbol": 2 },
+ "representedNodeKindCounts": { "chunk": 1, "file": 2, "module": 1, "symbol": 2 },
+ "omittedNodeKindCounts": {},
+ "candidateEdgeCount": 7,
+ "representedEdgeCount": 5,
+ "omittedEdgeCount": 2,
+ "candidateEdgeKindCounts": { "calls": 1, "contains": 1, "defined_in": 2, "imports": 1, "references": 2 },
+ "representedEdgeKindCounts": { "calls": 1, "contains": 1, "defined_in": 2, "imports": 1 },
+ "omittedEdgeKindCounts": { "references": 2 },
"maxFilesReached": false,
- "reasonCodes": []
+ "reasonCodes": ["edge_budget_reached"]
},
"hotspots": [
{
diff --git a/native-packages/darwin-arm64/package.json b/native-packages/darwin-arm64/package.json
new file mode 100644
index 00000000..45422f2f
--- /dev/null
+++ b/native-packages/darwin-arm64/package.json
@@ -0,0 +1,25 @@
+{
+ "name": "@memory-recall/native-darwin-arm64",
+ "version": "2.0.0",
+ "description": "Memory Recall native code-intelligence engine for macOS arm64.",
+ "license": "Apache-2.0",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/rebel0789/Memory-Recall.git"
+ },
+ "publishConfig": {
+ "access": "public"
+ },
+ "files": [
+ "bin/oaf",
+ "native-manifest.json",
+ "LICENSE",
+ "NOTICE"
+ ],
+ "memoryRecallNative": {
+ "target": "darwin-arm64",
+ "platform": "darwin",
+ "arch": "arm64",
+ "binary": "bin/oaf"
+ }
+}
diff --git a/native-packages/darwin-x64/package.json b/native-packages/darwin-x64/package.json
new file mode 100644
index 00000000..55aed7c8
--- /dev/null
+++ b/native-packages/darwin-x64/package.json
@@ -0,0 +1,25 @@
+{
+ "name": "@memory-recall/native-darwin-x64",
+ "version": "2.0.0",
+ "description": "Memory Recall native code-intelligence engine for macOS x64.",
+ "license": "Apache-2.0",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/rebel0789/Memory-Recall.git"
+ },
+ "publishConfig": {
+ "access": "public"
+ },
+ "files": [
+ "bin/oaf",
+ "native-manifest.json",
+ "LICENSE",
+ "NOTICE"
+ ],
+ "memoryRecallNative": {
+ "target": "darwin-x64",
+ "platform": "darwin",
+ "arch": "x64",
+ "binary": "bin/oaf"
+ }
+}
diff --git a/native-packages/linux-arm64-gnu/package.json b/native-packages/linux-arm64-gnu/package.json
new file mode 100644
index 00000000..71f687c1
--- /dev/null
+++ b/native-packages/linux-arm64-gnu/package.json
@@ -0,0 +1,26 @@
+{
+ "name": "@memory-recall/native-linux-arm64-gnu",
+ "version": "2.0.0",
+ "description": "Memory Recall native code-intelligence engine for Linux arm64 GNU.",
+ "license": "Apache-2.0",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/rebel0789/Memory-Recall.git"
+ },
+ "publishConfig": {
+ "access": "public"
+ },
+ "files": [
+ "bin/oaf",
+ "native-manifest.json",
+ "LICENSE",
+ "NOTICE"
+ ],
+ "memoryRecallNative": {
+ "target": "linux-arm64-gnu",
+ "platform": "linux",
+ "arch": "arm64",
+ "libc": "glibc",
+ "binary": "bin/oaf"
+ }
+}
diff --git a/native-packages/linux-x64-gnu/package.json b/native-packages/linux-x64-gnu/package.json
new file mode 100644
index 00000000..7ec848bd
--- /dev/null
+++ b/native-packages/linux-x64-gnu/package.json
@@ -0,0 +1,26 @@
+{
+ "name": "@memory-recall/native-linux-x64-gnu",
+ "version": "2.0.0",
+ "description": "Memory Recall native code-intelligence engine for Linux x64 GNU.",
+ "license": "Apache-2.0",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/rebel0789/Memory-Recall.git"
+ },
+ "publishConfig": {
+ "access": "public"
+ },
+ "files": [
+ "bin/oaf",
+ "native-manifest.json",
+ "LICENSE",
+ "NOTICE"
+ ],
+ "memoryRecallNative": {
+ "target": "linux-x64-gnu",
+ "platform": "linux",
+ "arch": "x64",
+ "libc": "glibc",
+ "binary": "bin/oaf"
+ }
+}
diff --git a/native-packages/win32-x64/package.json b/native-packages/win32-x64/package.json
new file mode 100644
index 00000000..62d1ca55
--- /dev/null
+++ b/native-packages/win32-x64/package.json
@@ -0,0 +1,25 @@
+{
+ "name": "@memory-recall/native-win32-x64",
+ "version": "2.0.0",
+ "description": "Memory Recall native code-intelligence engine for Windows x64.",
+ "license": "Apache-2.0",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/rebel0789/Memory-Recall.git"
+ },
+ "publishConfig": {
+ "access": "public"
+ },
+ "files": [
+ "bin/oaf.exe",
+ "native-manifest.json",
+ "LICENSE",
+ "NOTICE"
+ ],
+ "memoryRecallNative": {
+ "target": "win32-x64",
+ "platform": "win32",
+ "arch": "x64",
+ "binary": "bin/oaf.exe"
+ }
+}
diff --git a/package-lock.json b/package-lock.json
index 05e41363..d18d76a8 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,14 +1,15 @@
{
"name": "memory-recall",
- "version": "1.1.0",
+ "version": "2.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "memory-recall",
- "version": "1.1.0",
+ "version": "2.0.0",
"license": "Apache-2.0",
"workspaces": [
+ "native-packages/*",
"packages/*",
"providers/native/*",
"services/*"
@@ -19,8 +20,60 @@
},
"engines": {
"node": ">=22"
+ },
+ "optionalDependencies": {
+ "@memory-recall/native-darwin-arm64": "2.0.0",
+ "@memory-recall/native-darwin-x64": "2.0.0",
+ "@memory-recall/native-linux-arm64-gnu": "2.0.0",
+ "@memory-recall/native-linux-x64-gnu": "2.0.0",
+ "@memory-recall/native-win32-x64": "2.0.0"
}
},
+ "native-packages/darwin-arm64": {
+ "name": "@memory-recall/native-darwin-arm64",
+ "version": "2.0.0",
+ "license": "Apache-2.0"
+ },
+ "native-packages/darwin-x64": {
+ "name": "@memory-recall/native-darwin-x64",
+ "version": "2.0.0",
+ "license": "Apache-2.0"
+ },
+ "native-packages/linux-arm64-gnu": {
+ "name": "@memory-recall/native-linux-arm64-gnu",
+ "version": "2.0.0",
+ "license": "Apache-2.0"
+ },
+ "native-packages/linux-x64-gnu": {
+ "name": "@memory-recall/native-linux-x64-gnu",
+ "version": "2.0.0",
+ "license": "Apache-2.0"
+ },
+ "native-packages/win32-x64": {
+ "name": "@memory-recall/native-win32-x64",
+ "version": "2.0.0",
+ "license": "Apache-2.0"
+ },
+ "node_modules/@memory-recall/native-darwin-arm64": {
+ "resolved": "native-packages/darwin-arm64",
+ "link": true
+ },
+ "node_modules/@memory-recall/native-darwin-x64": {
+ "resolved": "native-packages/darwin-x64",
+ "link": true
+ },
+ "node_modules/@memory-recall/native-linux-arm64-gnu": {
+ "resolved": "native-packages/linux-arm64-gnu",
+ "link": true
+ },
+ "node_modules/@memory-recall/native-linux-x64-gnu": {
+ "resolved": "native-packages/linux-x64-gnu",
+ "link": true
+ },
+ "node_modules/@memory-recall/native-win32-x64": {
+ "resolved": "native-packages/win32-x64",
+ "link": true
+ },
"node_modules/@memory-recall/recall-map": {
"resolved": "packages/recall-map",
"link": true
@@ -77,10 +130,6 @@
"resolved": "providers/native/artifact-filesystem",
"link": true
},
- "node_modules/@open-agent-fabric/native-context-candidate-ast-code": {
- "resolved": "providers/native/context-candidate-ast-code",
- "link": true
- },
"node_modules/@open-agent-fabric/native-context-candidate-exact": {
"resolved": "providers/native/context-candidate-exact",
"link": true
@@ -289,11 +338,6 @@
"version": "0.2.0-dev",
"license": "Apache-2.0"
},
- "providers/native/context-candidate-ast-code": {
- "name": "@open-agent-fabric/native-context-candidate-ast-code",
- "version": "0.2.0-dev",
- "license": "Apache-2.0"
- },
"providers/native/context-candidate-exact": {
"name": "@open-agent-fabric/native-context-candidate-exact",
"version": "0.2.0-dev",
diff --git a/package.json b/package.json
index 09d2dfd6..751647eb 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "memory-recall",
- "version": "1.1.0",
+ "version": "2.0.0",
"type": "module",
"description": "Local-first Recall Map, repo memory, and context for coding agents.",
"keywords": [
@@ -34,7 +34,11 @@
".npmrc",
".nvmrc",
"*.json",
+ "!REPOSITORY_MANIFEST.json",
"*.md",
+ "!BOOTSTRAP_REPORT.md",
+ "!CLEANUP_REPORT.md",
+ "!REPOSITORY_MAP.md",
"CITATION.cff",
"Dockerfile",
"LICENSE",
@@ -56,55 +60,112 @@
"deploy/",
"docs/START_HERE.md",
"docs/adr/",
+ "!docs/adr/0023-production-rust-code-intelligence-engine.md",
+ "!docs/adr/0024-rust-sqlite-source-index.md",
"docs/agents/",
"docs/api/",
"docs/architecture/",
- "docs/assets/",
+ "!docs/assets/",
"docs/implementation/",
"docs/open-source/",
"docs/operations/",
"docs/product/",
"docs/release/",
+ "!docs/release/1.0-SBOM.json",
"docs/security/",
- "docs/testing/",
"docs/usage/",
"docs/ux/",
- "evals/",
+ "evals/",
+ "!evals/code-intelligence/capability-matrix.v1.json",
+ "!evals/code-intelligence/benchmark-gates.v1.json",
+ "!evals/code-intelligence/corpus-candidates.v1.json",
+ "!evals/code-intelligence/corpus.v1.json",
+ "!evals/code-intelligence/fixtures/",
+ "!evals/code-intelligence/results/",
+ "!evals/code-intelligence/truth/",
+ "!evals/README.md",
"examples/",
+ "!examples/protocol/code-intelligence-language-report.json",
+ "!examples/protocol/code-intelligence-language-truth.json",
+ "!examples/protocol/code-intelligence-graph.json",
+ "!examples/protocol/code-intelligence-engine-request.json",
+ "!examples/protocol/code-intelligence-engine-response.json",
+ "!examples/protocol/code-intelligence-index-build-request.json",
+ "!examples/protocol/code-intelligence-index-refresh-request.json",
+ "!examples/protocol/code-intelligence-index-repair-request.json",
+ "!examples/protocol/code-intelligence-index-status-request.json",
+ "!examples/protocol/code-intelligence-index-doctor-request.json",
+ "!examples/protocol/code-intelligence-index-query-request.json",
+ "!examples/protocol/code-intelligence-index-writer-response.json",
+ "!examples/protocol/code-intelligence-index-reader-response.json",
+ "!examples/protocol/compatibility/invalid/code-intelligence-capability-matrix-false-full.json",
+ "!examples/protocol/compatibility/invalid/code-intelligence-engine-request-absolute-root.json",
+ "!examples/protocol/compatibility/invalid/code-intelligence-engine-response-raw-error.json",
+ "!examples/protocol/compatibility/invalid/code-intelligence-index-absolute-path.json",
+ "!examples/protocol/compatibility/invalid/code-intelligence-index-raw-sql.json",
+ "!examples/protocol/compatibility/invalid/code-intelligence-index-unbounded-query.json",
+ "!examples/protocol/compatibility/invalid/code-intelligence-index-status-writer.json",
+ "!examples/protocol/compatibility/invalid/code-intelligence-index-doctor-repair.json",
+ "!examples/protocol/compatibility/invalid/code-intelligence-graph-absolute-path.json",
+ "!examples/protocol/compatibility/invalid/code-intelligence-graph-raw-body.json",
+ "!examples/protocol/compatibility/invalid/code-intelligence-language-truth-absolute-path.json",
+ "!examples/protocol/compatibility/invalid/code-intelligence-language-truth-duplicate-id.json",
+ "!examples/protocol/compatibility/invalid/code-intelligence-language-truth-raw-body.json",
+ "!examples/protocol/compatibility/invalid/code-intelligence-language-truth-unsupported-full.json",
"packages/",
+ "!packages/protocol/schemas/code-intelligence-benchmark-manifest.schema.json",
+ "!packages/protocol/schemas/code-intelligence-capability-matrix.schema.json",
"planning/",
"providers/",
"rfcs/",
- "rust/Cargo.lock",
- "rust/Cargo.toml",
- "rust/README.md",
- "rust/oaf-ingest/Cargo.toml",
- "rust/oaf-ingest/src/",
- "rust/oaf-store/Cargo.toml",
- "rust/oaf-store/src/",
- "rust/oaf-store/tests/",
- "rust/oaf/Cargo.toml",
- "rust/oaf/src/",
+ "!native-packages/",
"scripts/",
+ "!scripts/code-intelligence-phase8-gitnexus.mjs",
+ "!scripts/code-intelligence-million-node-index.mjs",
+ "!scripts/code-intelligence-batch-a.mjs",
+ "!scripts/code-intelligence-batch-b.mjs",
+ "!scripts/code-intelligence-batch-c.mjs",
+ "!scripts/code-intelligence-batch-d.mjs",
+ "!scripts/code-intelligence-batch-e.mjs",
+ "!scripts/code-intelligence-language-batch.mjs",
+ "!scripts/code-intelligence-phase2-tier1.mjs",
+ "!scripts/code-intelligence-phase3-index.mjs",
+ "!scripts/code-intelligence-phase4-intelligence.mjs",
+ "!scripts/code-intelligence-phase5-cross-service.mjs",
+ "!scripts/native-code-intelligence-consumer-smoke.mjs",
+ "!scripts/package-native-platform.mjs",
+ "!scripts/pin-code-intelligence-corpus.mjs",
+ "!scripts/pinned-repository-acquisition.mjs",
+ "!scripts/rust-realworld-bench.mjs",
+ "!scripts/rust-ingest-quality.mjs",
+ "!scripts/rust-intelligence-quality.mjs",
"services/",
"skills/",
"tools/",
"workflows/"
],
"workspaces": [
+ "native-packages/*",
"packages/*",
"providers/native/*",
"services/*"
],
+ "optionalDependencies": {
+ "@memory-recall/native-darwin-arm64": "2.0.0",
+ "@memory-recall/native-darwin-x64": "2.0.0",
+ "@memory-recall/native-linux-arm64-gnu": "2.0.0",
+ "@memory-recall/native-linux-x64-gnu": "2.0.0",
+ "@memory-recall/native-win32-x64": "2.0.0"
+ },
"scripts": {
"bootstrap": "node scripts/bootstrap.mjs",
"local:run": "npm run bootstrap && npm run native:smoke",
"dev": "node services/control-api/src/server.mjs",
"demo": "node scripts/demo.mjs",
"demo:memory-loop": "node apps/cli/oaf.mjs demo memory-loop --root . --format summary --contradicting-fact",
- "test": "node --test tests/*.test.mjs",
+ "test": "node --test --test-concurrency=1 tests/*.test.mjs",
"eval": "node scripts/run-evals.mjs",
- "eval:context-recall": "node scripts/context-recall-eval.mjs --dataset evals/context-recall/oaf-repo-gold.v1.json --mode compiler-code-search",
+ "eval:context-recall": "node scripts/context-recall-eval.mjs --dataset evals/context-recall/oaf-repo-gold.v1.json --mode lexical-pack",
"check": "node scripts/check.mjs",
"ci": "npm run check && npm run protocol:validate && npm test && npm run eval",
"doctor": "node scripts/doctor.mjs",
@@ -120,7 +181,11 @@
"oaf": "node apps/cli/oaf.mjs",
"native:smoke": "node scripts/native-smoke.mjs",
"consumer:smoke": "node scripts/consumer-smoke.mjs",
+ "native:code-intelligence:protocol": "node scripts/rust-code-intelligence-protocol-quality.mjs",
"consumer:browser-smoke": "npm exec --yes --package=playwright -- sh -c 'NODE_PATH=\"$(dirname \"$(dirname \"$(command -v playwright)\")\")\" node scripts/consumer-browser-smoke.mjs'",
+ "consumer:large-browser-smoke": "npm exec --yes --package=playwright -- sh -c 'NODE_PATH=\"$(dirname \"$(dirname \"$(command -v playwright)\")\")\" node scripts/large-repository-browser-smoke.mjs \"$@\"' --",
+ "consumer:large-overview-browser-smoke": "npm run consumer:large-browser-smoke -- --overview",
+ "consumer:large-map-browser-smoke": "npm run consumer:large-browser-smoke -- --map",
"ops:smoke": "node scripts/operations-smoke.mjs",
"release:readiness": "node scripts/release-readiness.mjs",
"release:readiness:check": "node scripts/release-readiness-check.mjs",
diff --git a/packages/adapter-contracts/src/index.mjs b/packages/adapter-contracts/src/index.mjs
index fccb1be0..44754f48 100644
--- a/packages/adapter-contracts/src/index.mjs
+++ b/packages/adapter-contracts/src/index.mjs
@@ -206,6 +206,22 @@ export class RepositoryGraphPort {
async export() { return notImplemented(RepositoryGraphPort.contract, 'export'); }
}
+export class CodeIntelligencePort {
+ static contract = 'CodeIntelligencePort';
+ static version = '1.0.0';
+ static requiredMethods = ['health', 'capabilities', 'buildGraph'];
+ static optionalMethods = ['buildIndex', 'refreshIndex', 'repairIndex', 'indexStatus', 'doctorIndex', 'queryIndex'];
+ async health() { return notImplemented(CodeIntelligencePort.contract, 'health'); }
+ async capabilities() { return notImplemented(CodeIntelligencePort.contract, 'capabilities'); }
+ async buildGraph() { return notImplemented(CodeIntelligencePort.contract, 'buildGraph'); }
+ async buildIndex() { return notImplemented(CodeIntelligencePort.contract, 'buildIndex'); }
+ async refreshIndex() { return notImplemented(CodeIntelligencePort.contract, 'refreshIndex'); }
+ async repairIndex() { return notImplemented(CodeIntelligencePort.contract, 'repairIndex'); }
+ async indexStatus() { return notImplemented(CodeIntelligencePort.contract, 'indexStatus'); }
+ async doctorIndex() { return notImplemented(CodeIntelligencePort.contract, 'doctorIndex'); }
+ async queryIndex() { return notImplemented(CodeIntelligencePort.contract, 'queryIndex'); }
+}
+
export class ResearchSourcePort {
static contract = 'ResearchSourcePort';
static requiredMethods = ['health', 'capabilities', 'collect'];
diff --git a/packages/harness-context/src/index.mjs b/packages/harness-context/src/index.mjs
index 824525dc..d02f2d3d 100644
--- a/packages/harness-context/src/index.mjs
+++ b/packages/harness-context/src/index.mjs
@@ -29,9 +29,7 @@ import {
normalizeMemoryPathsConfig
} from '../../memory-core/src/index.mjs';
import {
- DEFAULT_SOURCE_GRAPH_PREVIEW_MAX_FILES,
- DEFAULT_SOURCE_GRAPH_PREVIEW_MAX_FILE_BYTES,
- buildSourceGraphPreview
+ DEFAULT_SOURCE_GRAPH_PREVIEW_MAX_FILE_BYTES
} from '../../source-graph/src/index.mjs';
import {
buildOafReadOnlyResourceCatalog,
@@ -2194,31 +2192,27 @@ function compactSourceGraphImpact(impact, changedLocators) {
}
async function buildContextPackSourceGraph({
- root,
- workspaceId,
objective,
step,
changedLocators,
- maxFileBytes = DEFAULT_SOURCE_GRAPH_MAX_FILE_BYTES,
- createdAt
+ createdAt,
+ sourceGraphPreview = null
}) {
const query = sourceGraphPackQuery({ objective, step });
const normalizedChangedLocators = normalizeChangedLocators(changedLocators);
const queryFingerprint = hashRef(stableStringify({ query, changedLocators: normalizedChangedLocators, limit: 12, offset: 0 }));
- const graphMaxFileBytes = boundedSourceGraphMaxFileBytes(maxFileBytes);
try {
- const preview = await buildSourceGraphPreview({
- root,
- workspaceId,
- query,
- changedLocators: normalizedChangedLocators,
- limit: 12,
- sampleLimit: 1,
- maxFiles: DEFAULT_SOURCE_GRAPH_PREVIEW_MAX_FILES,
- maxFileBytes: graphMaxFileBytes,
- clock: () => createdAt
- });
- const results = compactSourceGraphResults(preview.search.results);
+ if (!sourceGraphPreview) throw new Error('source_graph_preview_required');
+ const preview = sourceGraphPreview;
+ const impactResults = (preview.impact?.affectedSymbols ?? []).map((item) => ({
+ resultType: 'node',
+ kind: 'symbol',
+ label: item.name,
+ locator: item.locator,
+ score: 1,
+ reasonCodes: item.reasonCodes?.length ? item.reasonCodes : ['changed_locator_impact']
+ }));
+ const results = compactSourceGraphResults([...preview.search.results, ...impactResults]);
const warnings = [];
if (preview.graph.diagnostics.length) warnings.push('source_graph_diagnostics_present');
const representedChangedLocators = new Set(preview.impact?.representedChangedLocators ?? []);
@@ -3572,6 +3566,7 @@ export async function buildContextPack({
tokenBudget = 4096,
maxBytes = DEFAULT_MAX_BYTES,
sourceGraphMaxFileBytes = Math.max(DEFAULT_SOURCE_GRAPH_MAX_FILE_BYTES, Number.isInteger(maxBytes) ? maxBytes : DEFAULT_MAX_BYTES),
+ sourceGraphPreview = null,
clock = () => new Date().toISOString()
} = {}) {
const normalizedTarget = normalizeTargetHarness(targetHarness);
@@ -3607,7 +3602,8 @@ export async function buildContextPack({
step,
changedLocators: normalizedChangedLocators,
maxFileBytes: sourceGraphMaxFileBytes,
- createdAt: preview.createdAt
+ createdAt: preview.createdAt,
+ sourceGraphPreview
});
const changedLocatorMetadata = await inspectChangedLocators({
root,
diff --git a/packages/protocol/README.md b/packages/protocol/README.md
index 48cb4560..049bd998 100644
--- a/packages/protocol/README.md
+++ b/packages/protocol/README.md
@@ -178,6 +178,80 @@ records, and provider configuration. The
native provider's root-bounded exact-slice helper is for internal reconstruction
tests only; it is not a protocol output or a candidate-source query result.
+## Code-intelligence graph schema
+
+`code-intelligence-graph.schema.json` defines the provider-neutral graph that
+the production native engine will emit. It fixes stable node, edge, language,
+resolution, evidence, generation, and freshness vocabularies while keeping
+responses bounded to 5,000 nodes, 10,000 edges, 64 coverage rows, and 1,000
+diagnostics. Closed records exclude raw source bodies, absolute paths, arbitrary
+metadata, provider identities, and parser-native object IDs.
+
+This contract is additive within protocol v1 and describes derived local state,
+not canonical memory. The existing `source-graph.schema.json` remains the
+JavaScript and TypeScript compatibility contract until the measured native
+migration is complete.
+
+`code-intelligence-engine-request.schema.json` and
+`code-intelligence-engine-response.schema.json` define the replaceable JSON
+Lines subprocess boundary between the Node product shell and the native engine.
+Requests are limited to a workspace-contained `graph.build` operation with a
+relative root, explicit deadline, bounded graph arguments, and an optional
+cancellation token. Success envelopes are validated twice: first against the
+engine response schema, then against `code-intelligence-graph.schema.json`.
+Failure envelopes contain stable codes and sanitized detail tokens only.
+
+The engine protocol carries no absolute root, source body, environment value,
+provider identity, raw parser error, network authority, write authority, or
+canonical-memory operation. Unknown major versions and additional fields fail
+closed. This boundary is additive within protocol v1; it does not switch the
+public source-graph provider by itself.
+
+`code-intelligence-language-truth.schema.json` and
+`code-intelligence-language-report.schema.json` define the reviewed evidence
+used to measure one language on one fixture or pinned repository scope. Truth
+records contain stable semantic keys, safe workspace locators, expected
+presence or absence, review coverage, and provenance. They do not contain raw
+source, absolute paths, repository contents, environment values, or engine
+output copied back as truth.
+
+The language evaluator reports exact numerators and denominators for declaration
+recall, relationship recall, and reviewed call precision. It also records
+duplicate canonical symbols, repository parse failures, graph-fingerprint
+determinism, per-capability item coverage, and explicit unmeasured or
+not-applicable states. Schema validation is followed by semantic auditing for
+duplicate truth IDs and semantic keys, source-class mismatches, unsupported
+`full` claims, and fingerprint drift. A zero-sized sample remains `null`; it is
+never presented as a passing percentage. Individual language reports cannot
+claim parity or leadership and do not change the public JavaScript engine.
+
+`code-intelligence-capability-matrix.schema.json` optionally carries
+`applicability` and `applicabilityRationale` on capability rows. The Tier 1
+semantic audit requires them even though the additive v1 schema keeps older
+matrix documents structurally valid. Evidence presence does not decide
+applicability. An applicable unsupported or unmeasured row remains non-green;
+only a language-semantic absence can use `not-applicable`.
+
+`code-intelligence-index-request.schema.json` and
+`code-intelligence-index-response.schema.json` define the Phase 3 SQLite source
+index boundary. Lifecycle operations are closed to build, refresh, explicit
+repair, status, doctor, and bounded query. Build and refresh carry explicit
+writer intent. Repair additionally requires the exact fingerprint emitted by a
+prior read-only doctor report. Status, doctor, and query cannot carry write or
+repair authority. The index
+locator is the fixed workspace-relative
+`workspace://.local/source-index/index.v1.sqlite` value, never a local path.
+Dependency, neighborhood, and impact queries may restrict traversal to 1..16
+unique canonical edge kinds. The filter is applied during every bounded index
+expansion, not after a broader graph has been read.
+
+Index responses expose only repository identity hashes, schema and engine
+versions, generation state, bounded counts, safe diagnostics, and locator-only
+query results. Read operations require zero local writes. Writer responses
+still require zero canonical-memory, network, and model writes. Raw source,
+absolute paths, raw SQL, raw database errors, and silent repair are outside the
+contract.
+
## Recall Map report schema
`recall-map.schema.json` is the additive internal contract for the read-only
diff --git a/packages/protocol/schemas/code-intelligence-benchmark-manifest.schema.json b/packages/protocol/schemas/code-intelligence-benchmark-manifest.schema.json
new file mode 100644
index 00000000..f3f4c3d1
--- /dev/null
+++ b/packages/protocol/schemas/code-intelligence-benchmark-manifest.schema.json
@@ -0,0 +1,65 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openagentfabric.dev/schemas/code-intelligence-benchmark-manifest.schema.json",
+ "title": "Memory Recall Code Intelligence Benchmark Corpus",
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["schemaVersion", "corpusVersion", "generatedAt", "sourceCandidatesFingerprint", "repositories", "corpusFingerprint"],
+ "properties": {
+ "schemaVersion": { "const": "1.0.0" },
+ "corpusVersion": { "const": "memory-recall-code-intelligence-corpus-1" },
+ "generatedAt": { "type": "string", "format": "date-time" },
+ "sourceCandidatesFingerprint": { "$ref": "#/$defs/fingerprint" },
+ "repositories": {
+ "type": "array",
+ "minItems": 43,
+ "maxItems": 43,
+ "items": { "$ref": "#/$defs/repository" }
+ },
+ "corpusFingerprint": { "$ref": "#/$defs/fingerprint" }
+ },
+ "$defs": {
+ "fingerprint": {
+ "type": "string",
+ "pattern": "^sha256:[a-f0-9]{64}$"
+ },
+ "language": {
+ "enum": ["typescript", "javascript", "python", "java", "kotlin", "csharp", "go", "rust", "php", "ruby", "swift", "c", "cpp", "dart"]
+ },
+ "repository": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["id", "url", "commit", "primaryLanguage", "sizeClass", "role", "licenseExpression", "licenseUrl"],
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^cirepo_[a-z0-9_]{3,120}$"
+ },
+ "url": {
+ "type": "string",
+ "pattern": "^https://github\\.com/[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+\\.git$"
+ },
+ "commit": {
+ "type": "string",
+ "pattern": "^[a-f0-9]{40}$"
+ },
+ "primaryLanguage": { "$ref": "#/$defs/language" },
+ "sizeClass": { "enum": ["small", "medium", "large"] },
+ "role": {
+ "type": "string",
+ "pattern": "^[a-z][a-z0-9-]{1,63}$"
+ },
+ "licenseExpression": {
+ "type": "string",
+ "minLength": 2,
+ "maxLength": 128,
+ "pattern": "^[A-Za-z0-9.+() -]+$"
+ },
+ "licenseUrl": {
+ "type": "string",
+ "pattern": "^https://github\\.com/[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+/(?:blob|tree)/HEAD/[A-Za-z0-9._/-]+$"
+ }
+ }
+ }
+ }
+}
diff --git a/packages/protocol/schemas/code-intelligence-capability-matrix.schema.json b/packages/protocol/schemas/code-intelligence-capability-matrix.schema.json
new file mode 100644
index 00000000..1f9391e5
--- /dev/null
+++ b/packages/protocol/schemas/code-intelligence-capability-matrix.schema.json
@@ -0,0 +1,104 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openagentfabric.dev/schemas/code-intelligence-capability-matrix.schema.json",
+ "title": "Memory Recall Code Intelligence Capability Matrix",
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["schemaVersion", "matrixVersion", "generatedAt", "languages"],
+ "properties": {
+ "schemaVersion": { "const": "1.0.0" },
+ "matrixVersion": { "const": "memory-recall-code-intelligence-capabilities-1" },
+ "generatedAt": { "type": "string", "format": "date-time" },
+ "languages": {
+ "type": "array",
+ "minItems": 22,
+ "maxItems": 22,
+ "items": { "$ref": "#/$defs/language" }
+ }
+ },
+ "$defs": {
+ "languageId": {
+ "enum": [
+ "typescript", "javascript", "python", "java", "kotlin", "csharp", "go",
+ "rust", "php", "ruby", "swift", "c", "cpp", "dart", "lua", "bash",
+ "sql", "objective-c", "scala", "r", "julia", "zig"
+ ]
+ },
+ "benchmarkStatus": {
+ "enum": ["not-applicable", "unmeasured", "does-not-meet-floor", "meets-floor"]
+ },
+ "evidence": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["class", "path"],
+ "properties": {
+ "class": { "enum": ["implementation", "fixture", "real-repo", "benchmark", "documentation"] },
+ "path": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 512,
+ "pattern": "^(?!/)(?![A-Za-z]:[\\\\/])(?!\\.\\.(?:/|$))(?!.*(?:^|/)\\.\\.(?:/|$))[A-Za-z0-9._~!$&'()*+,;=@%/\\[\\]-]+$"
+ }
+ }
+ },
+ "capability": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["productStatus", "benchmarkStatus", "evidence", "limitations"],
+ "properties": {
+ "applicability": { "enum": ["applicable", "not-applicable"] },
+ "applicabilityRationale": { "type": "string", "minLength": 1, "maxLength": 240 },
+ "productStatus": { "enum": ["implemented", "experimental", "specified", "unsupported"] },
+ "benchmarkStatus": { "$ref": "#/$defs/benchmarkStatus" },
+ "evidence": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 32,
+ "items": { "$ref": "#/$defs/evidence" }
+ },
+ "limitations": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 16,
+ "items": { "type": "string", "minLength": 1, "maxLength": 240 }
+ }
+ }
+ },
+ "capabilities": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["parse", "structure", "imports", "exports", "heritage", "types", "calls", "config", "frameworks", "impact", "processes"],
+ "properties": {
+ "parse": { "$ref": "#/$defs/capability" },
+ "structure": { "$ref": "#/$defs/capability" },
+ "imports": { "$ref": "#/$defs/capability" },
+ "exports": { "$ref": "#/$defs/capability" },
+ "heritage": { "$ref": "#/$defs/capability" },
+ "types": { "$ref": "#/$defs/capability" },
+ "calls": { "$ref": "#/$defs/capability" },
+ "config": { "$ref": "#/$defs/capability" },
+ "frameworks": { "$ref": "#/$defs/capability" },
+ "impact": { "$ref": "#/$defs/capability" },
+ "processes": { "$ref": "#/$defs/capability" }
+ }
+ },
+ "language": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["id", "displayName", "tier", "benchmarkStatus", "capabilities", "limitations"],
+ "properties": {
+ "id": { "$ref": "#/$defs/languageId" },
+ "displayName": { "type": "string", "minLength": 1, "maxLength": 64 },
+ "tier": { "enum": [1, 2] },
+ "benchmarkStatus": { "$ref": "#/$defs/benchmarkStatus" },
+ "capabilities": { "$ref": "#/$defs/capabilities" },
+ "limitations": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 16,
+ "items": { "type": "string", "minLength": 1, "maxLength": 240 }
+ }
+ }
+ }
+ }
+}
diff --git a/packages/protocol/schemas/code-intelligence-engine-request.schema.json b/packages/protocol/schemas/code-intelligence-engine-request.schema.json
new file mode 100644
index 00000000..f4c93a9b
--- /dev/null
+++ b/packages/protocol/schemas/code-intelligence-engine-request.schema.json
@@ -0,0 +1,85 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://memory-recall.dev/schemas/code-intelligence-engine-request.schema.json",
+ "title": "Code Intelligence Engine Request",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "protocolVersion",
+ "requestId",
+ "workspaceId",
+ "operation",
+ "root",
+ "deadlineMs",
+ "responseSchemaVersion",
+ "arguments"
+ ],
+ "properties": {
+ "protocolVersion": { "const": "1.0.0" },
+ "requestId": { "$ref": "#/$defs/requestId" },
+ "workspaceId": { "$ref": "#/$defs/workspaceId" },
+ "operation": { "const": "graph.build" },
+ "root": { "const": "." },
+ "deadlineMs": { "type": "integer", "minimum": 1, "maximum": 120000 },
+ "cancellationToken": { "$ref": "#/$defs/cancellationToken" },
+ "responseSchemaVersion": { "const": "1.0.0" },
+ "arguments": { "$ref": "#/$defs/arguments" }
+ },
+ "$defs": {
+ "requestId": {
+ "type": "string",
+ "pattern": "^cireq_[a-f0-9]{32}$"
+ },
+ "workspaceId": {
+ "type": "string",
+ "pattern": "^[a-z][a-z0-9_-]{0,127}$"
+ },
+ "cancellationToken": {
+ "type": "string",
+ "pattern": "^cancel_[a-f0-9]{32}$"
+ },
+ "language": {
+ "enum": [
+ "typescript",
+ "javascript",
+ "python",
+ "java",
+ "kotlin",
+ "csharp",
+ "go",
+ "rust",
+ "php",
+ "ruby",
+ "swift",
+ "c",
+ "cpp",
+ "dart",
+ "lua",
+ "bash",
+ "sql",
+ "objective-c",
+ "scala",
+ "r",
+ "julia",
+ "zig"
+ ]
+ },
+ "arguments": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["maxFiles", "maxFileBytes", "maxNodes", "maxEdges"],
+ "properties": {
+ "maxFiles": { "type": "integer", "minimum": 1, "maximum": 100000 },
+ "maxFileBytes": { "type": "integer", "minimum": 1, "maximum": 10485760 },
+ "maxNodes": { "type": "integer", "minimum": 1, "maximum": 5000 },
+ "maxEdges": { "type": "integer", "minimum": 1, "maximum": 10000 },
+ "languages": {
+ "type": "array",
+ "maxItems": 22,
+ "uniqueItems": true,
+ "items": { "$ref": "#/$defs/language" }
+ }
+ }
+ }
+ }
+}
diff --git a/packages/protocol/schemas/code-intelligence-engine-response.schema.json b/packages/protocol/schemas/code-intelligence-engine-response.schema.json
new file mode 100644
index 00000000..f6b0ba21
--- /dev/null
+++ b/packages/protocol/schemas/code-intelligence-engine-response.schema.json
@@ -0,0 +1,104 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://memory-recall.dev/schemas/code-intelligence-engine-response.schema.json",
+ "title": "Code Intelligence Engine Response",
+ "oneOf": [
+ { "$ref": "#/$defs/success" },
+ { "$ref": "#/$defs/failure" }
+ ],
+ "$defs": {
+ "requestId": {
+ "type": "string",
+ "pattern": "^cireq_[a-f0-9]{32}$"
+ },
+ "safeCode": {
+ "type": "string",
+ "pattern": "^[a-z][a-z0-9_.-]{0,127}$"
+ },
+ "safeDetail": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 160,
+ "pattern": "^[a-z0-9_. -]+$"
+ },
+ "safeguards": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "readOnly",
+ "localFilesWritten",
+ "networkCalls",
+ "modelCalls",
+ "rawSourceBodiesIncluded",
+ "absolutePathsIncluded"
+ ],
+ "properties": {
+ "readOnly": { "const": true },
+ "localFilesWritten": { "const": 0 },
+ "networkCalls": { "const": 0 },
+ "modelCalls": { "const": 0 },
+ "rawSourceBodiesIncluded": { "const": false },
+ "absolutePathsIncluded": { "const": false }
+ }
+ },
+ "measurements": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["scannedFileCount", "indexedFileCount", "nodeCount", "edgeCount"],
+ "properties": {
+ "scannedFileCount": { "type": "integer", "minimum": 0, "maximum": 100000 },
+ "indexedFileCount": { "type": "integer", "minimum": 0, "maximum": 100000 },
+ "nodeCount": { "type": "integer", "minimum": 0, "maximum": 5000 },
+ "edgeCount": { "type": "integer", "minimum": 0, "maximum": 10000 },
+ "omittedNodeCount": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "omittedEdgeCount": { "type": "integer", "minimum": 0, "maximum": 1000000000 }
+ }
+ },
+ "success": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["protocolVersion", "requestId", "ok", "result"],
+ "properties": {
+ "protocolVersion": { "const": "1.0.0" },
+ "requestId": { "$ref": "#/$defs/requestId" },
+ "ok": { "const": true },
+ "result": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["responseSchemaVersion", "graph", "measurements", "safeguards"],
+ "properties": {
+ "responseSchemaVersion": { "const": "1.0.0" },
+ "graph": { "type": "object" },
+ "measurements": { "$ref": "#/$defs/measurements" },
+ "safeguards": { "$ref": "#/$defs/safeguards" }
+ }
+ }
+ }
+ },
+ "failure": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["protocolVersion", "requestId", "ok", "error"],
+ "properties": {
+ "protocolVersion": { "const": "1.0.0" },
+ "requestId": { "$ref": "#/$defs/requestId" },
+ "ok": { "const": false },
+ "error": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["code", "retryable", "details"],
+ "properties": {
+ "code": { "$ref": "#/$defs/safeCode" },
+ "retryable": { "type": "boolean" },
+ "details": {
+ "type": "array",
+ "maxItems": 8,
+ "uniqueItems": true,
+ "items": { "$ref": "#/$defs/safeDetail" }
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/packages/protocol/schemas/code-intelligence-graph.schema.json b/packages/protocol/schemas/code-intelligence-graph.schema.json
new file mode 100644
index 00000000..443f6187
--- /dev/null
+++ b/packages/protocol/schemas/code-intelligence-graph.schema.json
@@ -0,0 +1,320 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openagentfabric.dev/schemas/code-intelligence-graph.schema.json",
+ "title": "Memory Recall Code Intelligence Graph",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "schemaVersion",
+ "graphVersion",
+ "repository",
+ "engine",
+ "generation",
+ "coverage",
+ "nodes",
+ "edges",
+ "diagnostics",
+ "graphFingerprint"
+ ],
+ "properties": {
+ "schemaVersion": { "const": "1.0.0" },
+ "graphVersion": { "const": "memory-recall-code-intelligence-1" },
+ "repository": { "$ref": "#/$defs/repository" },
+ "engine": { "$ref": "#/$defs/engine" },
+ "generation": { "$ref": "#/$defs/generation" },
+ "coverage": {
+ "type": "array",
+ "maxItems": 64,
+ "items": { "$ref": "#/$defs/coverage" }
+ },
+ "nodes": {
+ "type": "array",
+ "maxItems": 5000,
+ "items": { "$ref": "#/$defs/node" }
+ },
+ "edges": {
+ "type": "array",
+ "maxItems": 10000,
+ "items": { "$ref": "#/$defs/edge" }
+ },
+ "diagnostics": {
+ "type": "array",
+ "maxItems": 1000,
+ "items": { "$ref": "#/$defs/diagnostic" }
+ },
+ "graphFingerprint": { "$ref": "#/$defs/fingerprint" }
+ },
+ "$defs": {
+ "fingerprint": {
+ "type": "string",
+ "pattern": "^sha256:[a-f0-9]{64}$"
+ },
+ "workspaceId": {
+ "type": "string",
+ "pattern": "^[a-z][a-z0-9_-]{0,127}$"
+ },
+ "locator": {
+ "type": "string",
+ "pattern": "^workspace://(?!/)(?![^/]*%)(?![A-Za-z][A-Za-z0-9+.-]*:)(?!\\.\\.(?:/|$))(?!.*\\/\\.\\.(?:/|$))(?!.*%(?:2[eEfF]|3[aA]|5[cC]|25))[A-Za-z0-9._~!$&'()*+,;=@%/\\[\\]-]{1,512}(?:#L[0-9]+-L[0-9]+)?$"
+ },
+ "language": {
+ "enum": [
+ "typescript",
+ "javascript",
+ "python",
+ "java",
+ "kotlin",
+ "csharp",
+ "go",
+ "rust",
+ "php",
+ "ruby",
+ "swift",
+ "c",
+ "cpp",
+ "dart",
+ "lua",
+ "bash",
+ "sql",
+ "objective-c",
+ "scala",
+ "r",
+ "julia",
+ "zig"
+ ]
+ },
+ "freshness": {
+ "enum": ["current", "stale", "partial", "unavailable"]
+ },
+ "nodeId": {
+ "type": "string",
+ "pattern": "^cinode_[a-f0-9]{32}$"
+ },
+ "edgeId": {
+ "type": "string",
+ "pattern": "^ciedge_[a-f0-9]{32}$"
+ },
+ "generationId": {
+ "type": "string",
+ "pattern": "^cigen_[a-f0-9]{32}$"
+ },
+ "safeName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 240,
+ "pattern": "^[A-Za-z0-9_$@~./*+,:()\\[\\]<># -]+$"
+ },
+ "stableToken": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64,
+ "pattern": "^[a-z][a-z0-9_.-]*$"
+ },
+ "span": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["startLine", "startColumn", "endLine", "endColumn"],
+ "properties": {
+ "startLine": { "type": "integer", "minimum": 1, "maximum": 1000000000 },
+ "startColumn": { "type": "integer", "minimum": 0, "maximum": 1000000 },
+ "endLine": { "type": "integer", "minimum": 1, "maximum": 1000000000 },
+ "endColumn": { "type": "integer", "minimum": 0, "maximum": 1000000 }
+ }
+ },
+ "repository": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["id", "workspaceId", "rootIdentityHash"],
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^repo_[a-f0-9]{32}$"
+ },
+ "workspaceId": { "$ref": "#/$defs/workspaceId" },
+ "rootIdentityHash": { "$ref": "#/$defs/fingerprint" }
+ }
+ },
+ "engine": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["name", "version", "protocolVersion"],
+ "properties": {
+ "name": { "const": "memory-recall-native" },
+ "version": {
+ "type": "string",
+ "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+(?:-[a-z0-9.-]+)?$"
+ },
+ "protocolVersion": { "const": "1.0.0" }
+ }
+ },
+ "generation": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["id", "builtAt", "freshness"],
+ "properties": {
+ "id": { "$ref": "#/$defs/generationId" },
+ "builtAt": { "type": "string", "format": "date-time" },
+ "freshness": { "$ref": "#/$defs/freshness" }
+ }
+ },
+ "coverage": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["language", "support", "discoveredFileCount", "indexedFileCount", "failedFileCount"],
+ "properties": {
+ "language": { "$ref": "#/$defs/language" },
+ "support": { "enum": ["full", "partial", "parse-only", "unsupported"] },
+ "discoveredFileCount": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "indexedFileCount": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "failedFileCount": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "omittedFileCount": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "reasonCodes": {
+ "type": "array",
+ "maxItems": 32,
+ "uniqueItems": true,
+ "items": { "$ref": "#/$defs/stableToken" }
+ }
+ }
+ },
+ "node": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["id", "kind", "language", "name", "qualifiedName", "locator", "span", "generationId", "freshness"],
+ "properties": {
+ "id": { "$ref": "#/$defs/nodeId" },
+ "kind": {
+ "enum": [
+ "repository",
+ "directory",
+ "file",
+ "package",
+ "module",
+ "namespace",
+ "library",
+ "function",
+ "method",
+ "class",
+ "interface",
+ "struct",
+ "enum",
+ "trait",
+ "protocol",
+ "mixin",
+ "extension",
+ "type_alias",
+ "build_target",
+ "variable",
+ "constant",
+ "route",
+ "configuration_resource",
+ "framework_component",
+ "execution_process",
+ "community"
+ ]
+ },
+ "language": { "$ref": "#/$defs/language" },
+ "languageKind": { "$ref": "#/$defs/stableToken" },
+ "name": { "$ref": "#/$defs/safeName" },
+ "qualifiedName": { "$ref": "#/$defs/safeName" },
+ "locator": { "$ref": "#/$defs/locator" },
+ "span": { "$ref": "#/$defs/span" },
+ "generationId": { "$ref": "#/$defs/generationId" },
+ "freshness": { "$ref": "#/$defs/freshness" },
+ "contentHash": { "$ref": "#/$defs/fingerprint" }
+ }
+ },
+ "evidence": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["kind", "locator", "span"],
+ "properties": {
+ "kind": {
+ "enum": ["declaration", "import", "export", "heritage", "type", "call", "config", "framework", "process", "lexical"]
+ },
+ "locator": { "$ref": "#/$defs/locator" },
+ "span": { "$ref": "#/$defs/span" }
+ }
+ },
+ "resolver": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["name", "version"],
+ "properties": {
+ "name": { "$ref": "#/$defs/stableToken" },
+ "version": {
+ "type": "string",
+ "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+(?:-[a-z0-9.-]+)?$"
+ }
+ }
+ },
+ "edge": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "kind",
+ "fromNodeId",
+ "toNodeId",
+ "evidence",
+ "resolver",
+ "confidence",
+ "resolution",
+ "language",
+ "generationId",
+ "freshness"
+ ],
+ "properties": {
+ "id": { "$ref": "#/$defs/edgeId" },
+ "kind": {
+ "enum": [
+ "contains",
+ "defines",
+ "imports",
+ "exports",
+ "re_exports",
+ "references",
+ "calls",
+ "constructs",
+ "inherits",
+ "implements",
+ "extends",
+ "mixes_in",
+ "extends_type",
+ "part_of",
+ "entry_point",
+ "handles_route",
+ "reads",
+ "writes",
+ "emits",
+ "listens",
+ "depends_on",
+ "member_of",
+ "process_step",
+ "cross_repo_depends_on"
+ ]
+ },
+ "fromNodeId": { "$ref": "#/$defs/nodeId" },
+ "toNodeId": { "$ref": "#/$defs/nodeId" },
+ "evidence": { "$ref": "#/$defs/evidence" },
+ "resolver": { "$ref": "#/$defs/resolver" },
+ "confidence": { "type": "number", "minimum": 0, "maximum": 1 },
+ "resolution": { "enum": ["exact", "typed", "inferred", "lexical", "unresolved"] },
+ "language": { "$ref": "#/$defs/language" },
+ "generationId": { "$ref": "#/$defs/generationId" },
+ "freshness": { "$ref": "#/$defs/freshness" }
+ }
+ },
+ "diagnostic": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["code", "severity"],
+ "properties": {
+ "code": { "$ref": "#/$defs/stableToken" },
+ "severity": { "enum": ["info", "warning", "error"] },
+ "language": { "$ref": "#/$defs/language" },
+ "locator": { "$ref": "#/$defs/locator" },
+ "count": { "type": "integer", "minimum": 1, "maximum": 1000000000 }
+ }
+ }
+ }
+}
diff --git a/packages/protocol/schemas/code-intelligence-index-request.schema.json b/packages/protocol/schemas/code-intelligence-index-request.schema.json
new file mode 100644
index 00000000..332bc742
--- /dev/null
+++ b/packages/protocol/schemas/code-intelligence-index-request.schema.json
@@ -0,0 +1,200 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://memory-recall.dev/schemas/code-intelligence-index-request.schema.json",
+ "title": "Code Intelligence Index Request",
+ "oneOf": [
+ { "$ref": "#/$defs/build" },
+ { "$ref": "#/$defs/refresh" },
+ { "$ref": "#/$defs/repair" },
+ { "$ref": "#/$defs/status" },
+ { "$ref": "#/$defs/doctor" },
+ { "$ref": "#/$defs/query" }
+ ],
+ "$defs": {
+ "requestId": { "type": "string", "pattern": "^ciidxreq_[a-f0-9]{32}$" },
+ "workspaceId": { "type": "string", "pattern": "^[a-z][a-z0-9_-]{0,127}$" },
+ "cancellationToken": { "type": "string", "pattern": "^cancel_[a-f0-9]{32}$" },
+ "indexLocator": { "const": "workspace://.local/source-index/index.v1.sqlite" },
+ "language": {
+ "enum": [
+ "typescript", "javascript", "python", "java", "kotlin", "csharp", "go", "rust",
+ "php", "ruby", "swift", "c", "cpp", "dart", "lua", "bash", "sql", "objective-c",
+ "scala", "r", "julia", "zig"
+ ]
+ },
+ "edgeKind": {
+ "enum": [
+ "contains", "defines", "imports", "exports", "re_exports", "references", "calls", "constructs",
+ "inherits", "implements", "extends", "mixes_in", "extends_type", "part_of", "entry_point", "handles_route",
+ "reads", "writes", "emits", "listens", "depends_on", "member_of", "process_step", "cross_repo_depends_on"
+ ]
+ },
+ "writerArguments": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["write", "maxFiles", "maxFileBytes", "maxNodes", "maxEdges"],
+ "properties": {
+ "write": { "const": true },
+ "maxFiles": { "type": "integer", "minimum": 1, "maximum": 1000000 },
+ "maxFileBytes": { "type": "integer", "minimum": 1, "maximum": 10485760 },
+ "maxNodes": { "type": "integer", "minimum": 1, "maximum": 1000000 },
+ "maxEdges": { "type": "integer", "minimum": 1, "maximum": 5000000 },
+ "languages": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 22,
+ "uniqueItems": true,
+ "items": { "$ref": "#/$defs/language" }
+ }
+ }
+ },
+ "emptyArguments": {
+ "type": "object",
+ "additionalProperties": false,
+ "maxProperties": 0
+ },
+ "repairArguments": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["write", "confirmRepairPlan", "maxFiles", "maxFileBytes", "maxNodes", "maxEdges"],
+ "properties": {
+ "write": { "const": true },
+ "confirmRepairPlan": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
+ "maxFiles": { "type": "integer", "minimum": 1, "maximum": 1000000 },
+ "maxFileBytes": { "type": "integer", "minimum": 1, "maximum": 10485760 },
+ "maxNodes": { "type": "integer", "minimum": 1, "maximum": 1000000 },
+ "maxEdges": { "type": "integer", "minimum": 1, "maximum": 5000000 },
+ "languages": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 22,
+ "uniqueItems": true,
+ "items": { "$ref": "#/$defs/language" }
+ }
+ }
+ },
+ "queryArguments": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["kind", "limit"],
+ "properties": {
+ "kind": { "enum": ["summary", "exact", "search", "neighborhood", "dependencies", "trace", "impact", "routes", "communities", "processes"] },
+ "query": { "type": "string", "minLength": 1, "maxLength": 160, "pattern": "^[A-Za-z0-9_.$:/#@ -]+$" },
+ "locator": { "type": "string", "pattern": "^workspace://[A-Za-z0-9._/@+\\[\\]-]+(?:/[A-Za-z0-9._@+\\[\\]-]+)*(?:#L[1-9][0-9]{0,8}(?:-L[1-9][0-9]{0,8})?)?$", "maxLength": 512 },
+ "direction": { "enum": ["inbound", "outbound", "both"] },
+ "depth": { "type": "integer", "minimum": 0, "maximum": 8 },
+ "edgeKinds": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 16,
+ "uniqueItems": true,
+ "items": { "$ref": "#/$defs/edgeKind" }
+ },
+ "limit": { "type": "integer", "minimum": 1, "maximum": 100 },
+ "cursor": { "type": "string", "pattern": "^idxcur_[a-f0-9]{32}$" }
+ }
+ },
+ "build": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["protocolVersion", "requestId", "workspaceId", "operation", "root", "indexLocator", "deadlineMs", "responseSchemaVersion", "arguments"],
+ "properties": {
+ "protocolVersion": { "const": "1.0.0" },
+ "requestId": { "$ref": "#/$defs/requestId" },
+ "workspaceId": { "$ref": "#/$defs/workspaceId" },
+ "operation": { "const": "index.build" },
+ "root": { "const": "." },
+ "indexLocator": { "$ref": "#/$defs/indexLocator" },
+ "deadlineMs": { "type": "integer", "minimum": 1, "maximum": 300000 },
+ "cancellationToken": { "$ref": "#/$defs/cancellationToken" },
+ "responseSchemaVersion": { "const": "1.0.0" },
+ "arguments": { "$ref": "#/$defs/writerArguments" }
+ }
+ },
+ "refresh": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["protocolVersion", "requestId", "workspaceId", "operation", "root", "indexLocator", "deadlineMs", "responseSchemaVersion", "arguments"],
+ "properties": {
+ "protocolVersion": { "const": "1.0.0" },
+ "requestId": { "$ref": "#/$defs/requestId" },
+ "workspaceId": { "$ref": "#/$defs/workspaceId" },
+ "operation": { "const": "index.refresh" },
+ "root": { "const": "." },
+ "indexLocator": { "$ref": "#/$defs/indexLocator" },
+ "deadlineMs": { "type": "integer", "minimum": 1, "maximum": 300000 },
+ "cancellationToken": { "$ref": "#/$defs/cancellationToken" },
+ "responseSchemaVersion": { "const": "1.0.0" },
+ "arguments": { "$ref": "#/$defs/writerArguments" }
+ }
+ },
+ "repair": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["protocolVersion", "requestId", "workspaceId", "operation", "root", "indexLocator", "deadlineMs", "responseSchemaVersion", "arguments"],
+ "properties": {
+ "protocolVersion": { "const": "1.0.0" },
+ "requestId": { "$ref": "#/$defs/requestId" },
+ "workspaceId": { "$ref": "#/$defs/workspaceId" },
+ "operation": { "const": "index.repair" },
+ "root": { "const": "." },
+ "indexLocator": { "$ref": "#/$defs/indexLocator" },
+ "deadlineMs": { "type": "integer", "minimum": 1, "maximum": 300000 },
+ "cancellationToken": { "$ref": "#/$defs/cancellationToken" },
+ "responseSchemaVersion": { "const": "1.0.0" },
+ "arguments": { "$ref": "#/$defs/repairArguments" }
+ }
+ },
+ "status": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["protocolVersion", "requestId", "workspaceId", "operation", "root", "indexLocator", "deadlineMs", "responseSchemaVersion", "arguments"],
+ "properties": {
+ "protocolVersion": { "const": "1.0.0" },
+ "requestId": { "$ref": "#/$defs/requestId" },
+ "workspaceId": { "$ref": "#/$defs/workspaceId" },
+ "operation": { "const": "index.status" },
+ "root": { "const": "." },
+ "indexLocator": { "$ref": "#/$defs/indexLocator" },
+ "deadlineMs": { "type": "integer", "minimum": 1, "maximum": 120000 },
+ "cancellationToken": { "$ref": "#/$defs/cancellationToken" },
+ "responseSchemaVersion": { "const": "1.0.0" },
+ "arguments": { "$ref": "#/$defs/emptyArguments" }
+ }
+ },
+ "doctor": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["protocolVersion", "requestId", "workspaceId", "operation", "root", "indexLocator", "deadlineMs", "responseSchemaVersion", "arguments"],
+ "properties": {
+ "protocolVersion": { "const": "1.0.0" },
+ "requestId": { "$ref": "#/$defs/requestId" },
+ "workspaceId": { "$ref": "#/$defs/workspaceId" },
+ "operation": { "const": "index.doctor" },
+ "root": { "const": "." },
+ "indexLocator": { "$ref": "#/$defs/indexLocator" },
+ "deadlineMs": { "type": "integer", "minimum": 1, "maximum": 120000 },
+ "cancellationToken": { "$ref": "#/$defs/cancellationToken" },
+ "responseSchemaVersion": { "const": "1.0.0" },
+ "arguments": { "$ref": "#/$defs/emptyArguments" }
+ }
+ },
+ "query": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["protocolVersion", "requestId", "workspaceId", "operation", "root", "indexLocator", "deadlineMs", "responseSchemaVersion", "arguments"],
+ "properties": {
+ "protocolVersion": { "const": "1.0.0" },
+ "requestId": { "$ref": "#/$defs/requestId" },
+ "workspaceId": { "$ref": "#/$defs/workspaceId" },
+ "operation": { "const": "index.query" },
+ "root": { "const": "." },
+ "indexLocator": { "$ref": "#/$defs/indexLocator" },
+ "deadlineMs": { "type": "integer", "minimum": 1, "maximum": 120000 },
+ "cancellationToken": { "$ref": "#/$defs/cancellationToken" },
+ "responseSchemaVersion": { "const": "1.0.0" },
+ "arguments": { "$ref": "#/$defs/queryArguments" }
+ }
+ }
+ }
+}
diff --git a/packages/protocol/schemas/code-intelligence-index-response.schema.json b/packages/protocol/schemas/code-intelligence-index-response.schema.json
new file mode 100644
index 00000000..97786474
--- /dev/null
+++ b/packages/protocol/schemas/code-intelligence-index-response.schema.json
@@ -0,0 +1,253 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://memory-recall.dev/schemas/code-intelligence-index-response.schema.json",
+ "title": "Code Intelligence Index Response",
+ "oneOf": [
+ { "$ref": "#/$defs/writerSuccess" },
+ { "$ref": "#/$defs/readerSuccess" },
+ { "$ref": "#/$defs/failure" }
+ ],
+ "$defs": {
+ "requestId": { "type": "string", "pattern": "^ciidxreq_[a-f0-9]{32}$" },
+ "safeCode": { "type": "string", "pattern": "^[a-z][a-z0-9_.-]{0,127}$" },
+ "safeDetail": { "type": "string", "minLength": 1, "maxLength": 160, "pattern": "^[a-z0-9_. -]+$" },
+ "timestamp": { "type": ["string", "null"], "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9:.]+Z$" },
+ "summary": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["fileCount", "nodeCount", "edgeCount", "unresolvedCount", "omittedCount", "databaseBytes"],
+ "properties": {
+ "fileCount": { "type": "integer", "minimum": 0, "maximum": 1000000 },
+ "nodeCount": { "type": "integer", "minimum": 0, "maximum": 1000000 },
+ "edgeCount": { "type": "integer", "minimum": 0, "maximum": 5000000 },
+ "unresolvedCount": { "type": "integer", "minimum": 0, "maximum": 5000000 },
+ "omittedCount": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "databaseBytes": { "type": "integer", "minimum": 0, "maximum": 1099511627776 }
+ }
+ },
+ "health": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["status", "reasonCodes", "lastSuccessfulRefreshAt", "repairRequired"],
+ "properties": {
+ "status": { "enum": ["absent", "ready", "stale", "partial", "migration-required", "interrupted", "corrupt", "wrong-repository", "unsupported-schema"] },
+ "reasonCodes": { "type": "array", "maxItems": 16, "uniqueItems": true, "items": { "$ref": "#/$defs/safeCode" } },
+ "lastSuccessfulRefreshAt": { "$ref": "#/$defs/timestamp" },
+ "repairRequired": { "type": "boolean" },
+ "lastValidGenerationReadable": { "type": "boolean" },
+ "repairPlanFingerprint": { "type": ["string", "null"], "pattern": "^sha256:[a-f0-9]{64}$" },
+ "repairBackupFileName": { "type": ["string", "null"], "pattern": "^\\.memory-recall-source-index-[a-f0-9]{16}\\.bak$" }
+ }
+ },
+ "measurements": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["durationMs", "parsedFileCount", "reusedFileCount", "changedFileCount", "deletedFileCount", "localFilesWritten"],
+ "properties": {
+ "durationMs": { "type": "integer", "minimum": 0, "maximum": 300000 },
+ "parsedFileCount": { "type": "integer", "minimum": 0, "maximum": 1000000 },
+ "reusedFileCount": { "type": "integer", "minimum": 0, "maximum": 1000000 },
+ "changedFileCount": { "type": "integer", "minimum": 0, "maximum": 1000000 },
+ "deletedFileCount": { "type": "integer", "minimum": 0, "maximum": 1000000 },
+ "localFilesWritten": { "type": "integer", "minimum": 0, "maximum": 2 }
+ }
+ },
+ "diagnostic": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["code", "count"],
+ "properties": {
+ "code": { "$ref": "#/$defs/safeCode" },
+ "count": { "type": "integer", "minimum": 1, "maximum": 1000000000 }
+ }
+ },
+ "resultItem": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["id", "kind", "label", "locator", "confidence", "generation"],
+ "properties": {
+ "id": { "type": "string", "pattern": "^cinode_[a-f0-9]{32}$" },
+ "kind": { "$ref": "#/$defs/safeCode" },
+ "label": { "type": "string", "minLength": 1, "maxLength": 160, "pattern": "^[A-Za-z0-9_.$:/#@ +()<>,-]+$" },
+ "locator": { "type": "string", "pattern": "^workspace://[A-Za-z0-9._/@+\\[\\]-]+(?:/[A-Za-z0-9._@+\\[\\]-]+)*(?:#L[1-9][0-9]{0,8}(?:-L[1-9][0-9]{0,8})?)?$", "maxLength": 512 },
+ "confidence": { "type": "number", "minimum": 0, "maximum": 1 },
+ "generation": { "type": "integer", "minimum": 1, "maximum": 9007199254740991 }
+ }
+ },
+ "relationshipItem": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["id", "kind", "fromNodeId", "toNodeId", "locator", "confidence", "resolution", "resolver", "resolverVersion", "generation", "stale"],
+ "properties": {
+ "id": { "type": "string", "pattern": "^ciedge_[a-f0-9]{32}$" },
+ "kind": { "$ref": "#/$defs/safeCode" },
+ "fromNodeId": { "type": "string", "pattern": "^cinode_[a-f0-9]{32}$" },
+ "toNodeId": { "type": "string", "pattern": "^cinode_[a-f0-9]{32}$" },
+ "locator": { "type": "string", "pattern": "^workspace://[A-Za-z0-9._/@+\\[\\]-]+(?:/[A-Za-z0-9._@+\\[\\]-]+)*(?:#L[1-9][0-9]{0,8}(?:-L[1-9][0-9]{0,8})?)?$", "maxLength": 512 },
+ "confidence": { "type": "number", "minimum": 0, "maximum": 1 },
+ "resolution": { "$ref": "#/$defs/safeCode" },
+ "resolver": { "$ref": "#/$defs/safeCode" },
+ "resolverVersion": { "type": "string", "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$" },
+ "generation": { "type": "integer", "minimum": 1, "maximum": 9007199254740991 },
+ "stale": { "type": "boolean" }
+ }
+ },
+ "communityProjection": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["id", "label", "pathPrefix", "nodeIds", "relationshipIds", "representedNodeCount", "representedRelationshipCount", "generation", "algorithmVersion", "truncated"],
+ "properties": {
+ "id": { "type": "string", "pattern": "^cicommunity_[a-f0-9]{32}$" },
+ "label": { "type": "string", "minLength": 1, "maxLength": 160, "pattern": "^[A-Za-z0-9._/@+\\[\\]-]+(?:/[A-Za-z0-9._@+\\[\\]-]+)*$" },
+ "pathPrefix": { "type": "string", "pattern": "^workspace://[A-Za-z0-9._/@+\\[\\]-]+(?:/[A-Za-z0-9._@+\\[\\]-]+)*$", "maxLength": 512 },
+ "nodeIds": { "type": "array", "minItems": 1, "maxItems": 100, "uniqueItems": true, "items": { "type": "string", "pattern": "^cinode_[a-f0-9]{32}$" } },
+ "relationshipIds": { "type": "array", "maxItems": 100, "uniqueItems": true, "items": { "type": "string", "pattern": "^ciedge_[a-f0-9]{32}$" } },
+ "representedNodeCount": { "type": "integer", "minimum": 1, "maximum": 1000000 },
+ "representedRelationshipCount": { "type": "integer", "minimum": 0, "maximum": 2500000 },
+ "generation": { "type": "integer", "minimum": 1, "maximum": 9007199254740991 },
+ "algorithmVersion": { "const": "label-propagation-v1" },
+ "truncated": { "type": "boolean" }
+ }
+ },
+ "processProjection": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["id", "label", "entryNodeId", "entryRelationshipId", "sinkNodeId", "sinkKind", "nodeIds", "relationshipIds", "confidence", "generation", "algorithmVersion", "truncated"],
+ "properties": {
+ "id": { "type": "string", "pattern": "^ciprocess_[a-f0-9]{32}$" },
+ "label": { "type": "string", "minLength": 1, "maxLength": 160, "pattern": "^[A-Za-z0-9_.$:/#@ +()<>,-]+$" },
+ "entryNodeId": { "type": "string", "pattern": "^cinode_[a-f0-9]{32}$" },
+ "entryRelationshipId": { "type": "string", "pattern": "^ciedge_[a-f0-9]{32}$" },
+ "sinkNodeId": { "type": "string", "pattern": "^cinode_[a-f0-9]{32}$" },
+ "sinkKind": { "$ref": "#/$defs/safeCode" },
+ "nodeIds": { "type": "array", "minItems": 2, "maxItems": 9, "uniqueItems": true, "items": { "type": "string", "pattern": "^cinode_[a-f0-9]{32}$" } },
+ "relationshipIds": { "type": "array", "minItems": 1, "maxItems": 8, "uniqueItems": true, "items": { "type": "string", "pattern": "^ciedge_[a-f0-9]{32}$" } },
+ "confidence": { "type": "number", "minimum": 0.75, "maximum": 1 },
+ "generation": { "type": "integer", "minimum": 1, "maximum": 9007199254740991 },
+ "algorithmVersion": { "const": "entry-path-v1" },
+ "truncated": { "type": "boolean" }
+ }
+ },
+ "writerSafeguards": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["readOnly", "localFilesWritten", "canonicalMemoryWrites", "networkCalls", "modelCalls", "rawSourceBodiesIncluded", "absolutePathsIncluded", "repairPerformed"],
+ "properties": {
+ "readOnly": { "const": false },
+ "localFilesWritten": { "type": "integer", "minimum": 0, "maximum": 2 },
+ "canonicalMemoryWrites": { "const": 0 },
+ "networkCalls": { "const": 0 },
+ "modelCalls": { "const": 0 },
+ "rawSourceBodiesIncluded": { "const": false },
+ "absolutePathsIncluded": { "const": false },
+ "repairPerformed": { "type": "boolean" }
+ }
+ },
+ "readerSafeguards": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["readOnly", "localFilesWritten", "canonicalMemoryWrites", "networkCalls", "modelCalls", "rawSourceBodiesIncluded", "absolutePathsIncluded", "repairPerformed"],
+ "properties": {
+ "readOnly": { "const": true },
+ "localFilesWritten": { "const": 0 },
+ "canonicalMemoryWrites": { "const": 0 },
+ "networkCalls": { "const": 0 },
+ "modelCalls": { "const": 0 },
+ "rawSourceBodiesIncluded": { "const": false },
+ "absolutePathsIncluded": { "const": false },
+ "repairPerformed": { "const": false }
+ }
+ },
+ "writerSuccess": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["protocolVersion", "requestId", "ok", "result"],
+ "properties": {
+ "protocolVersion": { "const": "1.0.0" },
+ "requestId": { "$ref": "#/$defs/requestId" },
+ "ok": { "const": true },
+ "result": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["responseSchemaVersion", "operation", "repositoryIdentityHash", "indexLocator", "storageSchemaVersion", "engineVersion", "state", "activeGeneration", "freshness", "health", "summary", "measurements", "results", "truncated", "nextCursor", "diagnostics", "safeguards"],
+ "properties": {
+ "responseSchemaVersion": { "const": "1.0.0" },
+ "operation": { "enum": ["index.build", "index.refresh", "index.repair"] },
+ "repositoryIdentityHash": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
+ "indexLocator": { "const": "workspace://.local/source-index/index.v1.sqlite" },
+ "storageSchemaVersion": { "const": "1" },
+ "engineVersion": { "type": "string", "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$" },
+ "state": { "enum": ["ready", "partial", "stale"] },
+ "activeGeneration": { "type": "integer", "minimum": 1, "maximum": 9007199254740991 },
+ "freshness": { "enum": ["current", "stale", "partial"] },
+ "health": { "$ref": "#/$defs/health" },
+ "summary": { "$ref": "#/$defs/summary" },
+ "measurements": { "$ref": "#/$defs/measurements" },
+ "results": { "type": "array", "maxItems": 0 },
+ "truncated": { "const": false },
+ "nextCursor": { "type": "null" },
+ "diagnostics": { "type": "array", "maxItems": 32, "items": { "$ref": "#/$defs/diagnostic" } },
+ "safeguards": { "$ref": "#/$defs/writerSafeguards" }
+ }
+ }
+ }
+ },
+ "readerSuccess": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["protocolVersion", "requestId", "ok", "result"],
+ "properties": {
+ "protocolVersion": { "const": "1.0.0" },
+ "requestId": { "$ref": "#/$defs/requestId" },
+ "ok": { "const": true },
+ "result": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["responseSchemaVersion", "operation", "repositoryIdentityHash", "indexLocator", "storageSchemaVersion", "engineVersion", "state", "activeGeneration", "freshness", "health", "summary", "measurements", "results", "truncated", "nextCursor", "diagnostics", "safeguards"],
+ "properties": {
+ "responseSchemaVersion": { "const": "1.0.0" },
+ "operation": { "enum": ["index.status", "index.doctor", "index.query"] },
+ "repositoryIdentityHash": { "type": ["string", "null"], "pattern": "^sha256:[a-f0-9]{64}$" },
+ "indexLocator": { "const": "workspace://.local/source-index/index.v1.sqlite" },
+ "storageSchemaVersion": { "type": ["string", "null"], "pattern": "^[1-9][0-9]{0,8}$" },
+ "engineVersion": { "type": "string", "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$" },
+ "state": { "enum": ["absent", "ready", "stale", "partial", "invalid"] },
+ "activeGeneration": { "type": ["integer", "null"], "minimum": 1, "maximum": 9007199254740991 },
+ "freshness": { "enum": ["absent", "current", "stale", "partial", "unknown"] },
+ "health": { "$ref": "#/$defs/health" },
+ "summary": { "$ref": "#/$defs/summary" },
+ "measurements": { "$ref": "#/$defs/measurements" },
+ "results": { "type": "array", "maxItems": 100, "items": { "$ref": "#/$defs/resultItem" } },
+ "relationships": { "type": "array", "maxItems": 100, "items": { "$ref": "#/$defs/relationshipItem" } },
+ "communities": { "type": "array", "maxItems": 100, "items": { "$ref": "#/$defs/communityProjection" } },
+ "processes": { "type": "array", "maxItems": 100, "items": { "$ref": "#/$defs/processProjection" } },
+ "truncated": { "type": "boolean" },
+ "nextCursor": { "type": ["string", "null"], "pattern": "^idxcur_[a-f0-9]{32}$" },
+ "diagnostics": { "type": "array", "maxItems": 32, "items": { "$ref": "#/$defs/diagnostic" } },
+ "safeguards": { "$ref": "#/$defs/readerSafeguards" }
+ }
+ }
+ }
+ },
+ "failure": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["protocolVersion", "requestId", "ok", "error"],
+ "properties": {
+ "protocolVersion": { "const": "1.0.0" },
+ "requestId": { "$ref": "#/$defs/requestId" },
+ "ok": { "const": false },
+ "error": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["code", "retryable", "details"],
+ "properties": {
+ "code": { "$ref": "#/$defs/safeCode" },
+ "retryable": { "type": "boolean" },
+ "details": { "type": "array", "maxItems": 8, "uniqueItems": true, "items": { "$ref": "#/$defs/safeDetail" } }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/packages/protocol/schemas/code-intelligence-language-report.schema.json b/packages/protocol/schemas/code-intelligence-language-report.schema.json
new file mode 100644
index 00000000..0100e689
--- /dev/null
+++ b/packages/protocol/schemas/code-intelligence-language-report.schema.json
@@ -0,0 +1,111 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openagentfabric.dev/schemas/code-intelligence-language-report.schema.json",
+ "title": "Memory Recall Code Intelligence Language Evaluation Report",
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["schemaVersion", "reportVersion", "truthId", "language", "sourceRef", "graphFingerprints", "reviewCoverage", "metrics", "capabilities", "failures", "gateDecision", "claims", "safeguards", "reportFingerprint"],
+ "properties": {
+ "schemaVersion": { "const": "1.0.0" },
+ "reportVersion": { "const": "memory-recall-code-intelligence-language-report-1" },
+ "truthId": { "type": "string", "pattern": "^citruth_[a-z0-9_]{3,120}$" },
+ "language": { "$ref": "#/$defs/language" },
+ "sourceRef": { "type": "string", "pattern": "^(?:fixture://sha256:[a-f0-9]{64}|corpus://cirepo_[a-z0-9_]{3,120}@[a-f0-9]{40}#[A-Za-z0-9._/-]{1,240})$" },
+ "graphFingerprints": { "type": "array", "minItems": 2, "maxItems": 10, "items": { "$ref": "#/$defs/fingerprint" } },
+ "reviewCoverage": { "$ref": "#/$defs/reviewCoverage" },
+ "metrics": { "$ref": "#/$defs/metrics" },
+ "capabilities": { "type": "array", "minItems": 11, "maxItems": 11, "items": { "$ref": "#/$defs/capabilityResult" } },
+ "failures": { "type": "array", "maxItems": 10000, "items": { "$ref": "#/$defs/failure" } },
+ "gateDecision": { "enum": ["pass", "fail"] },
+ "claims": { "$ref": "#/$defs/claims" },
+ "safeguards": { "$ref": "#/$defs/safeguards" },
+ "reportFingerprint": { "$ref": "#/$defs/fingerprint" }
+ },
+ "$defs": {
+ "fingerprint": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
+ "language": { "enum": ["typescript", "javascript", "python", "java", "kotlin", "csharp", "go", "rust", "php", "ruby", "swift", "c", "cpp", "dart"] },
+ "capability": { "enum": ["parse", "structure", "imports", "exports", "heritage", "types", "calls", "config", "frameworks", "impact", "processes"] },
+ "reviewExtent": { "enum": ["exhaustive", "sampled", "not-applicable"] },
+ "ratio": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["numerator", "denominator", "value"],
+ "properties": {
+ "numerator": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "denominator": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "value": { "type": ["number", "null"], "minimum": 0, "maximum": 1 }
+ }
+ },
+ "reviewCoverage": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["declarations", "relationships", "calls"],
+ "properties": {
+ "declarations": { "$ref": "#/$defs/reviewExtent" },
+ "relationships": { "$ref": "#/$defs/reviewExtent" },
+ "calls": { "$ref": "#/$defs/reviewExtent" }
+ }
+ },
+ "metrics": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["declarationRecall", "relationshipRecall", "reviewedCallPrecision", "duplicateCanonicalSymbolCount", "parseFailureCount", "deterministicGraphFingerprint", "truthItemCount", "matchedTruthItemCount"],
+ "properties": {
+ "declarationRecall": { "$ref": "#/$defs/ratio" },
+ "relationshipRecall": { "$ref": "#/$defs/ratio" },
+ "reviewedCallPrecision": { "$ref": "#/$defs/ratio" },
+ "duplicateCanonicalSymbolCount": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "parseFailureCount": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "deterministicGraphFingerprint": { "type": "boolean" },
+ "truthItemCount": { "type": "integer", "minimum": 1, "maximum": 10000 },
+ "matchedTruthItemCount": { "type": "integer", "minimum": 0, "maximum": 10000 }
+ }
+ },
+ "capabilityResult": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["id", "claim", "benchmarkStatus", "itemCount", "matchedItemCount"],
+ "properties": {
+ "id": { "$ref": "#/$defs/capability" },
+ "claim": { "enum": ["full", "partial", "parse-only", "unsupported", "unmeasured"] },
+ "benchmarkStatus": { "enum": ["not-applicable", "unmeasured", "does-not-meet-floor", "meets-floor"] },
+ "itemCount": { "type": "integer", "minimum": 0, "maximum": 10000 },
+ "matchedItemCount": { "type": "integer", "minimum": 0, "maximum": 10000 }
+ }
+ },
+ "failure": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["code"],
+ "properties": {
+ "code": { "type": "string", "pattern": "^[a-z][a-z0-9_.-]{1,63}$" },
+ "itemId": { "type": "string", "pattern": "^cititem_[a-z0-9_]{3,120}$" },
+ "capability": { "$ref": "#/$defs/capability" }
+ }
+ },
+ "claims": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["accuracyFloorMet", "parity", "leadership"],
+ "properties": {
+ "accuracyFloorMet": { "type": "boolean" },
+ "parity": { "const": false },
+ "leadership": { "const": false }
+ }
+ },
+ "safeguards": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["rawSourceStored", "absolutePathsStored", "environmentVariablesStored", "networkCalls", "modelCalls", "canonicalMemoryWrites", "workspaceWrites"],
+ "properties": {
+ "rawSourceStored": { "const": false },
+ "absolutePathsStored": { "const": false },
+ "environmentVariablesStored": { "const": false },
+ "networkCalls": { "const": 0 },
+ "modelCalls": { "const": 0 },
+ "canonicalMemoryWrites": { "const": 0 },
+ "workspaceWrites": { "const": 0 }
+ }
+ }
+ }
+}
diff --git a/packages/protocol/schemas/code-intelligence-language-truth.schema.json b/packages/protocol/schemas/code-intelligence-language-truth.schema.json
new file mode 100644
index 00000000..f64185f5
--- /dev/null
+++ b/packages/protocol/schemas/code-intelligence-language-truth.schema.json
@@ -0,0 +1,175 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openagentfabric.dev/schemas/code-intelligence-language-truth.schema.json",
+ "title": "Memory Recall Code Intelligence Language Truth",
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["schemaVersion", "truthVersion", "id", "language", "source", "review", "reviewCoverage", "capabilityClaims", "items", "truthFingerprint"],
+ "properties": {
+ "schemaVersion": { "const": "1.0.0" },
+ "truthVersion": { "const": "memory-recall-code-intelligence-truth-1" },
+ "id": { "type": "string", "pattern": "^citruth_[a-z0-9_]{3,120}$" },
+ "language": { "$ref": "#/$defs/language" },
+ "source": { "$ref": "#/$defs/source" },
+ "review": { "$ref": "#/$defs/review" },
+ "reviewCoverage": { "$ref": "#/$defs/reviewCoverage" },
+ "capabilityClaims": { "$ref": "#/$defs/capabilityClaims" },
+ "items": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 10000,
+ "items": {
+ "oneOf": [
+ { "$ref": "#/$defs/nodeTruth" },
+ { "$ref": "#/$defs/edgeTruth" },
+ { "$ref": "#/$defs/diagnosticTruth" }
+ ]
+ }
+ },
+ "truthFingerprint": { "$ref": "#/$defs/fingerprint" }
+ },
+ "$defs": {
+ "fingerprint": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
+ "language": {
+ "enum": ["typescript", "javascript", "python", "java", "kotlin", "csharp", "go", "rust", "php", "ruby", "swift", "c", "cpp", "dart"]
+ },
+ "capability": {
+ "enum": ["parse", "structure", "imports", "exports", "heritage", "types", "calls", "config", "frameworks", "impact", "processes"]
+ },
+ "claim": { "enum": ["full", "partial", "parse-only", "unsupported", "unmeasured"] },
+ "reviewExtent": { "enum": ["exhaustive", "sampled", "not-applicable"] },
+ "locator": {
+ "type": "string",
+ "pattern": "^workspace://(?!/)(?![^/]*%)(?![A-Za-z][A-Za-z0-9+.-]*:)(?!\\.\\.(?:/|$))(?!.*\\/\\.\\.(?:/|$))[A-Za-z0-9._~!$&'()*+,;=@%/\\[\\]-]{1,512}(?:#L[0-9]+-L[0-9]+)?$"
+ },
+ "safeName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 240,
+ "pattern": "^[A-Za-z0-9_$@~./*+,:()\\[\\]<># -]+$"
+ },
+ "semanticKey": {
+ "type": "string",
+ "minLength": 3,
+ "maxLength": 512,
+ "pattern": "^[A-Za-z0-9_.:/#@~-]+$"
+ },
+ "itemId": { "type": "string", "pattern": "^cititem_[a-z0-9_]{3,120}$" },
+ "nodeKind": {
+ "enum": ["file", "package", "module", "library", "namespace", "function", "method", "class", "interface", "struct", "enum", "trait", "protocol", "mixin", "extension", "type_alias", "variable", "constant", "route", "configuration_resource", "framework_component", "execution_process", "build_target"]
+ },
+ "edgeKind": {
+ "enum": ["contains", "defines", "imports", "exports", "re_exports", "references", "calls", "constructs", "inherits", "implements", "extends", "mixes_in", "extends_type", "part_of", "entry_point", "handles_route", "reads", "writes", "emits", "listens", "depends_on", "member_of", "process_step"]
+ },
+ "resolution": { "enum": ["exact", "typed", "inferred", "lexical", "unresolved"] },
+ "source": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["class", "ref"],
+ "properties": {
+ "class": { "enum": ["fixture", "real-repo"] },
+ "ref": {
+ "type": "string",
+ "pattern": "^(?:fixture://sha256:[a-f0-9]{64}|corpus://cirepo_[a-z0-9_]{3,120}@[a-f0-9]{40}#[A-Za-z0-9._/-]{1,240})$"
+ }
+ }
+ },
+ "review": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["status", "method", "reviewedBy", "reviewedAt"],
+ "properties": {
+ "status": { "const": "reviewed" },
+ "method": { "const": "source-locator" },
+ "reviewedBy": { "type": "string", "pattern": "^[a-z][a-z0-9_.-]{1,63}$" },
+ "reviewedAt": { "type": "string", "format": "date-time" }
+ }
+ },
+ "reviewCoverage": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["declarations", "relationships", "calls"],
+ "properties": {
+ "declarations": { "$ref": "#/$defs/reviewExtent" },
+ "relationships": { "$ref": "#/$defs/reviewExtent" },
+ "calls": { "$ref": "#/$defs/reviewExtent" }
+ }
+ },
+ "capabilityClaims": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["parse", "structure", "imports", "exports", "heritage", "types", "calls", "config", "frameworks", "impact", "processes"],
+ "properties": {
+ "parse": { "$ref": "#/$defs/claim" },
+ "structure": { "$ref": "#/$defs/claim" },
+ "imports": { "$ref": "#/$defs/claim" },
+ "exports": { "$ref": "#/$defs/claim" },
+ "heritage": { "$ref": "#/$defs/claim" },
+ "types": { "$ref": "#/$defs/claim" },
+ "calls": { "$ref": "#/$defs/claim" },
+ "config": { "$ref": "#/$defs/claim" },
+ "frameworks": { "$ref": "#/$defs/claim" },
+ "impact": { "$ref": "#/$defs/claim" },
+ "processes": { "$ref": "#/$defs/claim" }
+ }
+ },
+ "nodeSelector": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["kind", "name", "locator"],
+ "properties": {
+ "kind": { "$ref": "#/$defs/nodeKind" },
+ "name": { "$ref": "#/$defs/safeName" },
+ "qualifiedName": { "$ref": "#/$defs/safeName" },
+ "locator": { "$ref": "#/$defs/locator" }
+ }
+ },
+ "nodeTruth": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["id", "semanticKey", "capability", "expectation", "recordKind", "kind", "name", "locator"],
+ "properties": {
+ "id": { "$ref": "#/$defs/itemId" },
+ "semanticKey": { "$ref": "#/$defs/semanticKey" },
+ "capability": { "$ref": "#/$defs/capability" },
+ "expectation": { "enum": ["present", "absent"] },
+ "recordKind": { "const": "node" },
+ "kind": { "$ref": "#/$defs/nodeKind" },
+ "name": { "$ref": "#/$defs/safeName" },
+ "qualifiedName": { "$ref": "#/$defs/safeName" },
+ "locator": { "$ref": "#/$defs/locator" }
+ }
+ },
+ "edgeTruth": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["id", "semanticKey", "capability", "expectation", "recordKind", "kind", "from", "to", "locator"],
+ "properties": {
+ "id": { "$ref": "#/$defs/itemId" },
+ "semanticKey": { "$ref": "#/$defs/semanticKey" },
+ "capability": { "$ref": "#/$defs/capability" },
+ "expectation": { "enum": ["present", "absent"] },
+ "recordKind": { "const": "edge" },
+ "kind": { "$ref": "#/$defs/edgeKind" },
+ "from": { "$ref": "#/$defs/nodeSelector" },
+ "to": { "$ref": "#/$defs/nodeSelector" },
+ "locator": { "$ref": "#/$defs/locator" },
+ "resolution": { "$ref": "#/$defs/resolution" }
+ }
+ },
+ "diagnosticTruth": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["id", "semanticKey", "capability", "expectation", "recordKind", "code", "locator"],
+ "properties": {
+ "id": { "$ref": "#/$defs/itemId" },
+ "semanticKey": { "$ref": "#/$defs/semanticKey" },
+ "capability": { "$ref": "#/$defs/capability" },
+ "expectation": { "enum": ["present", "absent"] },
+ "recordKind": { "const": "diagnostic" },
+ "code": { "type": "string", "pattern": "^[a-z][a-z0-9_.-]{1,63}$" },
+ "locator": { "$ref": "#/$defs/locator" }
+ }
+ }
+ }
+}
diff --git a/packages/protocol/schemas/code-intelligence-repository-request.schema.json b/packages/protocol/schemas/code-intelligence-repository-request.schema.json
new file mode 100644
index 00000000..f6e309ec
--- /dev/null
+++ b/packages/protocol/schemas/code-intelligence-repository-request.schema.json
@@ -0,0 +1,187 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://memory-recall.dev/schemas/code-intelligence-repository-request.schema.json",
+ "title": "Code Intelligence Repository Request",
+ "oneOf": [
+ { "$ref": "#/$defs/register" },
+ { "$ref": "#/$defs/list" },
+ { "$ref": "#/$defs/search" },
+ { "$ref": "#/$defs/goResolve" },
+ { "$ref": "#/$defs/goTrace" },
+ { "$ref": "#/$defs/goImpact" }
+ ],
+ "$defs": {
+ "requestId": { "type": "string", "pattern": "^cireporeq_[a-f0-9]{32}$" },
+ "workspaceId": { "type": "string", "pattern": "^[a-z][a-z0-9_-]{0,127}$" },
+ "registryLocator": { "const": "workspace://.local/source-index/registry.v1.sqlite" },
+ "repositoryId": { "type": "string", "pattern": "^repo_[a-f0-9]{32}$" },
+ "registerArguments": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["write", "displayName", "rootLocator"],
+ "properties": {
+ "write": { "const": true },
+ "displayName": { "type": "string", "minLength": 1, "maxLength": 80, "pattern": "^[A-Za-z0-9][A-Za-z0-9._ -]*$" },
+ "rootLocator": { "type": "string", "minLength": 13, "maxLength": 512, "pattern": "^workspace://[A-Za-z0-9._@+-]+(?:/[A-Za-z0-9._@+-]+)*$" }
+ }
+ },
+ "listArguments": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["limit"],
+ "properties": {
+ "limit": { "type": "integer", "minimum": 1, "maximum": 64 }
+ }
+ },
+ "searchArguments": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["query", "repositoryIds", "perRepositoryLimit", "limit"],
+ "properties": {
+ "query": { "type": "string", "minLength": 1, "maxLength": 160, "pattern": "^[A-Za-z0-9_.$:/#@ -]+$" },
+ "repositoryIds": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 8,
+ "uniqueItems": true,
+ "items": { "$ref": "#/$defs/repositoryId" }
+ },
+ "perRepositoryLimit": { "type": "integer", "minimum": 1, "maximum": 25 },
+ "limit": { "type": "integer", "minimum": 1, "maximum": 50 }
+ }
+ },
+ "goResolveArguments": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["repositoryIds", "clientRepositoryId", "serviceRepositoryId", "clientEntryNativeId", "serviceTargetNativeId"],
+ "properties": {
+ "repositoryIds": {
+ "type": "array",
+ "minItems": 2,
+ "maxItems": 2,
+ "uniqueItems": true,
+ "items": { "$ref": "#/$defs/repositoryId" }
+ },
+ "clientRepositoryId": { "$ref": "#/$defs/repositoryId" },
+ "serviceRepositoryId": { "$ref": "#/$defs/repositoryId" },
+ "clientEntryNativeId": { "type": "string", "pattern": "^cinode_[a-f0-9]{32}$" },
+ "serviceTargetNativeId": { "type": "string", "pattern": "^cinode_[a-f0-9]{32}$" }
+ }
+ },
+ "goBoundedArguments": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["repositoryIds", "clientRepositoryId", "serviceRepositoryId", "clientEntryNativeId", "serviceTargetNativeId", "limit"],
+ "properties": {
+ "repositoryIds": {
+ "type": "array",
+ "minItems": 2,
+ "maxItems": 2,
+ "uniqueItems": true,
+ "items": { "$ref": "#/$defs/repositoryId" }
+ },
+ "clientRepositoryId": { "$ref": "#/$defs/repositoryId" },
+ "serviceRepositoryId": { "$ref": "#/$defs/repositoryId" },
+ "clientEntryNativeId": { "type": "string", "pattern": "^cinode_[a-f0-9]{32}$" },
+ "serviceTargetNativeId": { "type": "string", "pattern": "^cinode_[a-f0-9]{32}$" },
+ "limit": { "type": "integer", "minimum": 1, "maximum": 25 }
+ }
+ },
+ "register": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["protocolVersion", "requestId", "workspaceId", "operation", "root", "registryLocator", "deadlineMs", "responseSchemaVersion", "arguments"],
+ "properties": {
+ "protocolVersion": { "const": "1.0.0" },
+ "requestId": { "$ref": "#/$defs/requestId" },
+ "workspaceId": { "$ref": "#/$defs/workspaceId" },
+ "operation": { "const": "repository.register" },
+ "root": { "const": "." },
+ "registryLocator": { "$ref": "#/$defs/registryLocator" },
+ "deadlineMs": { "type": "integer", "minimum": 1, "maximum": 120000 },
+ "responseSchemaVersion": { "const": "1.0.0" },
+ "arguments": { "$ref": "#/$defs/registerArguments" }
+ }
+ },
+ "list": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["protocolVersion", "requestId", "workspaceId", "operation", "root", "registryLocator", "deadlineMs", "responseSchemaVersion", "arguments"],
+ "properties": {
+ "protocolVersion": { "const": "1.0.0" },
+ "requestId": { "$ref": "#/$defs/requestId" },
+ "workspaceId": { "$ref": "#/$defs/workspaceId" },
+ "operation": { "const": "repository.list" },
+ "root": { "const": "." },
+ "registryLocator": { "$ref": "#/$defs/registryLocator" },
+ "deadlineMs": { "type": "integer", "minimum": 1, "maximum": 120000 },
+ "responseSchemaVersion": { "const": "1.0.0" },
+ "arguments": { "$ref": "#/$defs/listArguments" }
+ }
+ },
+ "search": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["protocolVersion", "requestId", "workspaceId", "operation", "root", "registryLocator", "deadlineMs", "responseSchemaVersion", "arguments"],
+ "properties": {
+ "protocolVersion": { "const": "1.0.0" },
+ "requestId": { "$ref": "#/$defs/requestId" },
+ "workspaceId": { "$ref": "#/$defs/workspaceId" },
+ "operation": { "const": "repository.search" },
+ "root": { "const": "." },
+ "registryLocator": { "$ref": "#/$defs/registryLocator" },
+ "deadlineMs": { "type": "integer", "minimum": 1, "maximum": 2000 },
+ "responseSchemaVersion": { "const": "1.0.0" },
+ "arguments": { "$ref": "#/$defs/searchArguments" }
+ }
+ },
+ "goResolve": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["protocolVersion", "requestId", "workspaceId", "operation", "root", "registryLocator", "deadlineMs", "responseSchemaVersion", "arguments"],
+ "properties": {
+ "protocolVersion": { "const": "1.0.0" },
+ "requestId": { "$ref": "#/$defs/requestId" },
+ "workspaceId": { "$ref": "#/$defs/workspaceId" },
+ "operation": { "const": "repository.go.resolve" },
+ "root": { "const": "." },
+ "registryLocator": { "$ref": "#/$defs/registryLocator" },
+ "deadlineMs": { "type": "integer", "minimum": 1, "maximum": 2000 },
+ "responseSchemaVersion": { "const": "1.0.0" },
+ "arguments": { "$ref": "#/$defs/goResolveArguments" }
+ }
+ },
+ "goTrace": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["protocolVersion", "requestId", "workspaceId", "operation", "root", "registryLocator", "deadlineMs", "responseSchemaVersion", "arguments"],
+ "properties": {
+ "protocolVersion": { "const": "1.0.0" },
+ "requestId": { "$ref": "#/$defs/requestId" },
+ "workspaceId": { "$ref": "#/$defs/workspaceId" },
+ "operation": { "const": "repository.go.trace" },
+ "root": { "const": "." },
+ "registryLocator": { "$ref": "#/$defs/registryLocator" },
+ "deadlineMs": { "type": "integer", "minimum": 1, "maximum": 2000 },
+ "responseSchemaVersion": { "const": "1.0.0" },
+ "arguments": { "$ref": "#/$defs/goBoundedArguments" }
+ }
+ },
+ "goImpact": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["protocolVersion", "requestId", "workspaceId", "operation", "root", "registryLocator", "deadlineMs", "responseSchemaVersion", "arguments"],
+ "properties": {
+ "protocolVersion": { "const": "1.0.0" },
+ "requestId": { "$ref": "#/$defs/requestId" },
+ "workspaceId": { "$ref": "#/$defs/workspaceId" },
+ "operation": { "const": "repository.go.impact" },
+ "root": { "const": "." },
+ "registryLocator": { "$ref": "#/$defs/registryLocator" },
+ "deadlineMs": { "type": "integer", "minimum": 1, "maximum": 2000 },
+ "responseSchemaVersion": { "const": "1.0.0" },
+ "arguments": { "$ref": "#/$defs/goBoundedArguments" }
+ }
+ }
+ }
+}
diff --git a/packages/protocol/schemas/code-intelligence-repository-response.schema.json b/packages/protocol/schemas/code-intelligence-repository-response.schema.json
new file mode 100644
index 00000000..8b809596
--- /dev/null
+++ b/packages/protocol/schemas/code-intelligence-repository-response.schema.json
@@ -0,0 +1,225 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://memory-recall.dev/schemas/code-intelligence-repository-response.schema.json",
+ "title": "Code Intelligence Repository Response",
+ "oneOf": [
+ { "$ref": "#/$defs/success" },
+ { "$ref": "#/$defs/goSuccess" },
+ { "$ref": "#/$defs/failure" }
+ ],
+ "$defs": {
+ "requestId": { "type": "string", "pattern": "^cireporeq_[a-f0-9]{32}$" },
+ "safeCode": { "type": "string", "pattern": "^[a-z][a-z0-9_.-]{0,127}$" },
+ "repositoryId": { "type": "string", "pattern": "^repo_[a-f0-9]{32}$" },
+ "timestamp": { "type": "string", "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9:.]+Z$" },
+ "repository": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["repositoryId", "displayName", "rootLocator", "indexLocator", "repositoryIdentityHash", "activeGeneration", "state", "freshness", "lastSeenAt"],
+ "properties": {
+ "repositoryId": { "$ref": "#/$defs/repositoryId" },
+ "displayName": { "type": "string", "minLength": 1, "maxLength": 80, "pattern": "^[A-Za-z0-9][A-Za-z0-9._ -]*$" },
+ "rootLocator": { "type": "string", "minLength": 13, "maxLength": 512, "pattern": "^workspace://[A-Za-z0-9._@+-]+(?:/[A-Za-z0-9._@+-]+)*$" },
+ "indexLocator": { "type": "string", "minLength": 48, "maxLength": 560, "pattern": "^workspace://[A-Za-z0-9._@+-]+(?:/[A-Za-z0-9._@+-]+)*/\\.local/source-index/index\\.v1\\.sqlite$" },
+ "repositoryIdentityHash": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
+ "activeGeneration": { "type": ["integer", "null"], "minimum": 1, "maximum": 9007199254740991 },
+ "state": { "enum": ["ready", "unavailable"] },
+ "freshness": { "enum": ["unverified", "stale"] },
+ "lastSeenAt": { "$ref": "#/$defs/timestamp" }
+ }
+ },
+ "qualifiedNode": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["id", "nativeId", "repositoryId", "kind", "label", "locator", "confidence", "generation"],
+ "properties": {
+ "id": { "type": "string", "pattern": "^mrnode_[a-f0-9]{32}$" },
+ "nativeId": { "type": "string", "pattern": "^cinode_[a-f0-9]{32}$" },
+ "repositoryId": { "$ref": "#/$defs/repositoryId" },
+ "kind": { "$ref": "#/$defs/safeCode" },
+ "label": { "type": "string", "minLength": 1, "maxLength": 160, "pattern": "^[A-Za-z0-9_.$:/#@ +()<>,-]+$" },
+ "locator": { "type": "string", "maxLength": 512, "pattern": "^workspace://[A-Za-z0-9._/@+\\[\\]-]+(?:/[A-Za-z0-9._@+\\[\\]-]+)*(?:#L[1-9][0-9]{0,8}(?:-L[1-9][0-9]{0,8})?)?$" },
+ "confidence": { "type": "number", "minimum": 0, "maximum": 1 },
+ "generation": { "type": "integer", "minimum": 1, "maximum": 9007199254740991 }
+ }
+ },
+ "goModule": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["repositoryId", "moduleCoordinate", "manifestLocator", "requiredModuleCoordinates"],
+ "properties": {
+ "repositoryId": { "$ref": "#/$defs/repositoryId" },
+ "moduleCoordinate": { "type": "string", "minLength": 1, "maxLength": 512, "pattern": "^[A-Za-z0-9._~/-]+$" },
+ "manifestLocator": { "type": "string", "minLength": 12, "maxLength": 512, "pattern": "^workspace://[A-Za-z0-9._/@+-]+$" },
+ "requiredModuleCoordinates": {
+ "type": "array",
+ "maxItems": 25,
+ "uniqueItems": true,
+ "items": { "type": "string", "minLength": 1, "maxLength": 512, "pattern": "^[A-Za-z0-9._~/-]+$" }
+ }
+ }
+ },
+ "goRelationship": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["id", "kind", "sourceRepositoryId", "targetRepositoryId", "fromNodeId", "toNodeId", "evidenceLocator", "evidenceNativeRelationshipIds", "confidence", "resolution"],
+ "properties": {
+ "id": { "type": "string", "pattern": "^mrrel_[a-f0-9]{32}$" },
+ "kind": { "enum": ["imports", "calls", "constructs"] },
+ "sourceRepositoryId": { "$ref": "#/$defs/repositoryId" },
+ "targetRepositoryId": { "$ref": "#/$defs/repositoryId" },
+ "fromNodeId": { "type": "string", "pattern": "^mrnode_[a-f0-9]{32}$" },
+ "toNodeId": { "type": "string", "pattern": "^mrnode_[a-f0-9]{32}$" },
+ "evidenceLocator": { "type": "string", "maxLength": 512, "pattern": "^workspace://[A-Za-z0-9._/@+\\[\\]-]+(?:/[A-Za-z0-9._@+\\[\\]-]+)*(?:#L[1-9][0-9]{0,8}(?:-L[1-9][0-9]{0,8})?)?$" },
+ "evidenceNativeRelationshipIds": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 8,
+ "uniqueItems": true,
+ "items": { "type": "string", "pattern": "^ciedge_[a-f0-9]{32}$" }
+ },
+ "confidence": { "type": "number", "minimum": 0, "maximum": 1 },
+ "resolution": { "const": "exact_module_coordinate" }
+ }
+ },
+ "goPath": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["nodeIds", "relationshipIds"],
+ "properties": {
+ "nodeIds": {
+ "type": "array",
+ "minItems": 2,
+ "maxItems": 26,
+ "uniqueItems": true,
+ "items": { "type": "string", "pattern": "^mrnode_[a-f0-9]{32}$" }
+ },
+ "relationshipIds": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 25,
+ "uniqueItems": true,
+ "items": { "type": "string", "pattern": "^mrrel_[a-f0-9]{32}$" }
+ }
+ }
+ },
+ "perRepository": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["repositoryId", "state", "resultCount", "truncated", "reasonCodes"],
+ "properties": {
+ "repositoryId": { "$ref": "#/$defs/repositoryId" },
+ "state": { "enum": ["ready", "unavailable"] },
+ "resultCount": { "type": "integer", "minimum": 0, "maximum": 25 },
+ "truncated": { "type": "boolean" },
+ "reasonCodes": { "type": "array", "maxItems": 8, "uniqueItems": true, "items": { "$ref": "#/$defs/safeCode" } }
+ }
+ },
+ "measurements": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["durationMs", "selectedRepositoryCount", "openedRepositoryCount", "resultCount", "localFilesWritten"],
+ "properties": {
+ "durationMs": { "type": "integer", "minimum": 0, "maximum": 120000 },
+ "selectedRepositoryCount": { "type": "integer", "minimum": 0, "maximum": 8 },
+ "openedRepositoryCount": { "type": "integer", "minimum": 0, "maximum": 8 },
+ "resultCount": { "type": "integer", "minimum": 0, "maximum": 50 },
+ "localFilesWritten": { "type": "integer", "minimum": 0, "maximum": 1 }
+ }
+ },
+ "safeguards": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["readOnly", "localFilesWritten", "canonicalMemoryWrites", "networkCalls", "modelCalls", "rawSourceBodiesIncluded", "absolutePathsIncluded"],
+ "properties": {
+ "readOnly": { "type": "boolean" },
+ "localFilesWritten": { "type": "integer", "minimum": 0, "maximum": 1 },
+ "canonicalMemoryWrites": { "const": 0 },
+ "networkCalls": { "const": 0 },
+ "modelCalls": { "const": 0 },
+ "rawSourceBodiesIncluded": { "const": false },
+ "absolutePathsIncluded": { "const": false }
+ }
+ },
+ "success": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["protocolVersion", "requestId", "ok", "result"],
+ "properties": {
+ "protocolVersion": { "const": "1.0.0" },
+ "requestId": { "$ref": "#/$defs/requestId" },
+ "ok": { "const": true },
+ "result": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["responseSchemaVersion", "operation", "registryLocator", "state", "repositories", "results", "perRepository", "partial", "truncated", "measurements", "safeguards"],
+ "properties": {
+ "responseSchemaVersion": { "const": "1.0.0" },
+ "operation": { "enum": ["repository.register", "repository.list", "repository.search"] },
+ "registryLocator": { "const": "workspace://.local/source-index/registry.v1.sqlite" },
+ "state": { "enum": ["ready", "partial"] },
+ "repositories": { "type": "array", "maxItems": 64, "items": { "$ref": "#/$defs/repository" } },
+ "results": { "type": "array", "maxItems": 50, "items": { "$ref": "#/$defs/qualifiedNode" } },
+ "perRepository": { "type": "array", "maxItems": 8, "items": { "$ref": "#/$defs/perRepository" } },
+ "partial": { "type": "boolean" },
+ "truncated": { "type": "boolean" },
+ "measurements": { "$ref": "#/$defs/measurements" },
+ "safeguards": { "$ref": "#/$defs/safeguards" }
+ }
+ }
+ }
+ },
+ "goSuccess": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["protocolVersion", "requestId", "ok", "result"],
+ "properties": {
+ "protocolVersion": { "const": "1.0.0" },
+ "requestId": { "$ref": "#/$defs/requestId" },
+ "ok": { "const": true },
+ "result": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["responseSchemaVersion", "operation", "registryLocator", "state", "repositories", "results", "perRepository", "goModules", "goRelationships", "paths", "impactedNodes", "partial", "truncated", "measurements", "safeguards"],
+ "properties": {
+ "responseSchemaVersion": { "const": "1.0.0" },
+ "operation": { "enum": ["repository.go.resolve", "repository.go.trace", "repository.go.impact"] },
+ "registryLocator": { "const": "workspace://.local/source-index/registry.v1.sqlite" },
+ "state": { "enum": ["ready", "partial"] },
+ "repositories": { "type": "array", "minItems": 2, "maxItems": 2, "items": { "$ref": "#/$defs/repository" } },
+ "results": { "type": "array", "maxItems": 0, "items": { "$ref": "#/$defs/qualifiedNode" } },
+ "perRepository": { "type": "array", "maxItems": 0, "items": { "$ref": "#/$defs/perRepository" } },
+ "goModules": { "type": "array", "minItems": 2, "maxItems": 2, "items": { "$ref": "#/$defs/goModule" } },
+ "goRelationships": { "type": "array", "minItems": 2, "maxItems": 2, "items": { "$ref": "#/$defs/goRelationship" } },
+ "paths": { "type": "array", "maxItems": 25, "items": { "$ref": "#/$defs/goPath" } },
+ "impactedNodes": { "type": "array", "maxItems": 25, "items": { "$ref": "#/$defs/qualifiedNode" } },
+ "partial": { "type": "boolean" },
+ "truncated": { "type": "boolean" },
+ "measurements": { "$ref": "#/$defs/measurements" },
+ "safeguards": { "$ref": "#/$defs/safeguards" }
+ }
+ }
+ }
+ },
+ "failure": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["protocolVersion", "requestId", "ok", "error"],
+ "properties": {
+ "protocolVersion": { "const": "1.0.0" },
+ "requestId": { "$ref": "#/$defs/requestId" },
+ "ok": { "const": false },
+ "error": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["code", "retryable", "details"],
+ "properties": {
+ "code": { "$ref": "#/$defs/safeCode" },
+ "retryable": { "const": false },
+ "details": { "type": "array", "maxItems": 8, "uniqueItems": true, "items": { "$ref": "#/$defs/safeCode" } }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/packages/protocol/schemas/provider-manifest.schema.json b/packages/protocol/schemas/provider-manifest.schema.json
index a4fb5ed8..bab8b087 100644
--- a/packages/protocol/schemas/provider-manifest.schema.json
+++ b/packages/protocol/schemas/provider-manifest.schema.json
@@ -22,7 +22,7 @@
"id": { "type": "string", "pattern": "^provider:native:[a-z0-9-]+:[a-z0-9-]+$" },
"name": { "type": "string", "minLength": 1 },
"version": { "type": "string", "minLength": 1 },
- "category": { "enum": ["memory", "artifact", "workflow", "model", "event", "policy", "identity", "context-candidate", "tool"] },
+ "category": { "enum": ["memory", "artifact", "workflow", "model", "event", "policy", "identity", "context-candidate", "code-intelligence", "tool"] },
"enabledByDefault": { "type": "boolean" },
"locality": { "enum": ["in-process", "loopback-process"] },
"contract": { "type": "string", "minLength": 1 },
diff --git a/packages/protocol/schemas/recall-map.schema.json b/packages/protocol/schemas/recall-map.schema.json
index 088fe7e8..b381132b 100644
--- a/packages/protocol/schemas/recall-map.schema.json
+++ b/packages/protocol/schemas/recall-map.schema.json
@@ -59,24 +59,94 @@
"safeLocator": {
"type": "string",
"maxLength": 512,
- "pattern": "^workspace://(?!(?:\\.{1,2})(?:/|#|$))[A-Za-z0-9._@+~,-]+(?:/(?!(?:\\.{1,2})(?:/|#|$))[A-Za-z0-9._@+~,-]+)*(?:#L[0-9]+-L[0-9]+)?$"
+ "pattern": "^workspace://(?!/)(?![^/]*%)(?![A-Za-z][A-Za-z0-9+.-]*:)(?!\\.\\.(?:/|$))(?!.*\\/\\.\\.(?:/|$))(?!.*%(?:2[eEfF]|3[aA]|5[cC]|25))[A-Za-z0-9._~!$&'()*+,;=@%/\\[\\]-]{1,512}(?:#L[0-9]+-L[0-9]+)?$"
},
"nullableLocator": {
"type": ["string", "null"],
"maxLength": 512,
- "pattern": "^workspace://(?!(?:\\.{1,2})(?:/|#|$))[A-Za-z0-9._@+~,-]+(?:/(?!(?:\\.{1,2})(?:/|#|$))[A-Za-z0-9._@+~,-]+)*(?:#L[0-9]+-L[0-9]+)?$"
+ "pattern": "^workspace://(?!/)(?![^/]*%)(?![A-Za-z][A-Za-z0-9+.-]*:)(?!\\.\\.(?:/|$))(?!.*\\/\\.\\.(?:/|$))(?!.*%(?:2[eEfF]|3[aA]|5[cC]|25))[A-Za-z0-9._~!$&'()*+,;=@%/\\[\\]-]{1,512}(?:#L[0-9]+-L[0-9]+)?$"
},
"safeLabel": {
"type": "string",
"minLength": 1,
"maxLength": 240,
- "pattern": "^(?!/)(?![A-Za-z]:[\\\\/])(?!.*://)[A-Za-z0-9_$@~./:#*+,-]+(?: (?:contains|defined_in|imports|exports|references|calls) [A-Za-z0-9_$@~./:#*+,-]+)?$"
+ "pattern": "^(?=.{1,240}$)(?!/)(?![A-Za-z]:[\\\\/])(?!.*[?{}=;\\\\])(?!.*[Ss][Ee][Nn][Tt][Ii][Nn][Ee][Ll])(?:[A-Za-z0-9_$@~./#*+,\\[\\]-]+|node:[A-Za-z0-9_][A-Za-z0-9_.-]*(?:/[A-Za-z0-9_][A-Za-z0-9_.-]*)*|local:absolute-import)(?: (?:contains|defined_in|imports|exports|references|calls)(?: (?:[A-Za-z0-9_$@~./#*+,\\[\\]-]+|node:[A-Za-z0-9_][A-Za-z0-9_.-]*(?:/[A-Za-z0-9_][A-Za-z0-9_.-]*)*|local:absolute-import)){1,2})?$"
},
"nullableSafeLabel": {
"type": ["string", "null"],
"minLength": 1,
"maxLength": 240,
- "pattern": "^(?!/)(?![A-Za-z]:[\\\\/])(?!.*://)[A-Za-z0-9_$@~./:#*+,-]+(?: (?:contains|defined_in|imports|exports|references|calls) [A-Za-z0-9_$@~./:#*+,-]+)?$"
+ "pattern": "^(?=.{1,240}$)(?!/)(?![A-Za-z]:[\\\\/])(?!.*[?{}=;\\\\])(?!.*[Ss][Ee][Nn][Tt][Ii][Nn][Ee][Ll])(?:[A-Za-z0-9_$@~./#*+,\\[\\]-]+|node:[A-Za-z0-9_][A-Za-z0-9_.-]*(?:/[A-Za-z0-9_][A-Za-z0-9_.-]*)*|local:absolute-import)(?: (?:contains|defined_in|imports|exports|references|calls)(?: (?:[A-Za-z0-9_$@~./#*+,\\[\\]-]+|node:[A-Za-z0-9_][A-Za-z0-9_.-]*(?:/[A-Za-z0-9_][A-Za-z0-9_.-]*)*|local:absolute-import)){1,2})?$"
+ },
+ "groupPrefix": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 512,
+ "pattern": "^[A-Za-z0-9._~!$&'()*+,;=@%\\[\\]-]+(?:/[A-Za-z0-9._~!$&'()*+,;=@%\\[\\]-]+){0,2}$"
+ },
+ "orientationGroup": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["id", "prefix", "fileCount", "symbolCount", "changedFileCount", "entryPoints"],
+ "properties": {
+ "id": { "type": "string", "pattern": "^sggroup_[a-f0-9]{24}$" },
+ "prefix": { "$ref": "#/$defs/groupPrefix" },
+ "fileCount": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "symbolCount": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "changedFileCount": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "entryPoints": { "type": "array", "maxItems": 2, "items": { "$ref": "#/$defs/orientationEntryPoint" } }
+ }
+ },
+ "orientationEntryPoint": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["nodeId", "label", "qualifiedLabel", "locator", "symbolKind"],
+ "properties": {
+ "nodeId": { "type": "string", "pattern": "^sgnode_[a-f0-9]{32}$" },
+ "label": { "$ref": "#/$defs/safeLabel" },
+ "qualifiedLabel": { "$ref": "#/$defs/nullableSafeLabel" },
+ "locator": { "$ref": "#/$defs/nullableLocator" },
+ "symbolKind": { "$ref": "#/$defs/symbolKind" }
+ }
+ },
+ "orientationRelation": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["id", "sourceGroupId", "targetGroupId", "sourcePrefix", "targetPrefix", "count", "edgeKindCounts"],
+ "properties": {
+ "id": { "type": "string", "pattern": "^sgrelation_[a-f0-9]{24}$" },
+ "sourceGroupId": { "type": "string", "pattern": "^sggroup_[a-f0-9]{24}$" },
+ "targetGroupId": { "type": "string", "pattern": "^sggroup_[a-f0-9]{24}$" },
+ "sourcePrefix": { "$ref": "#/$defs/groupPrefix" },
+ "targetPrefix": { "$ref": "#/$defs/groupPrefix" },
+ "count": { "type": "integer", "minimum": 1, "maximum": 1000000000 },
+ "edgeKindCounts": {
+ "type": "object",
+ "additionalProperties": false,
+ "maxProperties": 2,
+ "properties": {
+ "imports": { "type": "integer", "minimum": 1, "maximum": 1000000000 },
+ "calls": { "type": "integer", "minimum": 1, "maximum": 1000000000 }
+ }
+ }
+ }
+ },
+ "orientationProcess": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["id", "label", "entryPoint", "sink", "sinkKind", "nodeIds", "relationshipIds", "confidence", "algorithmVersion", "truncated"],
+ "properties": {
+ "id": { "type": "string", "pattern": "^sgprocess_[a-f0-9]{24}$" },
+ "label": { "$ref": "#/$defs/safeLabel" },
+ "entryPoint": { "$ref": "#/$defs/orientationEntryPoint" },
+ "sink": { "$ref": "#/$defs/orientationEntryPoint" },
+ "sinkKind": { "type": "string", "minLength": 1, "maxLength": 128, "pattern": "^[a-z][a-z0-9_.-]{0,127}$" },
+ "nodeIds": { "type": "array", "minItems": 2, "maxItems": 5, "uniqueItems": true, "items": { "type": "string", "pattern": "^sgnode_[a-f0-9]{32}$" } },
+ "relationshipIds": { "type": "array", "minItems": 2, "maxItems": 5, "uniqueItems": true, "items": { "type": "string", "pattern": "^sgedge_[a-f0-9]{32}$" } },
+ "confidence": { "type": "number", "minimum": 0, "maximum": 1 },
+ "algorithmVersion": { "const": "entry-path-v1" },
+ "truncated": { "type": "boolean" }
+ }
},
"symbolKind": {
"enum": ["class", "function", "method", "interface", "type"]
@@ -99,16 +169,16 @@
"languages": {
"type": "array",
"minItems": 2,
- "maxItems": 2,
+ "maxItems": 14,
"uniqueItems": true,
- "items": { "enum": ["javascript", "typescript"] }
+ "items": { "enum": ["c", "cpp", "csharp", "dart", "go", "java", "javascript", "kotlin", "php", "python", "ruby", "rust", "swift", "typescript"] }
},
"coverage": {
"type": "object",
"additionalProperties": false,
"required": ["status", "analyzedFileCount", "maxFiles", "maxFileBytes", "diagnosticCount", "reasonCodes"],
"properties": {
- "status": { "enum": ["partial", "unavailable"] },
+ "status": { "enum": ["complete", "partial", "stale", "unavailable"] },
"analyzedFileCount": { "type": "integer", "minimum": 0, "maximum": 1000 },
"maxFiles": { "type": "integer", "minimum": 1, "maximum": 1000 },
"maxFileBytes": { "type": "integer", "minimum": 1024, "maximum": 1048576 },
@@ -121,7 +191,8 @@
"items": { "$ref": "#/$defs/code" }
}
}
- }
+ },
+ "snapshot": { "$ref": "#/$defs/sourceGraphSnapshot" }
}
},
"memory": {
@@ -134,6 +205,19 @@
}
}
},
+ "sourceGraphSnapshot": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["status", "reuse", "reason", "validationMode", "builtAt", "buildDurationMs"],
+ "properties": {
+ "status": { "enum": ["fresh", "stale", "unavailable"] },
+ "reuse": { "enum": ["cold", "cache", "inflight", "none"] },
+ "reason": { "type": ["string", "null"], "minLength": 1, "maxLength": 64, "pattern": "^[a-z][a-z0-9_:-]*$" },
+ "validationMode": { "enum": ["watcher", "metadata-scan", "none"] },
+ "builtAt": { "type": ["string", "null"], "format": "date-time" },
+ "buildDurationMs": { "type": ["number", "null"], "minimum": 0, "maximum": 3600000 }
+ }
+ },
"architecture": {
"type": "object",
"additionalProperties": false,
@@ -141,6 +225,9 @@
"properties": {
"entryPoints": { "type": "array", "maxItems": 20, "items": { "$ref": "#/$defs/symbol" } },
"hotspots": { "type": "array", "maxItems": 20, "items": { "$ref": "#/$defs/hotspot" } },
+ "groups": { "type": "array", "maxItems": 12, "items": { "$ref": "#/$defs/orientationGroup" } },
+ "groupRelations": { "type": "array", "maxItems": 20, "items": { "$ref": "#/$defs/orientationRelation" } },
+ "processes": { "type": "array", "maxItems": 12, "items": { "$ref": "#/$defs/orientationProcess" } },
"search": { "$ref": "#/$defs/search" },
"impact": { "$ref": "#/$defs/impact" },
"diagnostics": { "type": "array", "maxItems": 100, "items": { "$ref": "#/$defs/diagnostic" } }
diff --git a/packages/protocol/schemas/source-graph-preview.schema.json b/packages/protocol/schemas/source-graph-preview.schema.json
index b71ee3bf..c98ed8f2 100644
--- a/packages/protocol/schemas/source-graph-preview.schema.json
+++ b/packages/protocol/schemas/source-graph-preview.schema.json
@@ -14,6 +14,9 @@
"search": { "$ref": "#/$defs/searchResult" },
"trace": { "$ref": "#/$defs/traceResult" },
"impact": { "$ref": "#/$defs/impactResult" },
+ "orientation": { "$ref": "#/$defs/orientation" },
+ "focus": { "$ref": "#/$defs/focus" },
+ "snapshot": { "$ref": "#/$defs/snapshot" },
"measurements": { "$ref": "#/$defs/measurements" },
"safeguards": { "$ref": "#/$defs/safeguards" }
},
@@ -22,11 +25,130 @@
"fingerprint": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
"nodeId": { "type": "string", "pattern": "^sgnode_[a-f0-9]{32}$" },
"edgeId": { "type": "string", "pattern": "^sgedge_[a-f0-9]{32}$" },
- "locator": { "type": "string", "pattern": "^workspace://(?!/)(?![^/]*%)(?![A-Za-z][A-Za-z0-9+.-]*:)(?!\\.\\.(?:/|$))(?!.*\\/\\.\\.(?:/|$))(?!(?:Users|private)(?:/|$))(?!var/folders(?:/|$))(?!.*\\/(?:Users|private)(?:/|$))(?!.*\\/var/folders(?:/|$))(?!.*%(?:2[eEfF]|3[aA]|5[cC]|25))[A-Za-z0-9._~!$&'()*+,;=@%/\\[\\]-]{1,512}(?:#L[0-9]+-L[0-9]+)?$" },
- "safeLabel": { "type": "string", "minLength": 1, "maxLength": 240, "pattern": "^(?=.{1,240}$)(?!/)(?![A-Za-z]:[\\\\/])(?!.*(?:^|[\\\\/])[Uu][Ss][Ee][Rr][Ss][\\\\/])(?!.*(?:^|[\\\\/])[Pp][Rr][Ii][Vv][Aa][Tt][Ee][\\\\/])(?!.*(?:^|[\\\\/])[Vv][Aa][Rr][\\\\/][Ff][Oo][Ll][Dd][Ee][Rr][Ss][\\\\/])(?!.*[?{}=;\\\\])(?!.*[Ss][Ee][Nn][Tt][Ii][Nn][Ee][Ll])(?:[A-Za-z0-9_$@~./#*+,\\[\\]-]+|node:[A-Za-z0-9_][A-Za-z0-9_.-]*(?:/[A-Za-z0-9_][A-Za-z0-9_.-]*)*|local:absolute-import)(?: (?:contains|defined_in|imports|exports|references|calls)(?: (?:[A-Za-z0-9_$@~./#*+,\\[\\]-]+|node:[A-Za-z0-9_][A-Za-z0-9_.-]*(?:/[A-Za-z0-9_][A-Za-z0-9_.-]*)*|local:absolute-import)){1,2})?$" },
+ "locator": { "type": "string", "pattern": "^workspace://(?!/)(?![^/]*%)(?![A-Za-z][A-Za-z0-9+.-]*:)(?!\\.\\.(?:/|$))(?!.*\\/\\.\\.(?:/|$))(?!.*%(?:2[eEfF]|3[aA]|5[cC]|25))[A-Za-z0-9._~!$&'()*+,;=@%/\\[\\]-]{1,512}(?:#L[0-9]+-L[0-9]+)?$" },
+ "safeLabel": { "type": "string", "minLength": 1, "maxLength": 240, "pattern": "^(?=.{1,240}$)(?!/)(?![A-Za-z]:[\\\\/])(?!.*[?{}=;\\\\])(?!.*[Ss][Ee][Nn][Tt][Ii][Nn][Ee][Ll])(?:[A-Za-z0-9_$@~./#*+,\\[\\]-]+|node:[A-Za-z0-9_][A-Za-z0-9_.-]*(?:/[A-Za-z0-9_][A-Za-z0-9_.-]*)*|local:absolute-import)(?: (?:contains|defined_in|imports|exports|references|calls)(?: (?:[A-Za-z0-9_$@~./#*+,\\[\\]-]+|node:[A-Za-z0-9_][A-Za-z0-9_.-]*(?:/[A-Za-z0-9_][A-Za-z0-9_.-]*)*|local:absolute-import)){1,2})?$" },
"nodeKind": { "enum": ["file", "chunk", "symbol", "module"] },
"edgeKind": { "enum": ["contains", "defined_in", "imports", "exports", "references", "calls"] },
"sourceRef": { "type": "string", "minLength": 1, "maxLength": 128, "pattern": "^(symbol|astchunk|import|export|call|ref|srcsnap)_[a-f0-9]{16,32}$|^sha256:[a-f0-9]{64}$" },
+ "nodeCountMap": {
+ "type": "object",
+ "maxProperties": 4,
+ "additionalProperties": false,
+ "properties": {
+ "file": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "chunk": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "symbol": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "module": { "type": "integer", "minimum": 0, "maximum": 1000000000 }
+ }
+ },
+ "edgeCountMap": {
+ "type": "object",
+ "maxProperties": 6,
+ "additionalProperties": false,
+ "properties": {
+ "contains": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "defined_in": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "imports": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "exports": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "calls": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "references": { "type": "integer", "minimum": 0, "maximum": 1000000000 }
+ }
+ },
+ "groupPrefix": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 512,
+ "pattern": "^[A-Za-z0-9._~!$&'()*+,;=@%\\[\\]-]+(?:/[A-Za-z0-9._~!$&'()*+,;=@%\\[\\]-]+){0,2}$"
+ },
+ "orientation": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["groups", "relations"],
+ "properties": {
+ "groups": { "type": "array", "maxItems": 12, "items": { "$ref": "#/$defs/orientationGroup" } },
+ "processes": { "type": "array", "maxItems": 12, "items": { "$ref": "#/$defs/orientationProcess" } },
+ "relations": { "type": "array", "maxItems": 20, "items": { "$ref": "#/$defs/orientationRelation" } }
+ }
+ },
+ "orientationGroup": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["id", "prefix", "fileCount", "symbolCount", "changedFileCount", "entryPoints"],
+ "properties": {
+ "id": { "type": "string", "pattern": "^sggroup_[a-f0-9]{24}$" },
+ "prefix": { "$ref": "#/$defs/groupPrefix" },
+ "fileCount": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "symbolCount": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "changedFileCount": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "entryPoints": { "type": "array", "maxItems": 2, "items": { "$ref": "#/$defs/nodeReference" } }
+ }
+ },
+ "orientationRelation": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["id", "sourceGroupId", "targetGroupId", "sourcePrefix", "targetPrefix", "count", "edgeKindCounts"],
+ "properties": {
+ "id": { "type": "string", "pattern": "^sgrelation_[a-f0-9]{24}$" },
+ "sourceGroupId": { "type": "string", "pattern": "^sggroup_[a-f0-9]{24}$" },
+ "targetGroupId": { "type": "string", "pattern": "^sggroup_[a-f0-9]{24}$" },
+ "sourcePrefix": { "$ref": "#/$defs/groupPrefix" },
+ "targetPrefix": { "$ref": "#/$defs/groupPrefix" },
+ "count": { "type": "integer", "minimum": 1, "maximum": 1000000000 },
+ "edgeKindCounts": {
+ "type": "object",
+ "additionalProperties": false,
+ "maxProperties": 2,
+ "properties": {
+ "imports": { "type": "integer", "minimum": 1, "maximum": 1000000000 },
+ "calls": { "type": "integer", "minimum": 1, "maximum": 1000000000 }
+ }
+ }
+ }
+ },
+ "orientationProcess": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["id", "label", "entryPoint", "sink", "sinkKind", "nodeIds", "relationshipIds", "confidence", "algorithmVersion", "truncated"],
+ "properties": {
+ "id": { "type": "string", "pattern": "^sgprocess_[a-f0-9]{24}$" },
+ "label": { "$ref": "#/$defs/safeLabel" },
+ "entryPoint": { "$ref": "#/$defs/nodeReference" },
+ "sink": { "$ref": "#/$defs/nodeReference" },
+ "sinkKind": { "type": "string", "minLength": 1, "maxLength": 128, "pattern": "^[a-z][a-z0-9_.-]{0,127}$" },
+ "nodeIds": { "type": "array", "minItems": 2, "maxItems": 5, "uniqueItems": true, "items": { "$ref": "#/$defs/nodeId" } },
+ "relationshipIds": { "type": "array", "minItems": 2, "maxItems": 5, "uniqueItems": true, "items": { "$ref": "#/$defs/edgeId" } },
+ "confidence": { "type": "number", "minimum": 0, "maximum": 1 },
+ "algorithmVersion": { "const": "entry-path-v1" },
+ "truncated": { "type": "boolean" }
+ }
+ },
+ "focus": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["nodeLimit", "edgeLimit", "nodes", "edges", "omittedNodes", "omittedEdges"],
+ "properties": {
+ "nodeLimit": { "type": "integer", "minimum": 1, "maximum": 200 },
+ "edgeLimit": { "type": "integer", "minimum": 1, "maximum": 400 },
+ "nodes": { "type": "array", "maxItems": 200, "items": { "$ref": "#/$defs/node" } },
+ "edges": { "type": "array", "maxItems": 400, "items": { "$ref": "#/$defs/edge" } },
+ "omittedNodes": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "omittedEdges": { "type": "integer", "minimum": 0, "maximum": 1000000000 }
+ }
+ },
+ "snapshot": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["status", "reuse", "reason", "generation", "validationMode", "buildDurationMs", "builtAt"],
+ "properties": {
+ "status": { "enum": ["fresh", "stale", "unavailable"] },
+ "reuse": { "enum": ["cold", "cache", "inflight", "none"] },
+ "reason": { "type": ["string", "null"], "minLength": 1, "maxLength": 64, "pattern": "^[a-z][a-z0-9_:-]*$" },
+ "generation": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "validationMode": { "enum": ["watcher", "metadata-scan", "none"] },
+ "buildDurationMs": { "type": ["number", "null"], "minimum": 0, "maximum": 3600000 },
+ "builtAt": { "type": ["string", "null"], "format": "date-time" }
+ }
+ },
"summary": {
"type": "object",
"additionalProperties": false,
@@ -164,6 +286,28 @@
"sourceRelevantExcludedDirectoryLocators": { "type": "array", "maxItems": 100, "items": { "$ref": "#/$defs/locator" } },
"unsupportedFileCount": { "type": "integer", "minimum": 0 },
"unsupportedExtensions": { "type": "array", "maxItems": 32, "items": { "type": "string", "pattern": "^\\.[a-z0-9]{1,16}$" } },
+ "unsupportedExtensionCounts": {
+ "type": "object",
+ "maxProperties": 32,
+ "additionalProperties": { "type": "integer", "minimum": 0, "maximum": 1000000000 }
+ },
+ "ignoredFileCount": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "ignoredDirectoryCount": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "ignoredSamples": { "type": "array", "maxItems": 100, "items": { "$ref": "#/$defs/locator" } },
+ "ignoreRuleFingerprint": { "$ref": "#/$defs/fingerprint" },
+ "ignoreFileLocators": { "type": "array", "maxItems": 100, "items": { "$ref": "#/$defs/locator" } },
+ "candidateNodeCount": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "representedNodeCount": { "type": "integer", "minimum": 0, "maximum": 20000 },
+ "omittedNodeCount": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "candidateNodeKindCounts": { "$ref": "#/$defs/nodeCountMap" },
+ "representedNodeKindCounts": { "$ref": "#/$defs/nodeCountMap" },
+ "omittedNodeKindCounts": { "$ref": "#/$defs/nodeCountMap" },
+ "candidateEdgeCount": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "representedEdgeCount": { "type": "integer", "minimum": 0, "maximum": 50000 },
+ "omittedEdgeCount": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "candidateEdgeKindCounts": { "$ref": "#/$defs/edgeCountMap" },
+ "representedEdgeKindCounts": { "$ref": "#/$defs/edgeCountMap" },
+ "omittedEdgeKindCounts": { "$ref": "#/$defs/edgeCountMap" },
"maxFilesReached": { "type": "boolean" },
"reasonCodes": { "type": "array", "maxItems": 16, "uniqueItems": true, "items": { "type": "string", "minLength": 1, "maxLength": 64, "pattern": "^[a-z][a-z0-9_]*$" } }
}
@@ -190,6 +334,10 @@
"total": { "type": "integer", "minimum": 0 },
"limit": { "type": "integer", "minimum": 1, "maximum": 100 },
"offset": { "type": "integer", "minimum": 0, "maximum": 10000 },
+ "reachedOffset": { "type": "integer", "minimum": 0, "maximum": 10000 },
+ "offsetIncomplete": { "type": "boolean" },
+ "continuationCursor": { "type": ["string", "null"], "pattern": "^idxcur_[a-f0-9]{32}$" },
+ "truncated": { "type": "boolean" },
"hasMore": { "type": "boolean" },
"omittedCount": { "type": "integer", "minimum": 0 },
"results": { "type": "array", "maxItems": 100, "items": { "$ref": "#/$defs/searchItem" } }
diff --git a/packages/protocol/schemas/source-graph.schema.json b/packages/protocol/schemas/source-graph.schema.json
index f83434d0..33a80eef 100644
--- a/packages/protocol/schemas/source-graph.schema.json
+++ b/packages/protocol/schemas/source-graph.schema.json
@@ -22,9 +22,33 @@
"fingerprint": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
"nodeId": { "type": "string", "pattern": "^sgnode_[a-f0-9]{32}$" },
"edgeId": { "type": "string", "pattern": "^sgedge_[a-f0-9]{32}$" },
- "locator": { "type": "string", "pattern": "^workspace://(?!/)(?![^/]*%)(?![A-Za-z][A-Za-z0-9+.-]*:)(?!\\.\\.(?:/|$))(?!.*\\/\\.\\.(?:/|$))(?!(?:Users|private)(?:/|$))(?!var/folders(?:/|$))(?!.*\\/(?:Users|private)(?:/|$))(?!.*\\/var/folders(?:/|$))(?!.*%(?:2[eEfF]|3[aA]|5[cC]|25))[A-Za-z0-9._~!$&'()*+,;=@%/\\[\\]-]{1,512}(?:#L[0-9]+-L[0-9]+)?$" },
- "safeLabel": { "type": "string", "minLength": 1, "maxLength": 240, "pattern": "^(?=.{1,240}$)(?!/)(?![A-Za-z]:[\\\\/])(?!.*(?:^|[\\\\/])[Uu][Ss][Ee][Rr][Ss][\\\\/])(?!.*(?:^|[\\\\/])[Pp][Rr][Ii][Vv][Aa][Tt][Ee][\\\\/])(?!.*(?:^|[\\\\/])[Vv][Aa][Rr][\\\\/][Ff][Oo][Ll][Dd][Ee][Rr][Ss][\\\\/])(?!.*[?{}=;\\\\])(?!.*[Ss][Ee][Nn][Tt][Ii][Nn][Ee][Ll])(?:[A-Za-z0-9_$@~./#*+,\\[\\]-]+|node:[A-Za-z0-9_][A-Za-z0-9_.-]*(?:/[A-Za-z0-9_][A-Za-z0-9_.-]*)*|local:absolute-import)(?: (?:contains|defined_in|imports|exports|references|calls)(?: (?:[A-Za-z0-9_$@~./#*+,\\[\\]-]+|node:[A-Za-z0-9_][A-Za-z0-9_.-]*(?:/[A-Za-z0-9_][A-Za-z0-9_.-]*)*|local:absolute-import)){1,2})?$" },
+ "locator": { "type": "string", "pattern": "^workspace://(?!/)(?![^/]*%)(?![A-Za-z][A-Za-z0-9+.-]*:)(?!\\.\\.(?:/|$))(?!.*\\/\\.\\.(?:/|$))(?!.*%(?:2[eEfF]|3[aA]|5[cC]|25))[A-Za-z0-9._~!$&'()*+,;=@%/\\[\\]-]{1,512}(?:#L[0-9]+-L[0-9]+)?$" },
+ "safeLabel": { "type": "string", "minLength": 1, "maxLength": 240, "pattern": "^(?=.{1,240}$)(?!/)(?![A-Za-z]:[\\\\/])(?!.*[?{}=;\\\\])(?!.*[Ss][Ee][Nn][Tt][Ii][Nn][Ee][Ll])(?:[A-Za-z0-9_$@~./#*+,\\[\\]-]+|node:[A-Za-z0-9_][A-Za-z0-9_.-]*(?:/[A-Za-z0-9_][A-Za-z0-9_.-]*)*|local:absolute-import)(?: (?:contains|defined_in|imports|exports|references|calls)(?: (?:[A-Za-z0-9_$@~./#*+,\\[\\]-]+|node:[A-Za-z0-9_][A-Za-z0-9_.-]*(?:/[A-Za-z0-9_][A-Za-z0-9_.-]*)*|local:absolute-import)){1,2})?$" },
"sourceRef": { "type": "string", "minLength": 1, "maxLength": 128, "pattern": "^(symbol|astchunk|import|export|call|ref|srcsnap)_[a-f0-9]{16,32}$|^sha256:[a-f0-9]{64}$" },
+ "nodeCountMap": {
+ "type": "object",
+ "maxProperties": 4,
+ "additionalProperties": false,
+ "properties": {
+ "file": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "chunk": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "symbol": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "module": { "type": "integer", "minimum": 0, "maximum": 1000000000 }
+ }
+ },
+ "edgeCountMap": {
+ "type": "object",
+ "maxProperties": 6,
+ "additionalProperties": false,
+ "properties": {
+ "contains": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "defined_in": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "imports": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "exports": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "calls": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "references": { "type": "integer", "minimum": 0, "maximum": 1000000000 }
+ }
+ },
"summary": {
"type": "object",
"additionalProperties": false,
@@ -141,6 +165,28 @@
"sourceRelevantExcludedDirectoryLocators": { "type": "array", "maxItems": 100, "items": { "$ref": "#/$defs/locator" } },
"unsupportedFileCount": { "type": "integer", "minimum": 0 },
"unsupportedExtensions": { "type": "array", "maxItems": 32, "items": { "type": "string", "pattern": "^\\.[a-z0-9]{1,16}$" } },
+ "unsupportedExtensionCounts": {
+ "type": "object",
+ "maxProperties": 32,
+ "additionalProperties": { "type": "integer", "minimum": 0, "maximum": 1000000000 }
+ },
+ "ignoredFileCount": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "ignoredDirectoryCount": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "ignoredSamples": { "type": "array", "maxItems": 100, "items": { "$ref": "#/$defs/locator" } },
+ "ignoreRuleFingerprint": { "$ref": "#/$defs/fingerprint" },
+ "ignoreFileLocators": { "type": "array", "maxItems": 100, "items": { "$ref": "#/$defs/locator" } },
+ "candidateNodeCount": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "representedNodeCount": { "type": "integer", "minimum": 0, "maximum": 20000 },
+ "omittedNodeCount": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "candidateNodeKindCounts": { "$ref": "#/$defs/nodeCountMap" },
+ "representedNodeKindCounts": { "$ref": "#/$defs/nodeCountMap" },
+ "omittedNodeKindCounts": { "$ref": "#/$defs/nodeCountMap" },
+ "candidateEdgeCount": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "representedEdgeCount": { "type": "integer", "minimum": 0, "maximum": 50000 },
+ "omittedEdgeCount": { "type": "integer", "minimum": 0, "maximum": 1000000000 },
+ "candidateEdgeKindCounts": { "$ref": "#/$defs/edgeCountMap" },
+ "representedEdgeKindCounts": { "$ref": "#/$defs/edgeCountMap" },
+ "omittedEdgeKindCounts": { "$ref": "#/$defs/edgeCountMap" },
"maxFilesReached": { "type": "boolean" },
"reasonCodes": { "type": "array", "maxItems": 16, "uniqueItems": true, "items": { "type": "string", "minLength": 1, "maxLength": 64, "pattern": "^[a-z][a-z0-9_]*$" } }
}
diff --git a/packages/protocol/src/code-intelligence-contract.mjs b/packages/protocol/src/code-intelligence-contract.mjs
new file mode 100644
index 00000000..6bd207cb
--- /dev/null
+++ b/packages/protocol/src/code-intelligence-contract.mjs
@@ -0,0 +1,114 @@
+import { access } from 'node:fs/promises';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+
+export const CODE_INTELLIGENCE_TIER_1_LANGUAGES = Object.freeze([
+ 'typescript', 'javascript', 'python', 'java', 'kotlin', 'csharp', 'go',
+ 'rust', 'php', 'ruby', 'swift', 'c', 'cpp', 'dart'
+]);
+
+export const CODE_INTELLIGENCE_TIER_2_LANGUAGES = Object.freeze([
+ 'lua', 'bash', 'sql', 'objective-c', 'scala', 'r', 'julia', 'zig'
+]);
+
+export const CODE_INTELLIGENCE_CAPABILITIES = Object.freeze([
+ 'parse', 'structure', 'imports', 'exports', 'heritage', 'types',
+ 'calls', 'config', 'frameworks', 'impact', 'processes'
+]);
+
+const EXPECTED_TIER = new Map([
+ ...CODE_INTELLIGENCE_TIER_1_LANGUAGES.map((language) => [language, 1]),
+ ...CODE_INTELLIGENCE_TIER_2_LANGUAGES.map((language) => [language, 2])
+]);
+const WINDOWS_ABSOLUTE_PATH_RE = /^[A-Za-z]:[\\/]/u;
+
+function finding(code, language = null, capability = null, evidencePath = null) {
+ return { code, language, capability, path: evidencePath };
+}
+
+function resolveRoot(root) {
+ return path.resolve(root instanceof URL ? fileURLToPath(root) : String(root));
+}
+
+async function evidencePathExists(repositoryRoot, evidencePath) {
+ if (typeof evidencePath !== 'string' || !evidencePath) return false;
+ if (path.isAbsolute(evidencePath) || WINDOWS_ABSOLUTE_PATH_RE.test(evidencePath)) return false;
+ const resolved = path.resolve(repositoryRoot, evidencePath);
+ if (resolved !== repositoryRoot && !resolved.startsWith(`${repositoryRoot}${path.sep}`)) return false;
+ try {
+ await access(resolved);
+ return true;
+ } catch {
+ return false;
+ }
+}
+
+export async function auditCodeIntelligenceCapabilityMatrix(matrix, { root = process.cwd() } = {}) {
+ const findings = [];
+ const repositoryRoot = resolveRoot(root);
+ const languages = Array.isArray(matrix?.languages) ? matrix.languages : [];
+ const seen = new Set();
+
+ for (const item of languages) {
+ const language = typeof item?.id === 'string' ? item.id : null;
+ if (!language || !EXPECTED_TIER.has(language)) {
+ findings.push(finding('unknown_language', language));
+ continue;
+ }
+ if (seen.has(language)) findings.push(finding('duplicate_language', language));
+ seen.add(language);
+ if (item.tier !== EXPECTED_TIER.get(language)) findings.push(finding('language_tier_mismatch', language));
+
+ for (const capability of CODE_INTELLIGENCE_CAPABILITIES) {
+ const claim = item.capabilities?.[capability];
+ if (!claim) {
+ findings.push(finding('missing_capability', language, capability));
+ continue;
+ }
+ const evidence = Array.isArray(claim.evidence) ? claim.evidence : [];
+ const evidenceClasses = new Set(evidence.map((entry) => entry?.class));
+ if (item.tier === 1) {
+ if (!['applicable', 'not-applicable'].includes(claim.applicability)) {
+ findings.push(finding('capability_applicability_missing', language, capability));
+ }
+ if (typeof claim.applicabilityRationale !== 'string' || claim.applicabilityRationale.length === 0) {
+ findings.push(finding('capability_applicability_rationale_missing', language, capability));
+ }
+ if (claim.applicability === 'not-applicable') {
+ if (claim.benchmarkStatus !== 'not-applicable') findings.push(finding('not_applicable_capability_benchmark_status_invalid', language, capability));
+ if (claim.productStatus !== 'unsupported') findings.push(finding('not_applicable_capability_product_status_invalid', language, capability));
+ } else if (claim.benchmarkStatus === 'not-applicable') {
+ findings.push(finding('applicable_capability_benchmark_status_invalid', language, capability));
+ }
+ }
+ if (claim.benchmarkStatus === 'meets-floor') {
+ if (!evidenceClasses.has('fixture')) findings.push(finding('full_claim_missing_fixture_evidence', language, capability));
+ if (!evidenceClasses.has('real-repo')) findings.push(finding('full_claim_missing_real_repo_evidence', language, capability));
+ }
+ for (const entry of evidence) {
+ const evidencePath = entry?.path;
+ if (typeof evidencePath !== 'string' || !evidencePath) {
+ findings.push(finding('evidence_path_missing', language, capability));
+ continue;
+ }
+ if (path.isAbsolute(evidencePath) || WINDOWS_ABSOLUTE_PATH_RE.test(evidencePath)) {
+ findings.push(finding('evidence_path_absolute', language, capability, evidencePath));
+ continue;
+ }
+ const resolved = path.resolve(repositoryRoot, evidencePath);
+ if (resolved !== repositoryRoot && !resolved.startsWith(`${repositoryRoot}${path.sep}`)) {
+ findings.push(finding('evidence_path_escape', language, capability, evidencePath));
+ continue;
+ }
+ if (!await evidencePathExists(repositoryRoot, evidencePath)) {
+ findings.push(finding('evidence_path_not_found', language, capability, evidencePath));
+ }
+ }
+ }
+ }
+
+ for (const language of EXPECTED_TIER.keys()) {
+ if (!seen.has(language)) findings.push(finding('missing_language', language));
+ }
+ return findings;
+}
diff --git a/packages/protocol/src/code-intelligence-evaluation.mjs b/packages/protocol/src/code-intelligence-evaluation.mjs
new file mode 100644
index 00000000..61516b5b
--- /dev/null
+++ b/packages/protocol/src/code-intelligence-evaluation.mjs
@@ -0,0 +1,274 @@
+import graphSchema from '../schemas/code-intelligence-graph.schema.json' with { type: 'json' };
+import reportSchema from '../schemas/code-intelligence-language-report.schema.json' with { type: 'json' };
+import truthSchema from '../schemas/code-intelligence-language-truth.schema.json' with { type: 'json' };
+import { CODE_INTELLIGENCE_CAPABILITIES } from './code-intelligence-contract.mjs';
+import { sha256Hex, stableStringify } from './fingerprint.mjs';
+import { validateJsonSchema } from './schema-validator.mjs';
+
+const SYMBOL_NODE_KINDS = new Set([
+ 'namespace', 'library', 'function', 'method', 'class', 'interface', 'struct', 'enum',
+ 'trait', 'protocol', 'mixin', 'extension', 'type_alias', 'variable', 'constant',
+ 'route', 'configuration_resource', 'framework_component', 'execution_process',
+ 'build_target'
+]);
+const PRIVATE_PATH = /(?:^|[\s"'(])(?:\/Users\/|\/home\/[A-Za-z0-9._-]+\/|\/private\/|\/var\/folders\/|[A-Za-z]:\\)/u;
+
+export function auditCodeIntelligenceLanguageTruth(truth) {
+ const findings = [];
+ const validation = validateJsonSchema(truthSchema, truth);
+ for (const error of validation.errors) findings.push({ code: 'truth_schema_invalid', path: error.path });
+ if (!validation.valid) return findings;
+
+ const ids = new Set();
+ const semanticKeys = new Set();
+ for (const item of truth.items) {
+ if (ids.has(item.id)) findings.push({ code: 'truth_item_id_duplicate', itemId: item.id });
+ ids.add(item.id);
+ if (semanticKeys.has(item.semanticKey)) findings.push({ code: 'truth_semantic_key_duplicate', itemId: item.id });
+ semanticKeys.add(item.semanticKey);
+ }
+ if (truth.source.class === 'fixture' && !truth.source.ref.startsWith('fixture://')) {
+ findings.push({ code: 'truth_source_class_mismatch' });
+ }
+ if (truth.source.class === 'real-repo' && !truth.source.ref.startsWith('corpus://')) {
+ findings.push({ code: 'truth_source_class_mismatch' });
+ }
+ for (const [capability, claim] of Object.entries(truth.capabilityClaims)) {
+ if (claim === 'full' && truth.source.class !== 'real-repo') {
+ findings.push({ code: 'truth_full_claim_requires_real_repository', capability });
+ }
+ if (claim === 'full' && coverageForCapability(truth.reviewCoverage, capability) !== 'exhaustive') {
+ findings.push({ code: 'truth_full_claim_requires_exhaustive_review', capability });
+ }
+ }
+ if (truth.language === 'python' && truth.capabilityClaims.config !== 'unmeasured') {
+ const configItems = truth.items.filter((item) => item.capability === 'config');
+ const configurationResources = configItems.filter((item) => (
+ item.recordKind === 'node'
+ && item.kind === 'configuration_resource'
+ && item.expectation === 'present'
+ ));
+ const exactCausalEdges = configItems.filter((item) => (
+ item.recordKind === 'edge'
+ && item.expectation === 'present'
+ && item.resolution === 'exact'
+ && item.kind === 'depends_on'
+ && item.from.kind === 'configuration_resource'
+ && item.to.kind === 'package'
+ ));
+
+ for (const item of configItems) {
+ const allowedNode = item.recordKind === 'node' && item.kind === 'configuration_resource';
+ const allowedEdge = item.recordKind === 'edge'
+ && item.kind === 'depends_on'
+ && item.from.kind === 'configuration_resource'
+ && item.to.kind === 'package';
+ if (!allowedNode && !allowedEdge) {
+ findings.push({ code: 'python_config_truth_item_kind_invalid', itemId: item.id });
+ } else if (allowedEdge && item.expectation === 'present' && item.resolution !== 'exact') {
+ findings.push({ code: 'python_config_truth_edge_not_exact', itemId: item.id });
+ }
+ }
+ if (configurationResources.length === 0) {
+ findings.push({ code: 'python_config_claim_missing_configuration_resource', capability: 'config' });
+ }
+ if (exactCausalEdges.length === 0) {
+ findings.push({ code: 'python_config_claim_missing_exact_causal_edge', capability: 'config' });
+ }
+ }
+ if (truth.language === 'python' && truth.capabilityClaims.frameworks !== 'unmeasured') {
+ const frameworkItems = truth.items.filter((item) => item.capability === 'frameworks');
+ const isRouteEdge = (item) => (
+ item.recordKind === 'edge'
+ && item.kind === 'handles_route'
+ && ['function', 'method'].includes(item.from.kind)
+ && item.to.kind === 'route'
+ );
+ const exactPresentRouteEdges = frameworkItems.filter((item) => (
+ isRouteEdge(item)
+ && item.expectation === 'present'
+ && item.resolution === 'exact'
+ ));
+
+ for (const item of frameworkItems) {
+ if (!isRouteEdge(item)) {
+ findings.push({ code: 'python_framework_truth_item_kind_invalid', itemId: item.id });
+ } else if (item.expectation === 'present' && item.resolution !== 'exact') {
+ findings.push({ code: 'python_framework_truth_edge_not_exact', itemId: item.id });
+ }
+ }
+ if (exactPresentRouteEdges.length === 0) {
+ findings.push({ code: 'python_framework_claim_missing_exact_route_edge', capability: 'frameworks' });
+ }
+ }
+ if (truth.truthFingerprint !== truthFingerprint(truth)) findings.push({ code: 'truth_fingerprint_mismatch' });
+ return findings;
+}
+
+export function evaluateCodeIntelligenceLanguage({ truth, graphRuns } = {}) {
+ const truthFindings = auditCodeIntelligenceLanguageTruth(truth);
+ if (truthFindings.length > 0) {
+ const error = new Error('code_intelligence_truth_invalid');
+ error.code = 'code_intelligence_truth_invalid';
+ error.findings = truthFindings;
+ throw error;
+ }
+ if (!Array.isArray(graphRuns) || graphRuns.length < 2 || graphRuns.length > 10) {
+ throw new Error('code_intelligence_graph_runs_invalid');
+ }
+ for (const graph of graphRuns) {
+ if (!validateJsonSchema(graphSchema, graph).valid) throw new Error('code_intelligence_graph_run_invalid');
+ if (graph.repository.workspaceId !== graphRuns[0].repository.workspaceId) {
+ throw new Error('code_intelligence_graph_workspace_mismatch');
+ }
+ }
+ const graph = graphRuns[0];
+ const nodeById = new Map(graph.nodes.map((node) => [node.id, node]));
+ const outcomes = truth.items.map((item) => {
+ const present = truthItemPresent(item, graph, nodeById);
+ return {
+ item,
+ present,
+ matched: item.expectation === 'present' ? present : !present
+ };
+ });
+ const fingerprints = graphRuns.map((item) => item.graphFingerprint);
+ const deterministic = new Set(fingerprints).size === 1;
+ const duplicateCanonicalSymbolCount = duplicateCanonicalSymbols(graph.nodes);
+ const parseFailureCount = graph.diagnostics.filter((item) => item.code === 'parse_failed' || item.severity === 'error').length;
+ const failures = [];
+ if (!deterministic) failures.push({ code: 'graph_fingerprint_nondeterministic' });
+ if (duplicateCanonicalSymbolCount > 0) failures.push({ code: 'duplicate_canonical_symbol' });
+ if (parseFailureCount > 0) failures.push({ code: 'repository_parse_failure' });
+ for (const outcome of outcomes.filter((item) => !item.matched)) {
+ failures.push({
+ code: 'truth_expectation_mismatch',
+ itemId: outcome.item.id,
+ capability: outcome.item.capability
+ });
+ }
+
+ const declarationItems = outcomes.filter((item) => item.item.recordKind === 'node' && item.item.expectation === 'present');
+ const relationshipItems = outcomes.filter((item) => item.item.recordKind === 'edge' && item.item.kind !== 'calls' && item.item.expectation === 'present');
+ const callItems = outcomes.filter((item) => item.item.recordKind === 'edge' && item.item.kind === 'calls');
+ const callTruePositiveCount = callItems.filter((item) => item.item.expectation === 'present' && item.present).length;
+ const callFalsePositiveCount = callItems.filter((item) => item.item.expectation === 'absent' && item.present).length;
+ const metrics = {
+ declarationRecall: ratio(declarationItems.filter((item) => item.present).length, declarationItems.length),
+ relationshipRecall: ratio(relationshipItems.filter((item) => item.present).length, relationshipItems.length),
+ reviewedCallPrecision: ratio(callTruePositiveCount, callTruePositiveCount + callFalsePositiveCount),
+ duplicateCanonicalSymbolCount,
+ parseFailureCount,
+ deterministicGraphFingerprint: deterministic,
+ truthItemCount: outcomes.length,
+ matchedTruthItemCount: outcomes.filter((item) => item.matched).length
+ };
+ const structural = {
+ schemaVersion: '1.0.0',
+ reportVersion: 'memory-recall-code-intelligence-language-report-1',
+ truthId: truth.id,
+ language: truth.language,
+ sourceRef: truth.source.ref,
+ graphFingerprints: fingerprints,
+ reviewCoverage: truth.reviewCoverage,
+ metrics,
+ capabilities: CODE_INTELLIGENCE_CAPABILITIES.map((id) => capabilityResult({ id, truth, outcomes })),
+ failures,
+ gateDecision: failures.length === 0 ? 'pass' : 'fail',
+ claims: {
+ accuracyFloorMet: false,
+ parity: false,
+ leadership: false
+ },
+ safeguards: {
+ rawSourceStored: false,
+ absolutePathsStored: false,
+ environmentVariablesStored: false,
+ networkCalls: 0,
+ modelCalls: 0,
+ canonicalMemoryWrites: 0,
+ workspaceWrites: 0
+ }
+ };
+ const report = Object.freeze({
+ ...structural,
+ reportFingerprint: fingerprint(structural)
+ });
+ if (!validateJsonSchema(reportSchema, report).valid || PRIVATE_PATH.test(JSON.stringify(report))) {
+ throw new Error('code_intelligence_language_report_invalid');
+ }
+ return report;
+}
+
+export function truthFingerprint(truth) {
+ const { truthFingerprint: _truthFingerprint, ...structural } = truth;
+ return fingerprint(structural);
+}
+
+function truthItemPresent(item, graph, nodeById) {
+ if (item.recordKind === 'node') return graph.nodes.some((node) => nodeMatches(item, node));
+ if (item.recordKind === 'diagnostic') {
+ return graph.diagnostics.some((diagnostic) => diagnostic.code === item.code && diagnostic.locator === item.locator);
+ }
+ return graph.edges.some((edge) => {
+ const from = nodeById.get(edge.fromNodeId);
+ const to = nodeById.get(edge.toNodeId);
+ return edge.kind === item.kind
+ && from && nodeMatches(item.from, from)
+ && to && nodeMatches(item.to, to)
+ && edge.evidence.locator === item.locator
+ && (item.resolution === undefined || edge.resolution === item.resolution);
+ });
+}
+
+function nodeMatches(selector, node) {
+ return node.kind === selector.kind
+ && node.name === selector.name
+ && node.locator === selector.locator
+ && (selector.qualifiedName === undefined || node.qualifiedName === selector.qualifiedName);
+}
+
+function duplicateCanonicalSymbols(nodes) {
+ const counts = new Map();
+ for (const node of nodes.filter((item) => SYMBOL_NODE_KINDS.has(item.kind))) {
+ const key = `${node.language}|${node.kind}|${node.qualifiedName}|${node.locator}`;
+ counts.set(key, (counts.get(key) ?? 0) + 1);
+ }
+ return [...counts.values()].reduce((sum, count) => sum + Math.max(0, count - 1), 0);
+}
+
+function ratio(numerator, denominator) {
+ return Object.freeze({
+ numerator,
+ denominator,
+ value: denominator === 0 ? null : Number((numerator / denominator).toFixed(6))
+ });
+}
+
+function capabilityResult({ id, truth, outcomes }) {
+ const relevant = outcomes.filter((item) => item.item.capability === id);
+ const matchedItemCount = relevant.filter((item) => item.matched).length;
+ const coverage = coverageForCapability(truth.reviewCoverage, id);
+ const benchmarkStatus = coverage === 'not-applicable'
+ ? 'not-applicable'
+ : relevant.some((item) => !item.matched)
+ ? 'does-not-meet-floor'
+ : 'unmeasured';
+ return Object.freeze({
+ id,
+ claim: truth.capabilityClaims[id],
+ benchmarkStatus,
+ itemCount: relevant.length,
+ matchedItemCount
+ });
+}
+
+function coverageForCapability(reviewCoverage, capability) {
+ if (capability === 'calls') return reviewCoverage.calls;
+ if (capability === 'parse' || capability === 'structure') return reviewCoverage.declarations;
+ return reviewCoverage.relationships;
+}
+
+function fingerprint(value) {
+ return `sha256:${sha256Hex(stableStringify(value))}`;
+}
diff --git a/packages/protocol/src/code-intelligence-index-contract.mjs b/packages/protocol/src/code-intelligence-index-contract.mjs
new file mode 100644
index 00000000..c7f587a4
--- /dev/null
+++ b/packages/protocol/src/code-intelligence-index-contract.mjs
@@ -0,0 +1,23 @@
+export const CODE_INTELLIGENCE_INDEX_LOCATOR = 'workspace://.local/source-index/index.v1.sqlite';
+
+export const CODE_INTELLIGENCE_INDEX_OPERATIONS = Object.freeze([
+ 'index.build',
+ 'index.refresh',
+ 'index.repair',
+ 'index.status',
+ 'index.doctor',
+ 'index.query'
+]);
+
+export const CODE_INTELLIGENCE_INDEX_QUERY_KINDS = Object.freeze([
+ 'summary',
+ 'exact',
+ 'search',
+ 'neighborhood',
+ 'dependencies',
+ 'trace',
+ 'impact',
+ 'routes',
+ 'communities',
+ 'processes'
+]);
diff --git a/packages/protocol/src/index.mjs b/packages/protocol/src/index.mjs
index 0e57d313..ee7e17dc 100644
--- a/packages/protocol/src/index.mjs
+++ b/packages/protocol/src/index.mjs
@@ -38,6 +38,7 @@ export function createEvent({ type, workspaceId='ws_local', runId, actorId='syst
export { validateJsonSchema, assertJsonSchema } from './schema-validator.mjs';
export { canonicalStringify, stableStringify, sha256Hex } from './fingerprint.mjs';
export {
+ isSafeSourceGraphDisplayLabel,
normalizeSourceGraphWorkspaceLocator,
SOURCE_GRAPH_SAFE_LABEL_PATTERN,
SOURCE_GRAPH_SAFE_LABEL_RE,
@@ -45,3 +46,19 @@ export {
SOURCE_GRAPH_WORKSPACE_LOCATOR_PATTERN,
SOURCE_GRAPH_WORKSPACE_LOCATOR_RE
} from './source-graph-locator.mjs';
+export {
+ CODE_INTELLIGENCE_CAPABILITIES,
+ CODE_INTELLIGENCE_TIER_1_LANGUAGES,
+ CODE_INTELLIGENCE_TIER_2_LANGUAGES,
+ auditCodeIntelligenceCapabilityMatrix
+} from './code-intelligence-contract.mjs';
+export {
+ auditCodeIntelligenceLanguageTruth,
+ evaluateCodeIntelligenceLanguage,
+ truthFingerprint
+} from './code-intelligence-evaluation.mjs';
+export {
+ CODE_INTELLIGENCE_INDEX_LOCATOR,
+ CODE_INTELLIGENCE_INDEX_OPERATIONS,
+ CODE_INTELLIGENCE_INDEX_QUERY_KINDS
+} from './code-intelligence-index-contract.mjs';
diff --git a/packages/protocol/src/source-graph-locator.mjs b/packages/protocol/src/source-graph-locator.mjs
index 08ef07c4..7613cd8b 100644
--- a/packages/protocol/src/source-graph-locator.mjs
+++ b/packages/protocol/src/source-graph-locator.mjs
@@ -2,7 +2,7 @@
// Keep it narrowly scoped to portable workspace-relative source graph locators.
export const SOURCE_GRAPH_WORKSPACE_ID_PATTERN = String.raw`^[a-z][a-z0-9_-]{0,127}$`;
export const SOURCE_GRAPH_FINGERPRINT_PATTERN = String.raw`^sha256:[a-f0-9]{64}$`;
-export const SOURCE_GRAPH_WORKSPACE_LOCATOR_PATTERN = String.raw`^workspace://(?!/)(?![^/]*%)(?![A-Za-z][A-Za-z0-9+.-]*:)(?!\.\.(?:/|$))(?!.*\/\.\.(?:/|$))(?!(?:Users|private)(?:/|$))(?!var/folders(?:/|$))(?!.*\/(?:Users|private)(?:/|$))(?!.*\/var/folders(?:/|$))(?!.*%(?:2[eEfF]|3[aA]|5[cC]|25))[A-Za-z0-9._~!$&'()*+,;=@%/\[\]-]{1,512}(?:#L[0-9]+-L[0-9]+)?$`;
+export const SOURCE_GRAPH_WORKSPACE_LOCATOR_PATTERN = String.raw`^workspace://(?!/)(?![^/]*%)(?![A-Za-z][A-Za-z0-9+.-]*:)(?!\.\.(?:/|$))(?!.*\/\.\.(?:/|$))(?!.*%(?:2[eEfF]|3[aA]|5[cC]|25))[A-Za-z0-9._~!$&'()*+,;=@%/\[\]-]{1,512}(?:#L[0-9]+-L[0-9]+)?$`;
export const SOURCE_GRAPH_WORKSPACE_ID_RE = new RegExp(SOURCE_GRAPH_WORKSPACE_ID_PATTERN, 'u');
export const SOURCE_GRAPH_FINGERPRINT_RE = new RegExp(SOURCE_GRAPH_FINGERPRINT_PATTERN, 'u');
export const SOURCE_GRAPH_WORKSPACE_LOCATOR_RE = new RegExp(SOURCE_GRAPH_WORKSPACE_LOCATOR_PATTERN, 'u');
@@ -50,5 +50,9 @@ function sourceGraphLocatorHasUriScheme(value) {
export const SOURCE_GRAPH_SAFE_LABEL_TOKEN_PATTERN = String.raw`[A-Za-z0-9_$@~./#*+,\[\]-]+`;
const SOURCE_GRAPH_SAFE_NODE_MODULE_PATTERN = String.raw`[A-Za-z0-9_][A-Za-z0-9_.-]*(?:/[A-Za-z0-9_][A-Za-z0-9_.-]*)*`;
const SOURCE_GRAPH_SAFE_LABEL_VALUE_PATTERN = String.raw`(?:${SOURCE_GRAPH_SAFE_LABEL_TOKEN_PATTERN}|node:${SOURCE_GRAPH_SAFE_NODE_MODULE_PATTERN}|local:absolute-import)`;
-export const SOURCE_GRAPH_SAFE_LABEL_PATTERN = String.raw`^(?=.{1,240}$)(?!/)(?![A-Za-z]:[\\/])(?!.*(?:^|[\\/])[Uu][Ss][Ee][Rr][Ss][\\/])(?!.*(?:^|[\\/])[Pp][Rr][Ii][Vv][Aa][Tt][Ee][\\/])(?!.*(?:^|[\\/])[Vv][Aa][Rr][\\/][Ff][Oo][Ll][Dd][Ee][Rr][Ss][\\/])(?!.*[?{}=;\\])(?!.*[Ss][Ee][Nn][Tt][Ii][Nn][Ee][Ll])${SOURCE_GRAPH_SAFE_LABEL_VALUE_PATTERN}(?: (?:contains|defined_in|imports|exports|references|calls)(?: ${SOURCE_GRAPH_SAFE_LABEL_VALUE_PATTERN}){1,2})?$`;
+export const SOURCE_GRAPH_SAFE_LABEL_PATTERN = String.raw`^(?=.{1,240}$)(?!/)(?![A-Za-z]:[\\/])(?!.*[?{}=;\\])(?!.*[Ss][Ee][Nn][Tt][Ii][Nn][Ee][Ll])${SOURCE_GRAPH_SAFE_LABEL_VALUE_PATTERN}(?: (?:contains|defined_in|imports|exports|references|calls)(?: ${SOURCE_GRAPH_SAFE_LABEL_VALUE_PATTERN}){1,2})?$`;
export const SOURCE_GRAPH_SAFE_LABEL_RE = new RegExp(SOURCE_GRAPH_SAFE_LABEL_PATTERN, 'u');
+
+export function isSafeSourceGraphDisplayLabel(value) {
+ return typeof value === 'string' && SOURCE_GRAPH_SAFE_LABEL_RE.test(value);
+}
diff --git a/packages/recall-map/src/index.mjs b/packages/recall-map/src/index.mjs
index 7e92eb6c..cd3bbf70 100644
--- a/packages/recall-map/src/index.mjs
+++ b/packages/recall-map/src/index.mjs
@@ -2,11 +2,15 @@ import { createHash } from 'node:crypto';
import { lstat, realpath } from 'node:fs/promises';
import path from 'node:path';
import { stableStringify } from '../../protocol/src/index.mjs';
+import {
+ SOURCE_GRAPH_SAFE_LABEL_RE,
+ SOURCE_GRAPH_WORKSPACE_LOCATOR_RE
+} from '../../protocol/src/source-graph-locator.mjs';
import { inspectRepositoryIdentity } from '../../harness-context/src/index.mjs';
import {
DEFAULT_SOURCE_GRAPH_PREVIEW_MAX_FILE_BYTES,
DEFAULT_SOURCE_GRAPH_PREVIEW_MAX_FILES,
- buildSourceGraphPreview
+ NATIVE_INDEX_LANGUAGES
} from '../../source-graph/src/index.mjs';
const REPORT_VERSION = 'memory-recall-map-1.1.0';
@@ -24,10 +28,15 @@ const DEFAULT_MAP_LIMIT = 20;
const MAX_STALE_FACTS = 500;
const MAX_PROPOSAL_ATTEMPTS = 10;
const EDGE_KINDS = new Set(['contains', 'defined_in', 'imports', 'exports', 'references', 'calls']);
-const LOCATOR_SEGMENT = '(?!\\.{1,2}(?:/|#|$))[A-Za-z0-9._@+~,-]+';
-const SAFE_LOCATOR = new RegExp(`^workspace://${LOCATOR_SEGMENT}(?:/${LOCATOR_SEGMENT})*(?:#L[0-9]+-L[0-9]+)?$`, 'u');
-const LABEL_TOKEN = '[A-Za-z0-9_$@~./:#*+,-]+';
-const SAFE_LABEL = new RegExp(`^(?!/)(?![A-Za-z]:[\\\\/])(?!.*://)${LABEL_TOKEN}(?: (?:contains|defined_in|imports|exports|references|calls) ${LABEL_TOKEN})?$`, 'u');
+const SAFE_LOCATOR = SOURCE_GRAPH_WORKSPACE_LOCATOR_RE;
+const SAFE_LABEL = SOURCE_GRAPH_SAFE_LABEL_RE;
+const SAFE_GROUP_PREFIX = /^[A-Za-z0-9._~!$&'()*+,;=@%\[\]-]+(?:\/[A-Za-z0-9._~!$&'()*+,;=@%\[\]-]+){0,2}$/u;
+const GROUP_ID = /^sggroup_[a-f0-9]{24}$/u;
+const RELATION_ID = /^sgrelation_[a-f0-9]{24}$/u;
+const NODE_ID = /^sgnode_[a-f0-9]{32}$/u;
+const EDGE_ID = /^sgedge_[a-f0-9]{32}$/u;
+const PROCESS_ID = /^sgprocess_[a-f0-9]{24}$/u;
+const PROCESS_SINK_KIND = /^[a-z][a-z0-9_.-]{0,127}$/u;
function safeRepositoryName(root) {
const candidate = path.basename(root).slice(0, 120);
@@ -53,7 +62,10 @@ export async function buildRecallMap({
depth = DEFAULT_MAP_DEPTH,
limit = DEFAULT_MAP_LIMIT,
clock = () => new Date().toISOString(),
- sqliteLocator = SQLITE_LOCATOR
+ sqliteLocator = SQLITE_LOCATOR,
+ sourceGraphSnapshotService = null,
+ sourceGraphPreviewBuilder = null,
+ refreshSourceGraph = false
} = {}) {
const requestedRoot = normalizeRoot(root);
const workspace = await canonicalizeWorkspaceRoot(requestedRoot);
@@ -73,13 +85,18 @@ export async function buildRecallMap({
const requestedLimit = normalizeMapBoundedInteger(limit, DEFAULT_MAP_LIMIT, 1, MAX_MAP_REQUEST_LIMIT, 'recall_map_limit_invalid');
const safeLimit = Math.min(requestedLimit, MAX_ARCHITECTURE_ITEMS);
const sqlitePath = resolveSqlitePath(workspace.root, sqliteLocator);
- const preview = await buildSourceGraphPreview({
+ if (typeof sourceGraphPreviewBuilder !== 'function') {
+ throw new Error('recall_map_source_graph_preview_required');
+ }
+ const preview = await sourceGraphPreviewBuilder({
root: workspace.status === 'available' ? workspace.root : requestedRoot,
workspaceId: safeWorkspaceId,
changedLocators,
query: safeQuery,
depth: safeDepth,
limit: safeLimit,
+ snapshotService: sourceGraphSnapshotService,
+ refresh: Boolean(refreshSourceGraph),
clock: () => generatedAt
});
const architecture = summarizeArchitecture(preview, { limit: safeLimit });
@@ -130,6 +147,23 @@ export async function buildRecallMap({
});
}
+export async function buildRecallMapMemorySummary({
+ root,
+ workspaceId = 'ws_local',
+ clock = () => new Date().toISOString(),
+ sqliteLocator = SQLITE_LOCATOR
+} = {}) {
+ const workspace = await canonicalizeWorkspaceRoot(normalizeRoot(root));
+ const safeWorkspaceId = normalizeWorkspaceId(workspaceId);
+ const generatedAt = normalizeTimestamp(clock());
+ return summarizeMemory({
+ workspace,
+ sqlitePath: resolveSqlitePath(workspace.root, sqliteLocator),
+ workspaceId: safeWorkspaceId,
+ generatedAt
+ });
+}
+
function normalizeRoot(value) {
if (typeof value !== 'string' || !value.trim()) throw new Error('recall_map_root_required');
return path.resolve(value);
@@ -262,22 +296,32 @@ function isInsideRoot(root, candidate) {
function summarizeSupport(preview, memory) {
const diagnostics = preview.graph?.diagnostics ?? [];
- const unavailable = diagnostics.some((item) => item.code?.startsWith('source_graph_unavailable'));
+ const unavailable = preview.snapshot?.status === 'unavailable'
+ || diagnostics.some((item) => item.code?.startsWith('source_graph_unavailable'));
const summary = preview.graph?.summary ?? {};
+ const native = String(preview.graph?.parserVersion ?? '').startsWith('memory-recall-native-');
+ const representedFileCount = boundedInteger(summary.coverage?.representedFileCount ?? summary.fileCount, 0, DEFAULT_SOURCE_GRAPH_PREVIEW_MAX_FILES);
+ const omittedFileCount = boundedInteger(summary.coverage?.skippedFileCount, 0, DEFAULT_SOURCE_GRAPH_PREVIEW_MAX_FILES);
+ const coverageStatus = unavailable
+ ? 'unavailable'
+ : preview.snapshot?.status === 'stale'
+ ? 'stale'
+ : summary.coverage?.status === 'complete' ? 'complete' : 'partial';
return {
sourceGraph: {
status: unavailable ? 'unavailable' : 'implemented',
- languages: ['javascript', 'typescript'],
+ languages: native ? NATIVE_INDEX_LANGUAGES : ['javascript', 'typescript'],
coverage: {
- status: unavailable ? 'unavailable' : 'partial',
- analyzedFileCount: boundedInteger(summary.fileCount, 0, DEFAULT_SOURCE_GRAPH_PREVIEW_MAX_FILES),
- maxFiles: DEFAULT_SOURCE_GRAPH_PREVIEW_MAX_FILES,
+ status: coverageStatus,
+ analyzedFileCount: representedFileCount,
+ maxFiles: native ? Math.max(1, representedFileCount + omittedFileCount) : DEFAULT_SOURCE_GRAPH_PREVIEW_MAX_FILES,
maxFileBytes: DEFAULT_SOURCE_GRAPH_PREVIEW_MAX_FILE_BYTES,
diagnosticCount: boundedInteger(diagnostics.length, 0, 5000),
reasonCodes: unavailable
? ['source_graph_unavailable']
- : ['static_js_ts_only', 'bounded_file_scan']
- }
+ : native ? ['native_persistent_index', 'bounded_index_read'] : ['static_js_ts_only', 'bounded_file_scan']
+ },
+ snapshot: summarizeSnapshot(preview.snapshot)
},
memory: {
status: memory.status
@@ -285,6 +329,19 @@ function summarizeSupport(preview, memory) {
};
}
+function summarizeSnapshot(snapshot) {
+ return {
+ status: ['fresh', 'stale', 'unavailable'].includes(snapshot?.status) ? snapshot.status : 'unavailable',
+ reuse: ['cold', 'cache', 'inflight', 'none'].includes(snapshot?.reuse) ? snapshot.reuse : 'none',
+ reason: snapshot?.reason ? safeCode(snapshot.reason, 'source_graph_snapshot_unavailable') : null,
+ validationMode: ['watcher', 'metadata-scan', 'none'].includes(snapshot?.validationMode) ? snapshot.validationMode : 'none',
+ builtAt: snapshot?.builtAt && !Number.isNaN(Date.parse(snapshot.builtAt)) ? normalizeTimestamp(snapshot.builtAt) : null,
+ buildDurationMs: Number.isFinite(snapshot?.buildDurationMs) && snapshot.buildDurationMs >= 0
+ ? Math.min(snapshot.buildDurationMs, 3_600_000)
+ : null
+ };
+}
+
function summarizeArchitecture(preview, { limit = DEFAULT_MAP_LIMIT } = {}) {
const graph = preview.graph ?? {};
const summary = graph.summary ?? {};
@@ -294,6 +351,9 @@ function summarizeArchitecture(preview, { limit = DEFAULT_MAP_LIMIT } = {}) {
return {
entryPoints: (summary.entryPoints ?? []).slice(0, safeLimit).map(summarizeNodeReference),
hotspots: (summary.hotspots ?? []).slice(0, safeLimit).map(summarizeHotspot),
+ groups: (preview.orientation?.groups ?? []).slice(0, 12).map(summarizeOrientationGroup).filter(Boolean),
+ groupRelations: (preview.orientation?.relations ?? []).slice(0, 20).map(summarizeOrientationRelation).filter(Boolean),
+ processes: (preview.orientation?.processes ?? []).slice(0, 12).map(summarizeOrientationProcess).filter(Boolean),
search: {
status: unavailable ? 'unavailable' : 'available',
queryFingerprint: safeFingerprint(preview.search?.queryFingerprint),
@@ -313,6 +373,86 @@ function summarizeArchitecture(preview, { limit = DEFAULT_MAP_LIMIT } = {}) {
};
}
+function summarizeOrientationGroup(group) {
+ if (!GROUP_ID.test(String(group?.id ?? '')) || !SAFE_GROUP_PREFIX.test(String(group?.prefix ?? ''))) return null;
+ return {
+ id: group.id,
+ prefix: group.prefix,
+ fileCount: boundedInteger(group.fileCount),
+ symbolCount: boundedInteger(group.symbolCount),
+ changedFileCount: boundedInteger(group.changedFileCount),
+ entryPoints: (group.entryPoints ?? []).slice(0, 2).map((entryPoint) => {
+ if (!NODE_ID.test(String(entryPoint?.nodeId ?? ''))) return null;
+ return {
+ nodeId: entryPoint.nodeId,
+ ...summarizeNodeReference(entryPoint)
+ };
+ }).filter(Boolean)
+ };
+}
+
+function summarizeOrientationRelation(relation) {
+ if (
+ !RELATION_ID.test(String(relation?.id ?? ''))
+ || !GROUP_ID.test(String(relation?.sourceGroupId ?? ''))
+ || !GROUP_ID.test(String(relation?.targetGroupId ?? ''))
+ || !SAFE_GROUP_PREFIX.test(String(relation?.sourcePrefix ?? ''))
+ || !SAFE_GROUP_PREFIX.test(String(relation?.targetPrefix ?? ''))
+ ) return null;
+ const edgeKindCounts = Object.fromEntries(
+ Object.entries(relation.edgeKindCounts ?? {})
+ .filter(([kind]) => ['imports', 'calls'].includes(kind))
+ .map(([kind, count]) => [kind, boundedInteger(count)])
+ );
+ return {
+ id: relation.id,
+ sourceGroupId: relation.sourceGroupId,
+ targetGroupId: relation.targetGroupId,
+ sourcePrefix: relation.sourcePrefix,
+ targetPrefix: relation.targetPrefix,
+ count: boundedInteger(relation.count),
+ edgeKindCounts
+ };
+}
+
+function summarizeOrientationProcess(process) {
+ const nodeIds = [...new Set(process?.nodeIds ?? [])].filter((id) => NODE_ID.test(String(id))).slice(0, 5);
+ const relationshipIds = [...new Set(process?.relationshipIds ?? [])].filter((id) => EDGE_ID.test(String(id))).slice(0, 5);
+ const entryPoint = summarizeProcessNode(process?.entryPoint);
+ const sink = summarizeProcessNode(process?.sink);
+ if (
+ !PROCESS_ID.test(String(process?.id ?? ''))
+ || !entryPoint
+ || !sink
+ || nodeIds.length < 2
+ || relationshipIds.length !== nodeIds.length
+ || nodeIds[0] !== entryPoint.nodeId
+ || nodeIds.at(-1) !== sink.nodeId
+ || !PROCESS_SINK_KIND.test(String(process?.sinkKind ?? ''))
+ || process?.algorithmVersion !== 'entry-path-v1'
+ ) return null;
+ return {
+ id: process.id,
+ label: safeLabel(process.label),
+ entryPoint,
+ sink,
+ sinkKind: process.sinkKind,
+ nodeIds,
+ relationshipIds,
+ confidence: boundedScore(process.confidence),
+ algorithmVersion: process.algorithmVersion,
+ truncated: process.truncated === true
+ };
+}
+
+function summarizeProcessNode(node) {
+ if (!NODE_ID.test(String(node?.nodeId ?? ''))) return null;
+ return {
+ nodeId: node.nodeId,
+ ...summarizeNodeReference(node)
+ };
+}
+
async function summarizeMemory({ workspace, sqlitePath, workspaceId, generatedAt }) {
const store = await inspectSqliteStore({ workspace, sqlitePath });
if (store.status !== 'available') {
diff --git a/packages/source-graph/src/index.mjs b/packages/source-graph/src/index.mjs
index b4e1c8de..fd8e685b 100644
--- a/packages/source-graph/src/index.mjs
+++ b/packages/source-graph/src/index.mjs
@@ -1,376 +1,12 @@
-import { estimateTokens, hashRef, stableStringify } from '../../context-compiler/src/index.mjs';
-import { validateJsonSchema } from '../../protocol/src/schema-validator.mjs';
-import {
- normalizeSourceGraphWorkspaceLocator,
- SOURCE_GRAPH_WORKSPACE_ID_RE
-} from '../../protocol/src/source-graph-locator.mjs';
-import sourceGraphSchema from '../../protocol/schemas/source-graph.schema.json' with { type: 'json' };
-import {
- buildJsTsSourceGraph,
- mapSourceGraphDiffImpact,
- rankArchitectureNodes,
- searchSourceGraph,
- sanitizeSourceGraphPublicOutput,
- traceSourceGraph
-} from '../../../providers/native/context-candidate-ast-code/src/index.mjs';
-
-const PREVIEW_VERSION = 'oaf-source-graph-preview-1.0.0';
-export const DEFAULT_SOURCE_GRAPH_PREVIEW_MAX_FILE_BYTES = 512 * 1024;
-export const DEFAULT_SOURCE_GRAPH_PREVIEW_MAX_FILES = 1000;
-const MAX_CHANGED_LOCATORS = 16;
-const NODE_KINDS = new Set(['file', 'chunk', 'symbol', 'module']);
-const EDGE_KINDS = new Set(['contains', 'defined_in', 'imports', 'exports', 'references', 'calls']);
-const TRACE_DIRECTIONS = new Set(['outbound', 'inbound', 'both']);
-
-export async function buildSourceGraphPreview({
- root,
- workspaceId = 'ws_local',
- query = '',
- startName = null,
- startNodeId = null,
- changedLocators = [],
- nodeKinds = null,
- edgeKinds = null,
- labelPattern = null,
- locatorPrefix = null,
- direction = 'outbound',
- limit = 20,
- offset = 0,
- depth = 2,
- sampleLimit = 12,
- maxFiles = DEFAULT_SOURCE_GRAPH_PREVIEW_MAX_FILES,
- maxFileBytes = DEFAULT_SOURCE_GRAPH_PREVIEW_MAX_FILE_BYTES,
- clock = () => new Date().toISOString()
-} = {}) {
- if (typeof root !== 'string' || !root) throw new Error('source_graph_preview_root_required');
- const safeWorkspaceId = normalizeWorkspaceId(workspaceId);
- const boundedLimit = boundedInteger(limit, 'source_graph_preview_limit_invalid', 1, 100);
- const boundedOffset = boundedInteger(offset, 'source_graph_preview_offset_invalid', 0, 10_000);
- const boundedDepth = boundedInteger(depth, 'source_graph_preview_depth_invalid', 1, 5);
- const boundedSampleLimit = boundedInteger(sampleLimit, 'source_graph_preview_sample_limit_invalid', 1, 50);
- const boundedMaxFiles = boundedInteger(maxFiles, 'source_graph_preview_max_files_invalid', 1, 1000);
- const boundedMaxFileBytes = boundedInteger(maxFileBytes, 'source_graph_preview_max_file_bytes_invalid', 1024, 1024 * 1024);
- const normalizedChangedLocators = normalizeChangedLocators(changedLocators);
- const normalizedLocatorPrefix = locatorPrefix ? normalizeLocatorPrefix(locatorPrefix) : null;
- const normalizedNodeKinds = normalizeKinds(nodeKinds, NODE_KINDS, 'source_graph_preview_node_kind_invalid');
- const normalizedEdgeKinds = normalizeKinds(edgeKinds, EDGE_KINDS, 'source_graph_preview_edge_kind_invalid');
- if (!TRACE_DIRECTIONS.has(direction)) throw new Error(`source_graph_preview_direction_invalid:${direction}`);
-
- const generatedAt = clock();
- let graph;
- try {
- graph = await buildJsTsSourceGraph({
- root,
- workspaceId: safeWorkspaceId,
- maxFiles: boundedMaxFiles,
- maxFileBytes: boundedMaxFileBytes,
- clock: () => generatedAt
- });
- assertFacadeSafeSourceGraph(graph);
- } catch (error) {
- return unavailableSourceGraphPreview({
- workspaceId: safeWorkspaceId,
- generatedAt,
- query,
- normalizedChangedLocators,
- normalizedNodeKinds,
- normalizedEdgeKinds,
- labelPattern,
- normalizedLocatorPrefix,
- limit: boundedLimit,
- offset: boundedOffset,
- depth: boundedDepth,
- sampleLimit: boundedSampleLimit,
- errorCode: safeSourceGraphErrorCode(error)
- });
- }
- const ranking = rankArchitectureNodes(graph, {
- changedLocators: normalizedChangedLocators,
- query,
- limit: 25
- });
- const search = searchSourceGraph(graph, {
- query,
- nodeKinds: normalizedNodeKinds,
- edgeKinds: normalizedEdgeKinds,
- labelPattern,
- locatorPrefix: normalizedLocatorPrefix,
- limit: boundedLimit,
- offset: boundedOffset
- });
- const trace = startName || startNodeId
- ? traceSourceGraph(graph, {
- startName,
- startNodeId,
- edgeKinds: normalizedEdgeKinds?.length ? normalizedEdgeKinds : ['calls'],
- locatorPrefix: normalizedLocatorPrefix,
- direction,
- depth: boundedDepth,
- limit: boundedLimit
- })
- : null;
- const impact = normalizedChangedLocators.length
- ? mapSourceGraphDiffImpact(graph, {
- changedLocators: normalizedChangedLocators,
- depth: boundedDepth,
- limit: boundedLimit
- })
- : null;
- const compact = compactGraph(graph, boundedSampleLimit, ranking);
-
- return Object.freeze({
- schemaVersion: '1.0.0',
- previewVersion: PREVIEW_VERSION,
- workspaceId: safeWorkspaceId,
- generatedAt,
- graph: compact,
- search,
- trace,
- impact,
- measurements: sourceGraphPreviewMeasurements({ graph, compact, search, trace, impact }),
- safeguards: {
- dryRun: true,
- persisted: false,
- canonicalStateMutated: false,
- localFilesWritten: 0,
- modelCalls: 0,
- networkCalls: 0,
- externalAdaptersEnabled: 0,
- externalWritesEnabled: false,
- graphDatabaseUsed: false,
- rawBodyIncluded: false,
- sourceSlicesRead: false
- }
- });
-}
-
-function compactGraph(graph, sampleLimit, ranking = null) {
- const publicGraph = sanitizeSourceGraphPublicOutput(graph);
- const summary = ranking
- ? Object.freeze({
- ...graph.summary,
- entryPoints: ranking.entryPoints,
- hotspots: ranking.hotspots,
- deprioritized: ranking.deprioritized
- })
- : graph.summary;
- return Object.freeze({
- schemaVersion: publicGraph.schemaVersion,
- workspaceId: publicGraph.workspaceId,
- graphVersion: publicGraph.graphVersion,
- parserVersion: publicGraph.parserVersion,
- builtAt: publicGraph.builtAt,
- sourceIndexFingerprint: publicGraph.sourceIndexFingerprint,
- graphFingerprint: publicGraph.graphFingerprint,
- summary,
- diagnostics: publicGraph.diagnostics,
- sampleLimit,
- sampleNodes: publicGraph.nodes.slice(0, sampleLimit),
- sampleEdges: publicGraph.edges.slice(0, sampleLimit),
- omittedNodes: Math.max(0, publicGraph.nodes.length - sampleLimit),
- omittedEdges: Math.max(0, publicGraph.edges.length - sampleLimit)
- });
-}
-
-function assertFacadeSafeSourceGraph(graph) {
- if (!validateJsonSchema(sourceGraphSchema, graph).valid) throw new Error('source_graph_preview_graph_invalid');
- const publicOutput = sanitizeSourceGraphPublicOutput(graph);
- if (!publicOutput.completeEnvelope || !publicOutput.diagnosticsComplete) throw new Error('source_graph_preview_graph_invalid');
- if (publicOutput.workspaceId !== graph.workspaceId
- || publicOutput.graphFingerprint !== graph.graphFingerprint
- || publicOutput.sourceIndexFingerprint !== graph.sourceIndexFingerprint
- || publicOutput.nodes.length !== graph.nodes.length
- || publicOutput.edges.length !== graph.edges.length
- || publicOutput.diagnostics.length !== graph.diagnostics.length) throw new Error('source_graph_preview_graph_invalid');
-}
-
-function unavailableSourceGraphPreview({
- workspaceId,
- generatedAt,
- query,
- normalizedChangedLocators,
- normalizedNodeKinds,
- normalizedEdgeKinds,
- labelPattern,
- normalizedLocatorPrefix,
- limit,
- offset,
- depth,
- sampleLimit,
- errorCode
-}) {
- const code = safeDiagnosticCode(`source_graph_unavailable:${errorCode}`);
- const graphFingerprint = hashRef(stableStringify({ kind: 'source-graph-unavailable', workspaceId, code }));
- const sourceIndexFingerprint = hashRef(stableStringify({ kind: 'source-index-unavailable', workspaceId, code }));
- const diagnostic = Object.freeze({ locator: 'workspace://__source_graph_preview__', code });
- const search = Object.freeze({
- schemaVersion: '1.0.0',
- workspaceId,
- graphFingerprint,
- retrievalMethod: 'source_graph_lexical',
- queryFingerprint: hashRef(stableStringify({
- query: String(query ?? ''),
- nodeKinds: normalizedNodeKinds ?? [],
- edgeKinds: normalizedEdgeKinds ?? [],
- labelPattern,
- locatorPrefix: normalizedLocatorPrefix,
- limit,
- offset,
- unavailable: true
- })),
- total: 0,
- limit,
- offset,
- hasMore: false,
- omittedCount: 0,
- results: []
- });
- const impact = normalizedChangedLocators.length
- ? Object.freeze({
- schemaVersion: '1.0.0',
- workspaceId,
- graphFingerprint,
- changedLocators: normalizedChangedLocators,
- representedChangedLocators: [],
- depth,
- impactedNodeIds: [],
- impactedEdgeIds: [],
- impactedEdgeKindCounts: {},
- affectedSymbols: []
- })
- : null;
- const compact = Object.freeze({
- schemaVersion: '1.0.0',
- workspaceId,
- graphVersion: 'oaf-native-source-graph-unavailable-1.0.0',
- parserVersion: 'oaf-js-ts-static-unavailable',
- builtAt: generatedAt,
- sourceIndexFingerprint,
- graphFingerprint,
- summary: Object.freeze({
- fileCount: 0,
- symbolCount: 0,
- moduleCount: 0,
- nodeCount: 0,
- edgeCount: 0,
- nodeKindCounts: Object.freeze({}),
- edgeKindCounts: Object.freeze({}),
- hotspots: [],
- entryPoints: []
- }),
- diagnostics: [diagnostic],
- sampleLimit,
- sampleNodes: [],
- sampleEdges: [],
- omittedNodes: 0,
- omittedEdges: 0
- });
- return Object.freeze({
- schemaVersion: '1.0.0',
- previewVersion: PREVIEW_VERSION,
- workspaceId,
- generatedAt,
- graph: compact,
- search,
- trace: null,
- impact,
- measurements: sourceGraphPreviewMeasurements({ graph: null, compact, search, trace: null, impact }),
- safeguards: sourceGraphPreviewSafeguards()
- });
-}
-
-function sourceGraphPreviewMeasurements({ graph, compact, search, trace, impact }) {
- const fullGraphTokenEstimate = graph ? estimateTokens(JSON.stringify({
- nodes: graph.nodes,
- edges: graph.edges,
- diagnostics: graph.diagnostics
- })) : 0;
- const deliveredTokenEstimate = estimateTokens(JSON.stringify({ graph: compact, search, trace, impact }));
- const omittedTokenEstimate = Math.max(0, fullGraphTokenEstimate - deliveredTokenEstimate);
- return Object.freeze({
- schemaVersion: '1.0.0',
- measurementScope: 'full graph nodes/edges/diagnostics versus delivered preview payload',
- fullGraphTokenEstimate,
- deliveredTokenEstimate,
- omittedTokenEstimate,
- reductionPercent: fullGraphTokenEstimate ? Number(((omittedTokenEstimate / fullGraphTokenEstimate) * 100).toFixed(2)) : 0,
- sourceContentIncluded: false,
- providerBillingClaimed: false
- });
-}
-
-function sourceGraphPreviewSafeguards() {
- return {
- dryRun: true,
- persisted: false,
- canonicalStateMutated: false,
- localFilesWritten: 0,
- modelCalls: 0,
- networkCalls: 0,
- externalAdaptersEnabled: 0,
- externalWritesEnabled: false,
- graphDatabaseUsed: false,
- rawBodyIncluded: false,
- sourceSlicesRead: false
- };
-}
-
-function safeSourceGraphErrorCode(error) {
- const code = String(error?.message ?? 'source_graph_unavailable')
- .split(':')[0]
- .replace(/[^A-Za-z0-9_]/gu, '_')
- .replace(/_+/gu, '_')
- .replace(/^_+|_+$/gu, '')
- .toLowerCase();
- return /^[a-z][a-z0-9_]{0,35}$/u.test(code) ? code : 'source_graph_unavailable';
-}
-
-function safeDiagnosticCode(value) {
- const normalized = String(value ?? 'source_graph_unavailable')
- .replace(/[^A-Za-z0-9_:-]/gu, '_')
- .replace(/_+/gu, '_')
- .replace(/^_+|_+$/gu, '')
- .toLowerCase()
- .slice(0, 64);
- return /^[a-z][a-z0-9_:-]*$/u.test(normalized) ? normalized : 'source_graph_unavailable';
-}
-
-function normalizeWorkspaceId(value) {
- const normalized = String(value ?? '').trim();
- if (!SOURCE_GRAPH_WORKSPACE_ID_RE.test(normalized)) throw new Error('source_graph_preview_workspace_invalid');
- return normalized;
-}
-
-function normalizeKinds(values, allowed, code) {
- if (values === null || values === undefined || values === '') return null;
- const list = Array.isArray(values) ? values : String(values).split(',');
- const normalized = list.map((item) => String(item).trim()).filter(Boolean);
- for (const item of normalized) if (!allowed.has(item)) throw new Error(`${code}:${item}`);
- return normalized.length ? normalized : null;
-}
-
-function normalizeChangedLocators(values) {
- if (values === null || values === undefined || values === '') return [];
- const list = Array.isArray(values) ? values : String(values).split(',');
- const locators = [...new Set(list.map((item) => normalizeWorkspaceLocator(item, { stripFragment: true })).filter(Boolean))].sort();
- if (locators.length > MAX_CHANGED_LOCATORS) throw new Error('changed_context_too_many_locators');
- return locators;
-}
-
-function normalizeLocatorPrefix(value) {
- return normalizeWorkspaceLocator(value);
-}
-
-function normalizeWorkspaceLocator(value, options = undefined) {
- try {
- return normalizeSourceGraphWorkspaceLocator(value, options);
- } catch {
- throw new Error('source_graph_preview_locator_invalid');
- }
-}
-
-function boundedInteger(value, code, min, max) {
- const parsed = Number(value);
- if (!Number.isInteger(parsed) || parsed < min || parsed > max) throw new Error(`${code}:${value}`);
- return parsed;
-}
+export {
+ DEFAULT_SOURCE_GRAPH_PREVIEW_MAX_FILE_BYTES,
+ DEFAULT_SOURCE_GRAPH_PREVIEW_MAX_FILES,
+ NATIVE_INDEX_LANGUAGES,
+ buildNativeIndexArchitecture,
+ buildNativeIndexSourceGraphPreview,
+ buildUnavailableSourceGraphPreview,
+ nativeIndexReadyForAutomaticRead,
+ nativeIndexSource,
+ nativeStructuralNode,
+ nativeStructuralRelationship
+} from './native-index-projection.mjs';
diff --git a/packages/source-graph/src/native-index-projection.mjs b/packages/source-graph/src/native-index-projection.mjs
new file mode 100644
index 00000000..f838e17f
--- /dev/null
+++ b/packages/source-graph/src/native-index-projection.mjs
@@ -0,0 +1,1137 @@
+import { createHash } from 'node:crypto';
+import { estimateTokens } from '../../context-compiler/src/index.mjs';
+import {
+ normalizeSourceGraphWorkspaceLocator,
+ SOURCE_GRAPH_WORKSPACE_ID_RE
+} from '../../protocol/src/source-graph-locator.mjs';
+
+export const NATIVE_INDEX_LANGUAGES = Object.freeze([
+ 'c', 'cpp', 'csharp', 'dart', 'go', 'java', 'javascript', 'kotlin',
+ 'php', 'python', 'ruby', 'rust', 'swift', 'typescript'
+]);
+
+export const DEFAULT_SOURCE_GRAPH_PREVIEW_MAX_FILE_BYTES = 512 * 1024;
+export const DEFAULT_SOURCE_GRAPH_PREVIEW_MAX_FILES = 1000;
+
+const PREVIEW_VERSION = 'oaf-source-graph-preview-1.0.0';
+const INDEX_LOCATOR = 'workspace://.local/source-index/index.v1.sqlite';
+const NODE_KINDS = new Set(['file', 'module', 'package', 'namespace']);
+const SYMBOL_KINDS = new Set(['class', 'function', 'method', 'interface', 'type']);
+const EDGE_KINDS = new Set(['contains', 'defined_in', 'imports', 'exports', 'references', 'calls']);
+const PUBLIC_NODE_KINDS = new Set(['file', 'chunk', 'symbol', 'module']);
+const TRACE_DIRECTIONS = new Set(['outbound', 'inbound', 'both']);
+const MAX_CHANGED_LOCATORS = 16;
+const SOURCE_GRAPH_EXTENSIONS = Object.freeze([
+ '.bash', '.c', '.cc', '.cpp', '.cs', '.cjs', '.cxx', '.dart', '.go', '.h',
+ '.hpp', '.java', '.jl', '.js', '.jsx', '.kt', '.kts', '.lua', '.m', '.mjs',
+ '.mm', '.php', '.py', '.r', '.rb', '.rs', '.scala', '.sh', '.sql', '.swift',
+ '.ts', '.tsx', '.zig'
+]);
+
+export function buildUnavailableSourceGraphPreview({
+ workspaceId = 'ws_local',
+ query = '',
+ changedLocators = [],
+ nodeKinds = null,
+ edgeKinds = null,
+ labelPattern = null,
+ locatorPrefix = null,
+ direction = 'outbound',
+ limit = 20,
+ offset = 0,
+ depth = 2,
+ sampleLimit = 12,
+ errorCode = 'native_engine_unavailable',
+ clock = () => new Date().toISOString()
+} = {}) {
+ const safeWorkspaceId = normalizeWorkspaceId(workspaceId);
+ const boundedLimit = boundedInteger(limit, 1, 100, 'source_graph_preview_limit_invalid');
+ const boundedOffset = boundedInteger(offset, 0, 10_000, 'source_graph_preview_offset_invalid');
+ const boundedDepth = boundedInteger(depth, 1, 5, 'source_graph_preview_depth_invalid');
+ const boundedSampleLimit = boundedInteger(sampleLimit, 1, 50, 'source_graph_preview_sample_limit_invalid');
+ const normalizedChangedLocators = normalizeChangedLocators(changedLocators);
+ const normalizedNodeKinds = normalizeKinds(nodeKinds, PUBLIC_NODE_KINDS, 'source_graph_preview_node_kind_invalid');
+ const normalizedEdgeKinds = normalizeKinds(edgeKinds, EDGE_KINDS, 'source_graph_preview_edge_kind_invalid');
+ const normalizedLocatorPrefix = locatorPrefix ? normalizeWorkspaceLocator(locatorPrefix) : null;
+ if (!TRACE_DIRECTIONS.has(direction)) throw new Error(`source_graph_preview_direction_invalid:${direction}`);
+ const generatedAt = clock();
+ const code = safeDiagnosticCode(`source_graph_unavailable:${safeErrorCode(errorCode)}`);
+ const graphFingerprint = fingerprint({ kind: 'source-graph-unavailable', workspaceId: safeWorkspaceId, code });
+ const sourceIndexFingerprint = fingerprint({ kind: 'source-index-unavailable', workspaceId: safeWorkspaceId, code });
+ const diagnostic = Object.freeze({ locator: 'workspace://__source_graph_preview__', code });
+ const search = Object.freeze({
+ schemaVersion: '1.0.0',
+ workspaceId: safeWorkspaceId,
+ graphFingerprint,
+ retrievalMethod: 'source_graph_lexical',
+ queryFingerprint: fingerprint({
+ query: String(query ?? ''),
+ nodeKinds: normalizedNodeKinds ?? [],
+ edgeKinds: normalizedEdgeKinds ?? [],
+ labelPattern,
+ locatorPrefix: normalizedLocatorPrefix,
+ limit: boundedLimit,
+ offset: boundedOffset,
+ unavailable: true
+ }),
+ total: 0,
+ limit: boundedLimit,
+ offset: boundedOffset,
+ reachedOffset: boundedOffset,
+ offsetIncomplete: false,
+ continuationCursor: null,
+ truncated: false,
+ hasMore: false,
+ omittedCount: 0,
+ results: []
+ });
+ const impact = normalizedChangedLocators.length ? Object.freeze({
+ schemaVersion: '1.0.0',
+ workspaceId: safeWorkspaceId,
+ graphFingerprint,
+ changedLocators: normalizedChangedLocators,
+ representedChangedLocators: [],
+ depth: boundedDepth,
+ impactedNodeIds: [],
+ impactedEdgeIds: [],
+ impactedEdgeKindCounts: {},
+ affectedSymbols: []
+ }) : null;
+ const graph = Object.freeze({
+ schemaVersion: '1.0.0',
+ workspaceId: safeWorkspaceId,
+ graphVersion: 'memory-recall-native-source-graph-unavailable-1.0.0',
+ parserVersion: 'memory-recall-native-unavailable',
+ builtAt: generatedAt,
+ sourceIndexFingerprint,
+ graphFingerprint,
+ summary: Object.freeze({
+ fileCount: 0,
+ symbolCount: 0,
+ moduleCount: 0,
+ nodeCount: 0,
+ edgeCount: 0,
+ nodeKindCounts: Object.freeze({}),
+ edgeKindCounts: Object.freeze({}),
+ hotspots: [],
+ entryPoints: []
+ }),
+ diagnostics: [diagnostic],
+ sampleLimit: boundedSampleLimit,
+ sampleNodes: [],
+ sampleEdges: [],
+ omittedNodes: 0,
+ omittedEdges: 0
+ });
+ const snapshot = Object.freeze({
+ status: 'unavailable',
+ reuse: 'none',
+ reason: code,
+ generation: 0,
+ validationMode: 'none',
+ buildDurationMs: null,
+ builtAt: null
+ });
+ const orientation = Object.freeze({ groups: Object.freeze([]), relations: Object.freeze([]) });
+ const focus = Object.freeze({
+ nodeLimit: 200,
+ edgeLimit: 400,
+ nodes: Object.freeze([]),
+ edges: Object.freeze([]),
+ omittedNodes: 0,
+ omittedEdges: 0
+ });
+ const deliveredTokenEstimate = estimateTokens(JSON.stringify({ graph, search, trace: null, impact, orientation, focus, snapshot }));
+ return Object.freeze({
+ schemaVersion: '1.0.0',
+ previewVersion: PREVIEW_VERSION,
+ workspaceId: safeWorkspaceId,
+ generatedAt,
+ graph,
+ search,
+ trace: null,
+ impact,
+ orientation,
+ focus,
+ snapshot,
+ measurements: Object.freeze({
+ schemaVersion: '1.0.0',
+ measurementScope: 'full graph nodes/edges/diagnostics versus delivered preview payload',
+ fullGraphTokenEstimate: 0,
+ deliveredTokenEstimate,
+ omittedTokenEstimate: 0,
+ reductionPercent: 0,
+ sourceContentIncluded: false,
+ providerBillingClaimed: false
+ }),
+ safeguards: sourceGraphSafeguards()
+ });
+}
+
+export function nativeIndexReadyForAutomaticRead(result) {
+ return result?.operation === 'index.status'
+ && result.state === 'ready'
+ && result.freshness === 'current'
+ && result.health?.status === 'ready'
+ && result.health.repairRequired === false
+ && Number.isSafeInteger(result.activeGeneration)
+ && result.activeGeneration >= 1
+ && result.safeguards?.readOnly === true
+ && result.safeguards.localFilesWritten === 0;
+}
+
+export function nativeIndexSource(result) {
+ return {
+ kind: 'native-persistent-index',
+ engine: 'memory-recall-native',
+ indexLocator: result.indexLocator,
+ activeGeneration: result.activeGeneration,
+ freshness: result.freshness
+ };
+}
+
+export function nativeStructuralNode(item) {
+ return {
+ id: item.id,
+ kind: item.kind,
+ label: item.label,
+ locator: item.locator,
+ confidence: item.confidence,
+ generation: item.generation
+ };
+}
+
+export function nativeStructuralRelationship(item) {
+ return {
+ id: item.id,
+ kind: item.kind,
+ fromNodeId: item.fromNodeId,
+ toNodeId: item.toNodeId,
+ locator: item.locator,
+ confidence: item.confidence,
+ resolution: item.resolution,
+ resolver: item.resolver,
+ resolverVersion: item.resolverVersion,
+ generation: item.generation,
+ stale: item.stale
+ };
+}
+
+export function buildNativeIndexArchitecture(communityResult, processResult, limit) {
+ const mergedNodeCount = new Set([...processResult.results, ...communityResult.results].map((item) => item.id)).size;
+ const processNodes = processResult.results.map(nativeStructuralNode);
+ const communityNodes = communityResult.results.map(nativeStructuralNode);
+ const nodes = uniqueById([...processNodes, ...communityNodes], 100);
+ const nodeById = new Map(nodes.map((node) => [node.id, node]));
+ const processRelationships = (processResult.relationships ?? []).map(nativeStructuralRelationship);
+ const communityRelationships = (communityResult.relationships ?? []).map(nativeStructuralRelationship);
+ const mergedRelationshipCount = new Set([...processRelationships, ...communityRelationships].map((item) => item.id)).size;
+ const relationships = uniqueById([...processRelationships, ...communityRelationships], 100);
+ const groups = (communityResult.communities ?? []).slice(0, limit).map((community) => ({
+ id: community.id,
+ label: community.label,
+ pathPrefix: community.pathPrefix,
+ nodeCount: community.representedNodeCount,
+ relationshipCount: community.representedRelationshipCount,
+ sampleNodeIds: community.nodeIds.filter((id) => nodeById.has(id)).slice(0, 3),
+ algorithmVersion: community.algorithmVersion,
+ truncated: community.truncated
+ }));
+ const processes = (processResult.processes ?? []).slice(0, limit).map((process) => ({
+ id: process.id,
+ label: process.label,
+ entryNodeId: process.entryNodeId,
+ entryRelationshipId: process.entryRelationshipId,
+ sinkNodeId: process.sinkNodeId,
+ sinkKind: process.sinkKind,
+ nodeIds: process.nodeIds,
+ relationshipIds: process.relationshipIds,
+ confidence: process.confidence,
+ algorithmVersion: process.algorithmVersion,
+ truncated: process.truncated
+ }));
+ const entryPoints = uniqueById(
+ processes.map((process) => nodeById.get(process.entryNodeId)).filter(Boolean),
+ limit
+ );
+ const degree = nodeDegrees(communityRelationships);
+ const hotspots = communityNodes
+ .filter((node) => (degree.get(node.id)?.total ?? 0) > 0)
+ .sort((left, right) => (degree.get(right.id)?.total ?? 0) - (degree.get(left.id)?.total ?? 0) || left.id.localeCompare(right.id))
+ .slice(0, limit)
+ .map((node) => ({ ...node, relationshipCount: degree.get(node.id).total }));
+ const communityLocallyTruncated = communityResult.results.length > 100
+ || (communityResult.communities ?? []).length > limit
+ || communityRelationships.length > 100;
+ const processLocallyTruncated = processResult.results.length > 100
+ || (processResult.processes ?? []).length > limit
+ || processRelationships.length > 100;
+ const completeness = {
+ communities: nativeResultCompleteness(communityResult, communityLocallyTruncated),
+ processes: nativeResultCompleteness(processResult, processLocallyTruncated),
+ merged: {
+ truncated: mergedNodeCount > 100 || mergedRelationshipCount > 100,
+ representedNodeLimit: 100,
+ representedRelationshipLimit: 100
+ }
+ };
+ return {
+ schemaVersion: '1.0.0',
+ retrievalMethod: 'native_index_architecture',
+ summary: {
+ representedNodeCount: nodes.length,
+ representedRelationshipCount: relationships.length,
+ totalNodeCount: communityResult.summary.nodeCount,
+ fileCount: communityResult.summary.fileCount,
+ edgeCount: communityResult.summary.edgeCount,
+ communityCount: groups.length,
+ processCount: processes.length
+ },
+ groups,
+ entryPoints,
+ hotspots,
+ processes,
+ nodes,
+ relationships,
+ completeness,
+ truncated: completeness.communities.truncated
+ || completeness.processes.truncated
+ || completeness.merged.truncated
+ || groups.some((group) => group.truncated)
+ || processes.some((process) => process.truncated),
+ source: nativeIndexSource(communityResult)
+ };
+}
+
+function nativeResultCompleteness(result, locallyTruncated = false) {
+ return {
+ truncated: Boolean(result?.truncated || result?.nextCursor || locallyTruncated),
+ nextCursor: result?.nextCursor ?? null,
+ locallyTruncated
+ };
+}
+
+export async function buildNativeIndexSourceGraphPreview({
+ provider,
+ status,
+ root,
+ workspaceId = 'ws_local',
+ query = '',
+ startName = null,
+ changedLocators = [],
+ nodeKinds = null,
+ edgeKinds = null,
+ locatorPrefix = null,
+ direction = 'outbound',
+ limit = 20,
+ offset = 0,
+ depth = 2,
+ sampleLimit = 12,
+ clock = () => new Date().toISOString()
+} = {}) {
+ const boundedLimit = boundedInteger(limit, 1, 100, 'source_graph_preview_limit_invalid');
+ const boundedOffset = boundedInteger(offset, 0, 10_000, 'source_graph_preview_offset_invalid');
+ const boundedDepth = boundedInteger(depth, 1, 5, 'source_graph_preview_depth_invalid');
+ const boundedSampleLimit = boundedInteger(sampleLimit, 1, 50, 'source_graph_preview_sample_limit_invalid');
+ const normalizedQuery = String(query ?? '').trim();
+ const normalizedChanged = [...new Set(changedLocators)].slice(0, 16);
+ const normalizedNodeKinds = normalizeKinds(nodeKinds, PUBLIC_NODE_KINDS, 'source_graph_preview_node_kind_invalid');
+ const normalizedEdgeKinds = normalizeKinds(edgeKinds, EDGE_KINDS, 'source_graph_preview_edge_kind_invalid');
+ const generatedAt = clock();
+ const [communityResult, processResult] = await Promise.all([
+ provider.queryIndex({ root, workspaceId, kind: 'communities', limit: Math.min(50, Math.max(12, boundedLimit)) }),
+ provider.queryIndex({ root, workspaceId, kind: 'processes', depth: 4, limit: Math.min(50, boundedLimit) })
+ ]);
+ const architecture = buildNativeIndexArchitecture(communityResult, processResult, boundedLimit);
+ const focusSeed = normalizedQuery || startName || locatorPrefix || normalizedChanged[0] || null;
+ const seedUsesLocator = Boolean(!normalizedQuery && !startName && (locatorPrefix || normalizedChanged[0]));
+ const searchResult = focusSeed
+ ? await queryNativeSearchPage({
+ provider,
+ root,
+ workspaceId,
+ limit: boundedLimit,
+ offset: boundedOffset,
+ locatorPrefix,
+ ...(seedUsesLocator ? { locator: normalizeLocator(focusSeed) } : { query: String(focusSeed).slice(0, 160) })
+ })
+ : null;
+ const selected = (searchResult?.results ?? []).find((item) => (
+ !locatorPrefix || item.locator?.startsWith(normalizeLocator(locatorPrefix))
+ )) ?? null;
+ const neighborhood = selected
+ ? await provider.queryIndex({ root, workspaceId, kind: 'neighborhood', locator: selected.locator, depth: boundedDepth, limit: boundedLimit })
+ : null;
+ const impactLimit = normalizedChanged.length ? Math.max(1, Math.floor(boundedLimit / normalizedChanged.length)) : boundedLimit;
+ const impactResults = await Promise.all(normalizedChanged.filter(isSourceGraphLocator).map(async (locator) => ({
+ locator: normalizeLocator(locator),
+ result: await optionalNativeIndexQuery(() => provider.queryIndex({
+ root,
+ workspaceId,
+ kind: 'impact',
+ locator: normalizeLocator(locator),
+ depth: boundedDepth,
+ limit: impactLimit
+ }))
+ })));
+ const traceResult = startName
+ ? await optionalNativeIndexQuery(() => provider.queryIndex({
+ root,
+ workspaceId,
+ kind: 'dependencies',
+ query: String(startName).slice(0, 160),
+ direction,
+ depth: boundedDepth,
+ limit: boundedLimit
+ }))
+ : null;
+ return nativePreviewPayload({
+ status: status ?? communityResult,
+ communityResult,
+ architecture,
+ searchResult,
+ neighborhood,
+ impactResults,
+ traceResult,
+ startName,
+ workspaceId,
+ query: normalizedQuery,
+ changedLocators: normalizedChanged.map(normalizeLocator),
+ nodeKinds: normalizedNodeKinds,
+ edgeKinds: normalizedEdgeKinds,
+ locatorPrefix,
+ direction,
+ limit: boundedLimit,
+ offset: boundedOffset,
+ depth: boundedDepth,
+ sampleLimit: boundedSampleLimit,
+ generatedAt
+ });
+}
+
+async function optionalNativeIndexQuery(query) {
+ try {
+ return await query();
+ } catch (error) {
+ if (error?.code === 'source_index_query_seed_not_found') return null;
+ throw error;
+ }
+}
+
+function nativePreviewPayload(input) {
+ const { architecture, communityResult, status, workspaceId, sampleLimit, generatedAt } = input;
+ const nativeNodes = uniqueById([
+ ...architecture.nodes,
+ ...(input.searchResult?.results ?? []).map(nativeStructuralNode),
+ ...(input.neighborhood?.results ?? []).map(nativeStructuralNode),
+ ...(input.impactResults ?? []).flatMap(({ result }) => (result?.results ?? []).map(nativeStructuralNode)),
+ ...(input.traceResult?.results ?? []).map(nativeStructuralNode)
+ ], 200);
+ const nativeRelationships = uniqueById([
+ ...architecture.relationships,
+ ...(input.neighborhood?.relationships ?? []).map(nativeStructuralRelationship),
+ ...(input.impactResults ?? []).flatMap(({ result }) => (result?.relationships ?? []).map(nativeStructuralRelationship)),
+ ...(input.traceResult?.relationships ?? []).map(nativeStructuralRelationship)
+ ], 400);
+ const ids = createIdMaps(nativeNodes, nativeRelationships);
+ const nodes = nativeNodes.map((node) => sourceGraphNode(node, ids, workspaceId));
+ const edges = nativeRelationships
+ .filter((edge) => ids.node.has(edge.fromNodeId) && ids.node.has(edge.toNodeId))
+ .map((edge) => sourceGraphEdge(edge, ids, workspaceId));
+ const graphFingerprint = fingerprint({ generation: status.activeGeneration, nodes, edges });
+ const sourceIndexFingerprint = fingerprint({
+ locator: status.indexLocator ?? INDEX_LOCATOR,
+ generation: status.activeGeneration,
+ repository: status.repositoryIdentityHash
+ });
+ const orientation = orientationProjection({ architecture, ids, changedLocators: input.changedLocators });
+ const degree = nodeDegrees(architecture.relationships);
+ const entryPoints = architecture.entryPoints.slice(0, 25).map((node) => nodeReference(node, ids, ['entry_point']));
+ const hotspots = architecture.hotspots
+ .filter((node) => ids.node.has(node.id))
+ .slice(0, 25)
+ .map((node) => hotspotReference(node, ids, degree));
+ const coverage = coverageProjection(status, communityResult);
+ const diagnostics = diagnosticsProjection(status);
+ const focusNativeIds = new Set([
+ ...(input.neighborhood?.results ?? []),
+ ...(input.impactResults ?? []).flatMap(({ result }) => result?.results ?? []),
+ ...(input.traceResult?.results ?? [])
+ ].map((node) => node.id));
+ const focus = {
+ nodeLimit: 200,
+ edgeLimit: 400,
+ nodes: nodes.filter((node) => focusNativeIds.has(ids.nodeReverse.get(node.id))).filter((node) => !input.locatorPrefix || node.locator?.startsWith(normalizeLocator(input.locatorPrefix))),
+ edges: [],
+ omittedNodes: diagnosticCount(status, 'source_index_nodes_omitted'),
+ omittedEdges: diagnosticCount(status, 'source_index_edges_omitted')
+ };
+ const focusNodeIds = new Set(focus.nodes.map((node) => node.id));
+ focus.edges = edges.filter((edge) => focusNodeIds.has(edge.fromNodeId) && focusNodeIds.has(edge.toNodeId));
+ const search = searchProjection(input, ids, graphFingerprint);
+ const impact = impactProjection(input, ids, graphFingerprint);
+ const trace = traceProjection(input, ids, graphFingerprint);
+ const summary = {
+ fileCount: status.summary.fileCount,
+ symbolCount: Math.max(0, status.summary.nodeCount - status.summary.fileCount),
+ moduleCount: nativeNodes.filter((node) => ['module', 'package', 'namespace'].includes(node.kind)).length,
+ nodeCount: status.summary.nodeCount,
+ edgeCount: status.summary.edgeCount,
+ nodeKindCounts: countBy(nodes, 'kind'),
+ edgeKindCounts: countBy(edges, 'kind'),
+ coverage,
+ hotspots,
+ entryPoints,
+ deprioritized: []
+ };
+ const graph = {
+ schemaVersion: '1.0.0',
+ workspaceId,
+ graphVersion: 'memory-recall-native-index-1.0.0',
+ parserVersion: `memory-recall-native-${status.engineVersion}`,
+ builtAt: status.health.lastSuccessfulRefreshAt ?? generatedAt,
+ sourceIndexFingerprint,
+ graphFingerprint,
+ summary,
+ diagnostics,
+ sampleLimit,
+ sampleNodes: nodes.slice(0, sampleLimit),
+ sampleEdges: edges.slice(0, sampleLimit),
+ omittedNodes: Math.max(coverage.omittedNodeCount ?? 0, status.summary.nodeCount - Math.min(nodes.length, sampleLimit)),
+ omittedEdges: Math.max(coverage.omittedEdgeCount ?? 0, status.summary.edgeCount - Math.min(edges.length, sampleLimit))
+ };
+ const deliveredTokenEstimate = estimateTokens(JSON.stringify({ graph, search, trace, impact, orientation, focus }));
+ const fullGraphTokenEstimate = Math.max(deliveredTokenEstimate, status.summary.nodeCount * 24 + status.summary.edgeCount * 18);
+ return Object.freeze({
+ schemaVersion: '1.0.0',
+ previewVersion: PREVIEW_VERSION,
+ workspaceId,
+ generatedAt,
+ graph,
+ search,
+ trace,
+ impact,
+ orientation,
+ focus,
+ snapshot: {
+ status: 'fresh',
+ reuse: 'cache',
+ reason: null,
+ generation: status.activeGeneration,
+ validationMode: 'metadata-scan',
+ buildDurationMs: status.measurements.durationMs,
+ builtAt: status.health.lastSuccessfulRefreshAt
+ },
+ measurements: {
+ schemaVersion: '1.0.0',
+ measurementScope: 'full graph nodes/edges/diagnostics versus delivered preview payload',
+ fullGraphTokenEstimate,
+ deliveredTokenEstimate,
+ omittedTokenEstimate: Math.max(0, fullGraphTokenEstimate - deliveredTokenEstimate),
+ reductionPercent: fullGraphTokenEstimate ? Number((((fullGraphTokenEstimate - deliveredTokenEstimate) / fullGraphTokenEstimate) * 100).toFixed(2)) : 0,
+ sourceContentIncluded: false,
+ providerBillingClaimed: false
+ },
+ safeguards: {
+ dryRun: true,
+ persisted: false,
+ canonicalStateMutated: false,
+ localFilesWritten: 0,
+ modelCalls: 0,
+ networkCalls: 0,
+ externalAdaptersEnabled: 0,
+ externalWritesEnabled: false,
+ graphDatabaseUsed: false,
+ rawBodyIncluded: false,
+ sourceSlicesRead: false
+ }
+ });
+}
+
+function orientationProjection({ architecture, ids, changedLocators }) {
+ const communityByNode = new Map();
+ const groupByCommunity = new Map();
+ const groupsById = new Map();
+ for (const community of processCommunities(architecture, ids, changedLocators)) {
+ groupByCommunity.set(community.nativeId, community.group);
+ groupsById.set(community.group.id, community.group);
+ for (const nodeId of community.nodeIds) communityByNode.set(nodeId, community.nativeId);
+ }
+ const relations = new Map();
+ for (const edge of architecture.relationships) {
+ const from = communityByNode.get(edge.fromNodeId);
+ const to = communityByNode.get(edge.toNodeId);
+ if (!from || !to || from === to) continue;
+ const kind = sourceGraphEdgeKind(edge.kind);
+ if (!['imports', 'calls'].includes(kind)) continue;
+ const key = `${from}:${to}`;
+ const current = relations.get(key) ?? { from, to, count: 0, edgeKindCounts: {} };
+ current.count += 1;
+ current.edgeKindCounts[kind] = (current.edgeKindCounts[kind] ?? 0) + 1;
+ relations.set(key, current);
+ }
+ return {
+ groups: [...groupsById.values()].slice(0, 12),
+ processes: processProjection(architecture, ids),
+ relations: [...relations.values()].sort((a, b) => b.count - a.count || `${a.from}:${a.to}`.localeCompare(`${b.from}:${b.to}`)).map((relation) => {
+ const source = groupByCommunity.get(relation.from);
+ const target = groupByCommunity.get(relation.to);
+ if (!source || !target || source.id === target.id) return null;
+ return {
+ id: mappedId('sgrelation', `${relation.from}:${relation.to}`, 24),
+ sourceGroupId: source.id,
+ targetGroupId: target.id,
+ sourcePrefix: source.prefix,
+ targetPrefix: target.prefix,
+ count: relation.count,
+ edgeKindCounts: relation.edgeKindCounts
+ };
+ }).filter(Boolean).slice(0, 20)
+ };
+}
+
+function processProjection(architecture, ids) {
+ const nodeById = new Map(architecture.nodes.map((node) => [node.id, node]));
+ return architecture.processes.slice(0, 12).map((process) => {
+ const entry = nodeById.get(process.entryNodeId);
+ const sink = nodeById.get(process.sinkNodeId);
+ const nodeIds = process.nodeIds.map((id) => ids.node.get(id)).filter(Boolean);
+ const relationshipIds = process.relationshipIds.map((id) => ids.edge.get(id)).filter(Boolean);
+ if (
+ !entry?.locator
+ || !sink?.locator
+ || nodeIds.length !== process.nodeIds.length
+ || relationshipIds.length !== process.relationshipIds.length
+ || relationshipIds.length < 2
+ ) return null;
+ return {
+ id: mappedId('sgprocess', process.id, 24),
+ label: safeLabel(process.label),
+ entryPoint: nodeReference(entry, ids, ['entry_point']),
+ sink: nodeReference(sink, ids, ['process_sink']),
+ sinkKind: process.sinkKind,
+ nodeIds,
+ relationshipIds,
+ confidence: process.confidence,
+ algorithmVersion: process.algorithmVersion,
+ truncated: process.truncated
+ };
+ }).filter(Boolean);
+}
+
+function processCommunities(architecture, ids, changedLocators) {
+ const groupsByPrefix = new Map();
+ const communities = [];
+ for (const community of architecture.groups) {
+ const prefix = safeGroupPrefix(community.pathPrefix);
+ if (!groupsByPrefix.has(prefix) && groupsByPrefix.size >= 12) continue;
+ const original = architecture.groups.find((item) => item.id === community.id);
+ const nodeIds = original?.sampleNodeIds ?? [];
+ const members = architecture.nodes.filter((node) => nodeIds.includes(node.id) || node.locator?.startsWith(`${normalizeLocator(prefix)}/`));
+ const entryPoints = architecture.entryPoints
+ .filter((node) => members.some((member) => member.id === node.id))
+ .slice(0, 2)
+ .map((node) => nodeReference(node, ids, ['entry_point']));
+ const group = groupsByPrefix.get(prefix) ?? {
+ id: mappedId('sggroup', prefix, 24),
+ prefix,
+ fileCount: members.filter((node) => node.kind === 'file').length,
+ symbolCount: members.filter((node) => !NODE_KINDS.has(node.kind)).length,
+ changedFileCount: changedLocators.filter((locator) => locator.startsWith(`workspace://${prefix}`)).length,
+ entryPoints
+ };
+ groupsByPrefix.set(prefix, group);
+ communities.push({
+ nativeId: community.id,
+ nodeIds: members.map((node) => node.id),
+ group
+ });
+ }
+ return communities;
+}
+
+function searchProjection(input, ids, graphFingerprint) {
+ const matchedNodes = (input.searchResult?.results ?? [])
+ .map((item) => {
+ const node = sourceGraphNode(nativeStructuralNode(item), ids, input.workspaceId);
+ return {
+ resultType: 'node',
+ id: node.id,
+ kind: node.kind,
+ label: node.label,
+ ...(node.locator ? { locator: node.locator } : {}),
+ ...(node.symbolKind ? { symbolKind: node.symbolKind } : {}),
+ score: item.confidence,
+ reasonCodes: ['native_index_match']
+ };
+ })
+ .filter((item) => !input.nodeKinds || input.nodeKinds.includes(item.kind));
+ const nativeNodes = new Map([
+ ...(input.searchResult?.results ?? []),
+ ...(input.neighborhood?.results ?? [])
+ ].map((item) => [item.id, item]));
+ const relationshipResults = (input.neighborhood?.relationships ?? [])
+ .filter((relationship) => input.edgeKinds?.includes(sourceGraphEdgeKind(relationship.kind)))
+ .map((relationship) => relationshipSearchResult(relationship, nativeNodes, ids, input.workspaceId))
+ .filter(Boolean)
+ .slice(0, input.limit);
+ const results = input.edgeKinds ? relationshipResults : matchedNodes;
+ const hasMore = input.searchResult?.hasMore === true;
+ const reachedOffset = input.searchResult?.reachedOffset ?? input.offset;
+ return {
+ schemaVersion: '1.0.0',
+ workspaceId: input.workspaceId,
+ graphFingerprint,
+ retrievalMethod: 'source_graph_lexical',
+ queryFingerprint: fingerprint({
+ query: input.query,
+ nodeKinds: input.nodeKinds ?? [],
+ edgeKinds: input.edgeKinds ?? [],
+ locatorPrefix: input.locatorPrefix,
+ limit: input.limit,
+ offset: input.offset
+ }),
+ total: reachedOffset + results.length + (hasMore ? 1 : 0),
+ limit: input.limit,
+ offset: input.offset,
+ reachedOffset,
+ offsetIncomplete: input.searchResult?.offsetIncomplete === true,
+ continuationCursor: input.searchResult?.continuationCursor ?? null,
+ truncated: input.searchResult?.truncated === true,
+ hasMore,
+ omittedCount: hasMore ? 1 : 0,
+ results
+ };
+}
+
+function relationshipSearchResult(relationship, nativeNodes, ids, workspaceId) {
+ const source = nativeNodes.get(relationship.fromNodeId);
+ const target = nativeNodes.get(relationship.toNodeId);
+ if (!source || !target) return null;
+ const edge = sourceGraphEdge(nativeStructuralRelationship(relationship), ids, workspaceId);
+ const sourceNode = sourceGraphNode(nativeStructuralNode(source), ids, workspaceId);
+ const targetNode = sourceGraphNode(nativeStructuralNode(target), ids, workspaceId);
+ return {
+ resultType: 'edge',
+ id: edge.id,
+ kind: edge.kind,
+ locator: edge.locator,
+ fromNodeId: edge.fromNodeId,
+ toNodeId: edge.toNodeId,
+ fromLabel: sourceNode.label,
+ toLabel: targetNode.label,
+ toLocator: targetNode.locator,
+ toSymbolKind: targetNode.symbolKind,
+ score: relationship.confidence,
+ reasonCodes: ['native_index_relationship_match']
+ };
+}
+
+async function queryNativeSearchPage({ provider, root, workspaceId, query, locator, locatorPrefix, limit, offset }) {
+ const targetCount = offset + limit + 1;
+ const matches = [];
+ const seenCursors = new Set();
+ const maxPageCalls = 8;
+ const controller = new AbortController();
+ const deadlineTimer = setTimeout(() => controller.abort(), 1_500);
+ let pageCalls = 0;
+ let cursor = null;
+ let lastResult = null;
+ try {
+ while (matches.length < targetCount && pageCalls < maxPageCalls && !controller.signal.aborted) {
+ const remaining = targetCount - matches.length;
+ pageCalls += 1;
+ let result;
+ try {
+ result = await provider.queryIndex({
+ root,
+ workspaceId,
+ kind: 'search',
+ limit: Math.min(100, Math.max(limit, remaining)),
+ ...(query ? { query } : {}),
+ ...(locator ? { locator } : {}),
+ ...(cursor ? { cursor } : {}),
+ signal: controller.signal
+ });
+ } catch (error) {
+ if (controller.signal.aborted) break;
+ throw error;
+ }
+ lastResult = result;
+ matches.push(...(result.results ?? []).filter((item) => (
+ !locatorPrefix || item.locator?.startsWith(normalizeLocator(locatorPrefix))
+ )));
+ if (!result.nextCursor || seenCursors.has(result.nextCursor)) break;
+ seenCursors.add(result.nextCursor);
+ cursor = result.nextCursor;
+ }
+ } finally {
+ clearTimeout(deadlineTimer);
+ }
+ const walkStopped = controller.signal.aborted
+ || (pageCalls >= maxPageCalls && Boolean(lastResult?.nextCursor));
+ const offsetIncomplete = matches.length <= offset
+ && Boolean(lastResult?.truncated || lastResult?.nextCursor || walkStopped);
+ const page = matches.slice(offset, offset + limit);
+ const hasMore = matches.length > offset + page.length || Boolean(lastResult?.nextCursor) || (walkStopped && matches.length < targetCount);
+ return {
+ ...(lastResult ?? {}),
+ results: page,
+ truncated: Boolean(lastResult?.truncated || hasMore),
+ hasMore,
+ offsetIncomplete,
+ reachedOffset: Math.min(offset, matches.length),
+ continuationCursor: offsetIncomplete ? lastResult?.nextCursor ?? cursor : null
+ };
+}
+
+function impactProjection(input, ids, graphFingerprint) {
+ if (!input.changedLocators.length) return null;
+ const entries = input.impactResults ?? [];
+ const results = uniqueById(entries.flatMap(({ result }) => result?.results ?? []), input.limit);
+ const relationships = uniqueById(entries.flatMap(({ result }) => result?.relationships ?? []), input.limit);
+ return {
+ schemaVersion: '1.0.0',
+ workspaceId: input.workspaceId,
+ graphFingerprint,
+ changedLocators: input.changedLocators,
+ representedChangedLocators: entries
+ .filter(({ result }) => (result?.results ?? []).length > 0)
+ .map(({ locator }) => locator),
+ depth: input.depth,
+ impactedNodeIds: results.map((item) => ids.node.get(item.id)).filter(Boolean),
+ impactedEdgeIds: relationships.map((item) => ids.edge.get(item.id)).filter(Boolean),
+ impactedEdgeKindCounts: countBy(relationships.map((item) => ({ kind: sourceGraphEdgeKind(item.kind) })), 'kind'),
+ affectedSymbols: results.filter((item) => !NODE_KINDS.has(item.kind)).map((item) => {
+ const node = sourceGraphNode(nativeStructuralNode(item), ids, input.workspaceId);
+ return { nodeId: node.id, name: node.label, locator: node.locator, symbolKind: node.symbolKind ?? 'function' };
+ })
+ };
+}
+
+function traceProjection(input, ids, graphFingerprint) {
+ if (!input.startName) return null;
+ const nativeNodes = input.traceResult?.results ?? [];
+ const nativeRelationships = input.traceResult?.relationships ?? [];
+ const start = nativeNodes.find((node) => node.label === input.startName) ?? nativeNodes[0] ?? null;
+ const startNodeIds = start ? [ids.node.get(start.id)].filter(Boolean) : [];
+ return {
+ schemaVersion: '1.0.0',
+ workspaceId: input.workspaceId,
+ graphFingerprint,
+ retrievalMethod: 'source_graph_trace',
+ startNodeIds,
+ direction: ['inbound', 'outbound', 'both'].includes(input.direction) ? input.direction : 'outbound',
+ edgeKinds: ['calls'],
+ depth: input.depth,
+ limit: input.limit,
+ paths: start ? tracePaths({
+ start,
+ nodes: nativeNodes,
+ relationships: nativeRelationships,
+ ids,
+ direction: input.direction,
+ depth: input.depth,
+ limit: input.limit,
+ locatorPrefix: input.locatorPrefix
+ }) : []
+ };
+}
+
+function tracePaths({ start, nodes, relationships, ids, direction, depth, limit, locatorPrefix = null }) {
+ const nodeById = new Map(nodes.map((node) => [node.id, node]));
+ const adjacency = new Map();
+ for (const relationship of relationships) {
+ if (!['calls', 'references'].includes(sourceGraphEdgeKind(relationship.kind))) continue;
+ if (direction === 'outbound' || direction === 'both') {
+ const items = adjacency.get(relationship.fromNodeId) ?? [];
+ items.push({ relationship, nextId: relationship.toNodeId });
+ adjacency.set(relationship.fromNodeId, items);
+ }
+ if (direction === 'inbound' || direction === 'both') {
+ const items = adjacency.get(relationship.toNodeId) ?? [];
+ items.push({ relationship, nextId: relationship.fromNodeId });
+ adjacency.set(relationship.toNodeId, items);
+ }
+ }
+ const queue = [{ nodeIds: [start.id], relationships: [] }];
+ const paths = [];
+ const seen = new Set([`${start.id}:0`]);
+ while (queue.length && paths.length < limit) {
+ const current = queue.shift();
+ if (current.relationships.length >= depth) continue;
+ const currentId = current.nodeIds.at(-1);
+ for (const step of adjacency.get(currentId) ?? []) {
+ if (current.nodeIds.includes(step.nextId)) continue;
+ const terminal = nodeById.get(step.nextId);
+ if (!terminal) continue;
+ if (locatorPrefix && !terminal.locator?.startsWith(normalizeLocator(locatorPrefix))) continue;
+ const nodeIds = [...current.nodeIds, step.nextId];
+ const pathRelationships = [...current.relationships, step.relationship];
+ const key = `${step.nextId}:${pathRelationships.length}`;
+ if (seen.has(key)) continue;
+ seen.add(key);
+ paths.push({
+ depth: pathRelationships.length,
+ nodeIds: nodeIds.map((id) => ids.node.get(id)).filter(Boolean),
+ edgeIds: pathRelationships.map((relationship) => ids.edge.get(relationship.id)).filter(Boolean),
+ edgeKinds: pathRelationships.map((relationship) => sourceGraphEdgeKind(relationship.kind)),
+ edgeLocators: pathRelationships.map((relationship) => relationship.locator).filter(Boolean),
+ terminalNodeId: ids.node.get(terminal.id),
+ terminalLabel: safeLabel(terminal.label),
+ ...(terminal.locator ? { terminalLocator: terminal.locator } : {}),
+ terminalKind: sourceGraphNodeKind(terminal.kind),
+ ...(sourceGraphNodeKind(terminal.kind) === 'symbol' ? { terminalSymbolKind: sourceGraphSymbolKind(terminal.kind) } : {})
+ });
+ queue.push({ nodeIds, relationships: pathRelationships });
+ if (paths.length >= limit) break;
+ }
+ }
+ return paths;
+}
+
+function coverageProjection(status, result) {
+ const omittedFiles = diagnosticCount(status, 'source_index_files_omitted');
+ const omittedNodes = diagnosticCount(status, 'source_index_nodes_omitted');
+ const omittedEdges = diagnosticCount(status, 'source_index_edges_omitted');
+ const reasonCodes = [
+ ...(omittedFiles ? ['file_budget_reached'] : []),
+ ...(omittedNodes ? ['node_budget_reached'] : []),
+ ...(omittedEdges ? ['edge_budget_reached'] : [])
+ ];
+ return {
+ status: reasonCodes.length || result.state === 'partial' ? 'partial' : 'complete',
+ representedFileCount: status.summary.fileCount,
+ representedJsTsLocators: [],
+ skippedFileCount: omittedFiles,
+ skippedLocators: [],
+ oversizedFileCount: 0,
+ oversizedLocators: [],
+ unsupportedFileCount: 0,
+ unsupportedExtensions: [],
+ representedNodeCount: Math.min(20_000, status.summary.nodeCount),
+ omittedNodeCount: omittedNodes,
+ representedEdgeCount: Math.min(50_000, status.summary.edgeCount),
+ omittedEdgeCount: omittedEdges,
+ maxFilesReached: omittedFiles > 0,
+ reasonCodes
+ };
+}
+
+function diagnosticsProjection(result) {
+ return (result.diagnostics ?? []).slice(0, 32).map((diagnostic) => ({
+ locator: INDEX_LOCATOR,
+ code: diagnostic.code
+ }));
+}
+
+function sourceGraphNode(node, ids, workspaceId) {
+ const kind = sourceGraphNodeKind(node.kind);
+ const symbolKind = kind === 'symbol' ? sourceGraphSymbolKind(node.kind) : null;
+ return {
+ id: ids.node.get(node.id),
+ workspaceId,
+ kind,
+ label: safeLabel(node.label),
+ ...(node.locator ? { locator: node.locator } : {}),
+ ...(symbolKind ? { symbolKind } : {})
+ };
+}
+
+function sourceGraphEdge(edge, ids, workspaceId) {
+ return {
+ id: ids.edge.get(edge.id),
+ workspaceId,
+ kind: sourceGraphEdgeKind(edge.kind),
+ fromNodeId: ids.node.get(edge.fromNodeId),
+ toNodeId: ids.node.get(edge.toNodeId),
+ ...(edge.locator ? { locator: edge.locator } : {}),
+ confidence: edge.confidence
+ };
+}
+
+function nodeReference(node, ids, reasonCodes = []) {
+ const mapped = sourceGraphNode(node, ids, 'ws_local');
+ return {
+ nodeId: mapped.id,
+ label: mapped.label,
+ locator: mapped.locator,
+ symbolKind: mapped.symbolKind ?? 'function',
+ reasonCodes
+ };
+}
+
+function hotspotReference(node, ids, degree) {
+ const mapped = sourceGraphNode(node, ids, 'ws_local');
+ const counts = degree.get(node.id) ?? { inbound: 0, outbound: 0, total: 0 };
+ return {
+ nodeId: mapped.id,
+ label: mapped.label,
+ locator: mapped.locator,
+ symbolKind: mapped.symbolKind ?? 'function',
+ inbound: counts.inbound,
+ outbound: counts.outbound,
+ total: counts.total,
+ reasonCodes: ['relationship_hub']
+ };
+}
+
+function createIdMaps(nodes, edges) {
+ const node = new Map(nodes.map((item) => [item.id, mappedId('sgnode', item.id, 32)]));
+ const edge = new Map(edges.map((item) => [item.id, mappedId('sgedge', item.id, 32)]));
+ return { node, edge, nodeReverse: new Map([...node].map(([nativeId, publicId]) => [publicId, nativeId])) };
+}
+
+function nodeDegrees(relationships) {
+ const degree = new Map();
+ for (const relationship of relationships) {
+ const from = degree.get(relationship.fromNodeId) ?? { inbound: 0, outbound: 0, total: 0 };
+ from.outbound += 1;
+ from.total += 1;
+ degree.set(relationship.fromNodeId, from);
+ const to = degree.get(relationship.toNodeId) ?? { inbound: 0, outbound: 0, total: 0 };
+ to.inbound += 1;
+ to.total += 1;
+ degree.set(relationship.toNodeId, to);
+ }
+ return degree;
+}
+
+function uniqueById(items, limit) {
+ const unique = new Map();
+ for (const item of items) {
+ if (!item || unique.has(item.id)) continue;
+ unique.set(item.id, item);
+ if (unique.size >= limit) break;
+ }
+ return [...unique.values()];
+}
+
+function diagnosticCount(result, code) {
+ return result?.diagnostics?.find((item) => item.code === code)?.count ?? 0;
+}
+
+function countBy(items, key) {
+ const counts = {};
+ for (const item of items) counts[item[key]] = (counts[item[key]] ?? 0) + 1;
+ return counts;
+}
+
+function sourceGraphNodeKind(kind) {
+ if (kind === 'file') return 'file';
+ if (['module', 'package', 'namespace'].includes(kind)) return 'module';
+ return 'symbol';
+}
+
+function sourceGraphSymbolKind(kind) {
+ return SYMBOL_KINDS.has(kind) ? kind : 'function';
+}
+
+function sourceGraphEdgeKind(kind) {
+ return EDGE_KINDS.has(kind) ? kind : 'references';
+}
+
+function safeGroupPrefix(value) {
+ const parts = String(value ?? '').replace(/^workspace:\/\//u, '').split('/').filter(Boolean).slice(0, 3);
+ return parts.join('/') || 'workspace';
+}
+
+function safeLabel(value) {
+ const normalized = String(value ?? '')
+ .replace(/sentinel/giu, 'marker')
+ .replace(/[^A-Za-z0-9_$@~./#*+,\[\]-]+/gu, '_')
+ .slice(0, 240);
+ return normalized || 'unknown';
+}
+
+function normalizeLocator(value) {
+ const normalized = String(value ?? '').trim();
+ return normalized.startsWith('workspace://') ? normalized : `workspace://${normalized.replace(/^\/+|\/+$/gu, '')}`;
+}
+
+function mappedId(prefix, value, length) {
+ return `${prefix}_${createHash('sha256').update(String(value)).digest('hex').slice(0, length)}`;
+}
+
+function fingerprint(value) {
+ return `sha256:${createHash('sha256').update(JSON.stringify(value)).digest('hex')}`;
+}
+
+function normalizeWorkspaceId(value) {
+ const normalized = String(value ?? '').trim();
+ if (!SOURCE_GRAPH_WORKSPACE_ID_RE.test(normalized)) throw new Error('source_graph_preview_workspace_invalid');
+ return normalized;
+}
+
+function normalizeChangedLocators(values) {
+ const list = values === null || values === undefined || values === ''
+ ? []
+ : Array.isArray(values) ? values : String(values).split(',');
+ const locators = [...new Set(list.map((value) => normalizeWorkspaceLocator(value, { stripFragment: true })))].sort();
+ if (locators.length > MAX_CHANGED_LOCATORS) throw new Error('changed_context_too_many_locators');
+ return locators;
+}
+
+function normalizeKinds(values, allowed, code) {
+ if (values === null || values === undefined || values === '') return null;
+ const list = Array.isArray(values) ? values : String(values).split(',');
+ const normalized = list.map((item) => String(item).trim()).filter(Boolean);
+ for (const item of normalized) if (!allowed.has(item)) throw new Error(`${code}:${item}`);
+ return normalized.length ? normalized : null;
+}
+
+function normalizeWorkspaceLocator(value, options = undefined) {
+ try {
+ return normalizeSourceGraphWorkspaceLocator(value, options);
+ } catch {
+ throw new Error('source_graph_preview_locator_invalid');
+ }
+}
+
+function isSourceGraphLocator(locator) {
+ const source = String(locator).replace(/^workspace:\/\//u, '').split('#', 1)[0].toLowerCase();
+ const name = source.split('/').at(-1);
+ return name === 'pyproject.toml' || name === 'cmakelists.txt' || SOURCE_GRAPH_EXTENSIONS.some((extension) => source.endsWith(extension));
+}
+
+function safeErrorCode(value) {
+ const code = String(typeof value === 'string' ? value : value?.message ?? 'source_graph_unavailable')
+ .split(':')[0]
+ .replace(/[^A-Za-z0-9_]/gu, '_')
+ .replace(/_+/gu, '_')
+ .replace(/^_+|_+$/gu, '')
+ .toLowerCase();
+ return /^[a-z][a-z0-9_]{0,35}$/u.test(code) ? code : 'source_graph_unavailable';
+}
+
+function safeDiagnosticCode(value) {
+ const normalized = String(value ?? 'source_graph_unavailable')
+ .replace(/[^A-Za-z0-9_:-]/gu, '_')
+ .replace(/_+/gu, '_')
+ .replace(/^_+|_+$/gu, '')
+ .toLowerCase()
+ .slice(0, 64);
+ return /^[a-z][a-z0-9_:-]*$/u.test(normalized) ? normalized : 'source_graph_unavailable';
+}
+
+function sourceGraphSafeguards() {
+ return {
+ dryRun: true,
+ persisted: false,
+ canonicalStateMutated: false,
+ localFilesWritten: 0,
+ modelCalls: 0,
+ networkCalls: 0,
+ externalAdaptersEnabled: 0,
+ externalWritesEnabled: false,
+ graphDatabaseUsed: false,
+ rawBodyIncluded: false,
+ sourceSlicesRead: false
+ };
+}
+
+function boundedInteger(value, minimum, maximum, code) {
+ const number = Number(value);
+ if (!Number.isInteger(number) || number < minimum || number > maximum) throw new Error(code);
+ return number;
+}
diff --git a/packages/ui/tokens.json b/packages/ui/tokens.json
index a98f4615..14916569 100644
--- a/packages/ui/tokens.json
+++ b/packages/ui/tokens.json
@@ -7,7 +7,7 @@
"muted": "oklch(48% 0.018 255)",
"rule": "oklch(86% 0.01 255)",
"ruleStrong": "oklch(72% 0.018 255)",
- "accent": "oklch(52% 0.19 258)",
+ "accent": "oklch(50% 0.12 258)",
"accentInk": "oklch(98% 0.005 258)",
"warning": "oklch(67% 0.14 78)",
"danger": "oklch(56% 0.18 25)",
@@ -20,14 +20,14 @@
"muted": "oklch(68% 0.014 255)",
"rule": "oklch(31% 0.014 255)",
"ruleStrong": "oklch(43% 0.018 255)",
- "accent": "oklch(67% 0.16 258)",
+ "accent": "oklch(70% 0.1 258)",
"accentInk": "oklch(17% 0.008 255)"
},
"ink": "oklch(97.8% 0.006 80)",
"paper": "oklch(20% 0.012 255)",
"slate": "oklch(48% 0.018 255)",
- "signal": "oklch(52% 0.19 258)",
- "proof": "oklch(52% 0.19 258)",
+ "signal": "oklch(50% 0.12 258)",
+ "proof": "oklch(50% 0.12 258)",
"caution": "oklch(67% 0.14 78)"
},
"font": {
diff --git a/providers/native/catalog.json b/providers/native/catalog.json
index 419715be..b4c2ca29 100644
--- a/providers/native/catalog.json
+++ b/providers/native/catalog.json
@@ -62,16 +62,10 @@
"purpose": "Deterministic lexical context candidate lookup over safe record fields"
},
{
- "id": "provider:native:context-candidate:ast-code",
- "path": "providers/native/context-candidate-ast-code",
+ "id": "provider:native:code-intelligence:rust",
+ "path": "providers/native/code-intelligence-rust",
"enabledByDefault": true,
- "purpose": "Dependency-free JS/TS static code chunk candidate source"
- },
- {
- "id": "provider:native:context-candidate:graph",
- "path": "providers/native/context-candidate-graph",
- "enabledByDefault": true,
- "purpose": "Dependency-free JS/TS source graph locator candidate source"
+ "purpose": "Verified packaged Rust code-intelligence and persistent source-index provider"
},
{
"id": "provider:native:context-manifest:local",
diff --git a/providers/native/code-intelligence-rust/provider.json b/providers/native/code-intelligence-rust/provider.json
new file mode 100644
index 00000000..047d9077
--- /dev/null
+++ b/providers/native/code-intelligence-rust/provider.json
@@ -0,0 +1,50 @@
+{
+ "schemaVersion": "1.0.0",
+ "id": "provider:native:code-intelligence:rust",
+ "name": "Native Rust Code Intelligence",
+ "version": "1.0.0",
+ "category": "code-intelligence",
+ "enabledByDefault": true,
+ "locality": "loopback-process",
+ "contract": "CodeIntelligencePort",
+ "contractVersion": "1.0.0",
+ "capabilities": [
+ "code-intelligence.graph.build",
+ "code-intelligence.index.build",
+ "code-intelligence.index.refresh",
+ "code-intelligence.index.repair",
+ "code-intelligence.index.status",
+ "code-intelligence.index.doctor",
+ "code-intelligence.index.query",
+ "code-intelligence.repository.register",
+ "code-intelligence.repository.list",
+ "code-intelligence.repository.search",
+ "code-intelligence.repository.go.resolve",
+ "code-intelligence.repository.go.trace",
+ "code-intelligence.repository.go.impact",
+ "code-intelligence.local-read-only",
+ "code-intelligence.native"
+ ],
+ "limits": {
+ "protocol": "JSON Lines 1.0.0",
+ "maxFiles": 100000,
+ "maxFileBytes": 10485760,
+ "maxNodes": 5000,
+ "maxEdges": 10000,
+ "writes": "explicit-source-index-only",
+ "network": false,
+ "models": false,
+ "productionDefault": true
+ },
+ "dataPaths": [
+ ".local/source-index/index.v1.sqlite",
+ ".local/source-index/registry.v1.sqlite"
+ ],
+ "experimental": false,
+ "notes": [
+ "Runs one bounded local subprocess per graph or source-index request.",
+ "Requires a verified native binary and never compiles Rust or falls back to a cloud service.",
+ "Returns provider-neutral structural metadata without source bodies or absolute paths. Source-index writers require explicit local intent, and repair requires a matching doctor fingerprint.",
+ "The verified packaged Rust engine is the only production code-intelligence implementation."
+ ]
+}
diff --git a/providers/native/code-intelligence-rust/src/binary-resolver.mjs b/providers/native/code-intelligence-rust/src/binary-resolver.mjs
new file mode 100644
index 00000000..53e4d640
--- /dev/null
+++ b/providers/native/code-intelligence-rust/src/binary-resolver.mjs
@@ -0,0 +1,258 @@
+import { createHash } from 'node:crypto';
+import { spawn } from 'node:child_process';
+import { constants, createReadStream } from 'node:fs';
+import { access, readFile, realpath, stat } from 'node:fs/promises';
+import path from 'node:path';
+import process from 'node:process';
+import { createRequire } from 'node:module';
+import { fileURLToPath } from 'node:url';
+
+const PACKAGE_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../../..');
+const VERSION_TIMEOUT_MS = 5_000;
+const VERSION_OUTPUT_LIMIT = 256;
+const TARGETS = Object.freeze({
+ 'darwin-arm64': Object.freeze({
+ packageName: '@memory-recall/native-darwin-arm64',
+ binary: 'bin/oaf'
+ }),
+ 'darwin-x64': Object.freeze({
+ packageName: '@memory-recall/native-darwin-x64',
+ binary: 'bin/oaf'
+ }),
+ 'linux-arm64-gnu': Object.freeze({
+ packageName: '@memory-recall/native-linux-arm64-gnu',
+ binary: 'bin/oaf'
+ }),
+ 'linux-x64-gnu': Object.freeze({
+ packageName: '@memory-recall/native-linux-x64-gnu',
+ binary: 'bin/oaf'
+ }),
+ 'win32-x64': Object.freeze({
+ packageName: '@memory-recall/native-win32-x64',
+ binary: 'bin/oaf.exe'
+ })
+});
+
+export class NativeBinaryResolutionError extends Error {
+ constructor(code) {
+ super(code);
+ this.name = 'NativeBinaryResolutionError';
+ this.code = code;
+ }
+}
+
+export function nativeTarget({
+ platform = process.platform,
+ arch = process.arch,
+ glibcVersion = runtimeGlibcVersion()
+} = {}) {
+ if (platform === 'darwin' && (arch === 'arm64' || arch === 'x64')) return `darwin-${arch}`;
+ if (platform === 'win32' && arch === 'x64') return 'win32-x64';
+ if (platform === 'linux' && glibcVersion && (arch === 'arm64' || arch === 'x64')) {
+ return `linux-${arch}-gnu`;
+ }
+ throw new NativeBinaryResolutionError('native_platform_unsupported');
+}
+
+export function nativePackageForTarget(target) {
+ const descriptor = TARGETS[target];
+ if (!descriptor) throw new NativeBinaryResolutionError('native_platform_unsupported');
+ return descriptor;
+}
+
+export async function resolveNativeBinary({
+ binaryPath,
+ expectedSha256,
+ target = nativeTarget(),
+ packageRoot = PACKAGE_ROOT,
+ resolvePackageJson
+} = {}) {
+ const rootMetadata = await readJson(path.join(packageRoot, 'package.json'), 'native_engine_manifest_invalid');
+ const expectedVersion = exactVersion(rootMetadata?.version);
+ if (binaryPath) {
+ const resolved = await resolveRegularExecutable(binaryPath);
+ if (expectedSha256) await verifyChecksum(resolved, expectedSha256);
+ await verifyVersion(resolved, expectedVersion, path.dirname(resolved));
+ return Object.freeze({
+ path: resolved,
+ source: 'explicit',
+ target,
+ verified: Boolean(expectedSha256),
+ version: expectedVersion
+ });
+ }
+
+ const descriptor = nativePackageForTarget(target);
+ const applicationRoot = await realpath(packageRoot).catch(() => packageRoot);
+ return resolvePlatformPackage({
+ descriptor,
+ expectedVersion,
+ target,
+ applicationRoot,
+ resolvePackageJson: resolvePackageJson ?? defaultPackageResolver(packageRoot)
+ });
+}
+
+async function resolvePlatformPackage({
+ descriptor,
+ expectedVersion,
+ target,
+ applicationRoot,
+ resolvePackageJson
+}) {
+ let packageJsonPath;
+ try {
+ packageJsonPath = await resolvePackageJson(descriptor.packageName);
+ } catch {
+ throw new NativeBinaryResolutionError('native_platform_package_missing');
+ }
+ const packageRoot = await realpath(path.dirname(packageJsonPath)).catch(() => {
+ throw new NativeBinaryResolutionError('native_engine_manifest_invalid');
+ });
+ const packageMetadata = await readJson(packageJsonPath, 'native_engine_manifest_invalid');
+ const manifest = await readPlatformManifest({ applicationRoot, packageRoot });
+ validateManifest({ descriptor, expectedVersion, manifest, packageMetadata, target });
+ const binaryPath = await resolveRegularExecutable(path.join(packageRoot, descriptor.binary));
+ if (!inside(packageRoot, binaryPath)) throw new NativeBinaryResolutionError('native_engine_path_invalid');
+ await verifyChecksum(binaryPath, manifest.sha256);
+ await verifyVersion(binaryPath, expectedVersion, packageRoot);
+ return Object.freeze({
+ path: binaryPath,
+ source: 'platform-package',
+ target,
+ packageName: descriptor.packageName,
+ verified: true,
+ version: expectedVersion,
+ sha256: manifest.sha256
+ });
+}
+
+async function readPlatformManifest({ applicationRoot, packageRoot }) {
+ try {
+ return JSON.parse(await readFile(path.join(packageRoot, 'native-manifest.json'), 'utf8'));
+ } catch (error) {
+ if (error?.code === 'ENOENT' && inside(path.join(applicationRoot, 'native-packages'), packageRoot)) {
+ throw new NativeBinaryResolutionError('native_platform_package_missing');
+ }
+ throw new NativeBinaryResolutionError('native_engine_manifest_invalid');
+ }
+}
+
+function validateManifest({ descriptor, expectedVersion, manifest, packageMetadata, target }) {
+ const valid = packageMetadata?.name === descriptor.packageName &&
+ packageMetadata?.version === expectedVersion &&
+ manifest?.schemaVersion === '1.0.0' &&
+ manifest?.packageName === descriptor.packageName &&
+ manifest?.packageVersion === expectedVersion &&
+ manifest?.target === target &&
+ manifest?.binary === descriptor.binary &&
+ /^sha256:[a-f0-9]{64}$/u.test(manifest?.sha256 ?? '') &&
+ Object.keys(manifest ?? {}).sort().join(',') === 'binary,packageName,packageVersion,schemaVersion,sha256,target';
+ if (!valid) throw new NativeBinaryResolutionError('native_engine_manifest_invalid');
+}
+
+async function resolveRegularExecutable(candidate) {
+ let resolved;
+ let metadata;
+ try {
+ resolved = await realpath(path.resolve(candidate));
+ metadata = await stat(resolved);
+ if (!metadata.isFile()) throw new Error('not-file');
+ if (process.platform !== 'win32') await access(resolved, constants.X_OK);
+ } catch {
+ throw new NativeBinaryResolutionError('native_engine_unavailable');
+ }
+ return resolved;
+}
+
+async function verifyChecksum(binaryPath, expected) {
+ if (!/^sha256:[a-f0-9]{64}$/u.test(expected ?? '')) {
+ throw new NativeBinaryResolutionError('native_engine_manifest_invalid');
+ }
+ const hash = createHash('sha256');
+ try {
+ for await (const chunk of createReadStream(binaryPath)) hash.update(chunk);
+ } catch {
+ throw new NativeBinaryResolutionError('native_engine_unavailable');
+ }
+ const actual = `sha256:${hash.digest('hex')}`;
+ if (actual !== expected) throw new NativeBinaryResolutionError('native_engine_checksum_mismatch');
+}
+
+function verifyVersion(binaryPath, expectedVersion, cwd) {
+ return new Promise((resolve, reject) => {
+ let settled = false;
+ let stdout = '';
+ let outputBytes = 0;
+ const child = spawn(binaryPath, ['--version'], {
+ cwd,
+ env: Object.freeze({ PATH: process.env.PATH ?? '', LANG: 'C', LC_ALL: 'C' }),
+ stdio: ['ignore', 'pipe', 'ignore'],
+ shell: false,
+ windowsHide: true
+ });
+ const finish = (error) => {
+ if (settled) return;
+ settled = true;
+ clearTimeout(timer);
+ if (error) reject(error);
+ else resolve();
+ };
+ const timer = setTimeout(() => {
+ child.kill('SIGKILL');
+ finish(new NativeBinaryResolutionError('native_engine_version_mismatch'));
+ }, VERSION_TIMEOUT_MS);
+ child.on('error', () => finish(new NativeBinaryResolutionError('native_engine_version_mismatch')));
+ child.stdout.on('data', (chunk) => {
+ outputBytes += chunk.length;
+ if (outputBytes > VERSION_OUTPUT_LIMIT) {
+ child.kill('SIGKILL');
+ finish(new NativeBinaryResolutionError('native_engine_version_mismatch'));
+ return;
+ }
+ stdout += chunk.toString('utf8');
+ });
+ child.on('close', (code) => {
+ if (code !== 0 || stdout.trim() !== `oaf ${expectedVersion}`) {
+ finish(new NativeBinaryResolutionError('native_engine_version_mismatch'));
+ return;
+ }
+ finish();
+ });
+ });
+}
+
+function defaultPackageResolver(packageRoot) {
+ const require = createRequire(path.join(packageRoot, 'package.json'));
+ return async (packageName) => require.resolve(`${packageName}/package.json`);
+}
+
+async function readJson(filePath, code) {
+ try {
+ return JSON.parse(await readFile(filePath, 'utf8'));
+ } catch {
+ throw new NativeBinaryResolutionError(code);
+ }
+}
+
+function exactVersion(value) {
+ if (!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/u.test(value ?? '')) {
+ throw new NativeBinaryResolutionError('native_engine_manifest_invalid');
+ }
+ return value;
+}
+
+function inside(parent, child) {
+ const relative = path.relative(parent, child);
+ return relative !== '..' && !relative.startsWith(`..${path.sep}`) && !path.isAbsolute(relative);
+}
+
+function runtimeGlibcVersion() {
+ try {
+ return process.report?.getReport()?.header?.glibcVersionRuntime ?? null;
+ } catch {
+ return null;
+ }
+}
+
+export const NATIVE_TARGETS = Object.freeze(Object.keys(TARGETS));
diff --git a/providers/native/code-intelligence-rust/src/index.mjs b/providers/native/code-intelligence-rust/src/index.mjs
new file mode 100644
index 00000000..b9c161a8
--- /dev/null
+++ b/providers/native/code-intelligence-rust/src/index.mjs
@@ -0,0 +1,502 @@
+import { randomBytes } from 'node:crypto';
+import { spawn } from 'node:child_process';
+import { realpath, stat } from 'node:fs/promises';
+import path from 'node:path';
+import process from 'node:process';
+import { assertJsonSchema } from '../../../../packages/protocol/src/schema-validator.mjs';
+import { resolveNativeBinary } from './binary-resolver.mjs';
+import requestSchema from '../../../../packages/protocol/schemas/code-intelligence-engine-request.schema.json' with { type: 'json' };
+import responseSchema from '../../../../packages/protocol/schemas/code-intelligence-engine-response.schema.json' with { type: 'json' };
+import graphSchema from '../../../../packages/protocol/schemas/code-intelligence-graph.schema.json' with { type: 'json' };
+import indexRequestSchema from '../../../../packages/protocol/schemas/code-intelligence-index-request.schema.json' with { type: 'json' };
+import indexResponseSchema from '../../../../packages/protocol/schemas/code-intelligence-index-response.schema.json' with { type: 'json' };
+import repositoryRequestSchema from '../../../../packages/protocol/schemas/code-intelligence-repository-request.schema.json' with { type: 'json' };
+import repositoryResponseSchema from '../../../../packages/protocol/schemas/code-intelligence-repository-response.schema.json' with { type: 'json' };
+
+const CAPABILITIES = Object.freeze([
+ 'code-intelligence.graph.build',
+ 'code-intelligence.index.build',
+ 'code-intelligence.index.refresh',
+ 'code-intelligence.index.repair',
+ 'code-intelligence.index.status',
+ 'code-intelligence.index.doctor',
+ 'code-intelligence.index.query',
+ 'code-intelligence.repository.register',
+ 'code-intelligence.repository.list',
+ 'code-intelligence.repository.search',
+ 'code-intelligence.repository.go.resolve',
+ 'code-intelligence.repository.go.trace',
+ 'code-intelligence.repository.go.impact',
+ 'code-intelligence.local-read-only',
+ 'code-intelligence.native'
+]);
+const PRIVATE_PATH = /(?:^|[\s"'(])(?:\/Users\/|\/home\/[A-Za-z0-9._-]+\/|\/private\/|\/var\/folders\/|[A-Za-z]:\\)/u;
+
+export class NativeCodeIntelligenceError extends Error {
+ constructor(code, { retryable = false, details = [] } = {}) {
+ super(`Native code intelligence failed: ${code}`);
+ this.name = 'NativeCodeIntelligenceError';
+ this.code = code;
+ this.retryable = retryable;
+ this.details = Object.freeze([...details]);
+ }
+}
+
+export class RustCodeIntelligenceProvider {
+ constructor({
+ binaryPath = process.env.MEMORY_RECALL_NATIVE_BINARY,
+ binarySha256 = process.env.MEMORY_RECALL_NATIVE_SHA256,
+ timeoutMs = 30_000,
+ maxStdoutBytes = 8_000_000,
+ maxStderrBytes = 64 * 1024
+ } = {}) {
+ this.binaryPath = binaryPath === undefined ? undefined : path.resolve(binaryPath);
+ this.binarySha256 = binarySha256;
+ this.binaryResolution = null;
+ this.timeoutMs = boundedInteger(timeoutMs, 1, 120_000, 'native_engine_timeout_invalid');
+ this.maxStdoutBytes = boundedInteger(maxStdoutBytes, 1, 10_000_000, 'native_engine_stdout_limit_invalid');
+ this.maxStderrBytes = boundedInteger(maxStderrBytes, 1, 1_000_000, 'native_engine_stderr_limit_invalid');
+ }
+
+ async health() {
+ try {
+ const selected = await this.#resolveBinary();
+ return Object.freeze({
+ status: 'healthy',
+ details: Object.freeze({
+ binary: 'available',
+ source: selected.source,
+ target: selected.target,
+ verified: selected.verified,
+ productionDefault: true
+ })
+ });
+ } catch (error) {
+ return Object.freeze({
+ status: 'unavailable',
+ details: Object.freeze({ binary: 'unavailable', reason: error?.code ?? 'native_engine_unavailable', productionDefault: true })
+ });
+ }
+ }
+
+ async capabilities() {
+ return CAPABILITIES;
+ }
+
+ async buildGraph({
+ root,
+ workspaceId = 'ws_local',
+ maxFiles = 1000,
+ maxFileBytes = 512 * 1024,
+ maxNodes = 5000,
+ maxEdges = 10000,
+ languages,
+ signal
+ } = {}) {
+ const workspace = await resolveWorkspace(root);
+ const { path: binary } = await this.#resolveBinary();
+ const requestId = `cireq_${randomBytes(16).toString('hex')}`;
+ const request = {
+ protocolVersion: '1.0.0',
+ requestId,
+ workspaceId,
+ operation: 'graph.build',
+ root: '.',
+ deadlineMs: this.timeoutMs,
+ cancellationToken: `cancel_${randomBytes(16).toString('hex')}`,
+ responseSchemaVersion: '1.0.0',
+ arguments: {
+ maxFiles,
+ maxFileBytes,
+ maxNodes,
+ maxEdges,
+ ...(languages === undefined ? {} : { languages })
+ }
+ };
+ try {
+ assertJsonSchema(requestSchema, request, 'native code intelligence request');
+ } catch {
+ throw new NativeCodeIntelligenceError('native_engine_request_invalid');
+ }
+ if (signal?.aborted) throw new NativeCodeIntelligenceError('native_engine_cancelled');
+ const stdout = await runNativeProcess({
+ binary,
+ workspace,
+ request,
+ commandArgs: ['code-intelligence', 'serve', '--stdio'],
+ timeoutMs: this.timeoutMs,
+ maxStdoutBytes: this.maxStdoutBytes,
+ maxStderrBytes: this.maxStderrBytes,
+ signal
+ });
+ const lines = stdout.trim().split(/\r?\n/u).filter(Boolean);
+ if (lines.length !== 1) throw new NativeCodeIntelligenceError('native_engine_response_invalid');
+ let frame;
+ try {
+ frame = JSON.parse(lines[0]);
+ assertJsonSchema(responseSchema, frame, 'native code intelligence response');
+ } catch {
+ throw new NativeCodeIntelligenceError('native_engine_response_invalid');
+ }
+ if (frame.requestId !== requestId) throw new NativeCodeIntelligenceError('native_engine_response_mismatch');
+ if (!frame.ok) {
+ throw new NativeCodeIntelligenceError(frame.error.code, {
+ retryable: frame.error.retryable,
+ details: frame.error.details
+ });
+ }
+ try {
+ assertJsonSchema(graphSchema, frame.result.graph, 'native code intelligence graph');
+ } catch {
+ throw new NativeCodeIntelligenceError('native_engine_graph_invalid');
+ }
+ const serialized = JSON.stringify(frame.result.graph);
+ if (serialized.includes(workspace) || PRIVATE_PATH.test(serialized)) {
+ throw new NativeCodeIntelligenceError('native_engine_graph_unsafe');
+ }
+ return deepFreeze(frame.result.graph);
+ }
+
+ async buildIndex(options = {}) {
+ return this.#indexOperation('index.build', options, writerArguments(options));
+ }
+
+ async refreshIndex(options = {}) {
+ return this.#indexOperation('index.refresh', options, writerArguments(options));
+ }
+
+ async repairIndex(options = {}) {
+ const confirmRepairPlan = options.confirmRepairPlan;
+ return this.#indexOperation('index.repair', options, {
+ ...writerArguments(options),
+ confirmRepairPlan
+ });
+ }
+
+ async indexStatus(options = {}) {
+ return this.#indexOperation('index.status', options, {});
+ }
+
+ async doctorIndex(options = {}) {
+ return this.#indexOperation('index.doctor', options, {});
+ }
+
+ async queryIndex(options = {}) {
+ const { kind, query, locator, direction, depth, edgeKinds, limit = 25, cursor } = options;
+ return this.#indexOperation('index.query', options, {
+ kind,
+ limit,
+ ...(query === undefined ? {} : { query }),
+ ...(locator === undefined ? {} : { locator }),
+ ...(direction === undefined ? {} : { direction }),
+ ...(depth === undefined ? {} : { depth }),
+ ...(edgeKinds === undefined ? {} : { edgeKinds }),
+ ...(cursor === undefined ? {} : { cursor })
+ });
+ }
+
+ async registerRepository({ root, workspaceId = 'ws_local', displayName, rootLocator, signal } = {}) {
+ return this.#repositoryOperation('repository.register', { root, workspaceId, signal }, {
+ write: true,
+ displayName,
+ rootLocator
+ });
+ }
+
+ async listRepositories({ root, workspaceId = 'ws_local', limit = 64, signal } = {}) {
+ return this.#repositoryOperation('repository.list', { root, workspaceId, signal }, { limit });
+ }
+
+ async searchRepositories({
+ root,
+ workspaceId = 'ws_local',
+ query,
+ repositoryIds,
+ perRepositoryLimit = 25,
+ limit = 50,
+ signal
+ } = {}) {
+ return this.#repositoryOperation('repository.search', { root, workspaceId, signal }, {
+ query,
+ repositoryIds,
+ perRepositoryLimit,
+ limit
+ });
+ }
+
+ async resolveGoRepositories(options = {}) {
+ return this.#repositoryOperation(
+ 'repository.go.resolve',
+ options,
+ goRepositoryArguments(options)
+ );
+ }
+
+ async traceGoRepositories({ limit = 25, ...options } = {}) {
+ return this.#repositoryOperation(
+ 'repository.go.trace',
+ options,
+ goRepositoryArguments(options, limit)
+ );
+ }
+
+ async impactGoRepositories({ limit = 25, ...options } = {}) {
+ return this.#repositoryOperation(
+ 'repository.go.impact',
+ options,
+ goRepositoryArguments(options, limit)
+ );
+ }
+
+ async #indexOperation(operation, options, argumentsValue) {
+ const workspace = await resolveWorkspace(options.root);
+ const { path: binary } = await this.#resolveBinary();
+ const requestId = `ciidxreq_${randomBytes(16).toString('hex')}`;
+ const request = {
+ protocolVersion: '1.0.0',
+ requestId,
+ workspaceId: options.workspaceId ?? 'ws_local',
+ operation,
+ root: '.',
+ indexLocator: 'workspace://.local/source-index/index.v1.sqlite',
+ deadlineMs: this.timeoutMs,
+ cancellationToken: `cancel_${randomBytes(16).toString('hex')}`,
+ responseSchemaVersion: '1.0.0',
+ arguments: argumentsValue
+ };
+ try {
+ assertJsonSchema(indexRequestSchema, request, 'native source index request');
+ } catch {
+ throw new NativeCodeIntelligenceError('native_index_request_invalid');
+ }
+ if (options.signal?.aborted) throw new NativeCodeIntelligenceError('native_engine_cancelled');
+ const stdout = await runNativeProcess({
+ binary,
+ workspace,
+ request,
+ commandArgs: ['code-intelligence', 'index', '--stdio'],
+ timeoutMs: this.timeoutMs,
+ maxStdoutBytes: this.maxStdoutBytes,
+ maxStderrBytes: this.maxStderrBytes,
+ signal: options.signal
+ });
+ const frame = parseFrame(stdout, indexResponseSchema, requestId, 'native_index_response_invalid');
+ if (!frame.ok) {
+ throw new NativeCodeIntelligenceError(frame.error.code, {
+ retryable: frame.error.retryable,
+ details: frame.error.details
+ });
+ }
+ const serialized = JSON.stringify(frame.result);
+ if (serialized.includes(workspace) || PRIVATE_PATH.test(serialized)) {
+ throw new NativeCodeIntelligenceError('native_index_response_unsafe');
+ }
+ return deepFreeze(frame.result);
+ }
+
+ async #repositoryOperation(operation, options, argumentsValue) {
+ if (options.signal?.aborted) throw new NativeCodeIntelligenceError('native_engine_cancelled');
+ const workspace = await resolveWorkspace(options.root);
+ const { path: binary } = await this.#resolveBinary();
+ const requestId = `cireporeq_${randomBytes(16).toString('hex')}`;
+ const timeoutMs = operation === 'repository.search' || operation.startsWith('repository.go.')
+ ? Math.min(this.timeoutMs, 2000)
+ : this.timeoutMs;
+ const request = {
+ protocolVersion: '1.0.0',
+ requestId,
+ workspaceId: options.workspaceId ?? 'ws_local',
+ operation,
+ root: '.',
+ registryLocator: 'workspace://.local/source-index/registry.v1.sqlite',
+ deadlineMs: timeoutMs,
+ responseSchemaVersion: '1.0.0',
+ arguments: argumentsValue
+ };
+ try {
+ assertJsonSchema(repositoryRequestSchema, request, 'native repository request');
+ } catch {
+ throw new NativeCodeIntelligenceError('native_repository_request_invalid');
+ }
+ const stdout = await runNativeProcess({
+ binary,
+ workspace,
+ request,
+ commandArgs: ['code-intelligence', 'repositories', '--stdio'],
+ timeoutMs,
+ maxStdoutBytes: this.maxStdoutBytes,
+ maxStderrBytes: this.maxStderrBytes,
+ signal: options.signal
+ });
+ const frame = parseFrame(stdout, repositoryResponseSchema, requestId, 'native_repository_response_invalid');
+ if (!frame.ok) {
+ throw new NativeCodeIntelligenceError(frame.error.code, {
+ retryable: frame.error.retryable,
+ details: frame.error.details
+ });
+ }
+ const serialized = JSON.stringify(frame.result);
+ if (serialized.includes(workspace) || PRIVATE_PATH.test(serialized)) {
+ throw new NativeCodeIntelligenceError('native_repository_response_unsafe');
+ }
+ return deepFreeze(frame.result);
+ }
+
+ async #resolveBinary() {
+ if (this.binaryResolution) return this.binaryResolution;
+ try {
+ this.binaryResolution = await resolveNativeBinary({
+ binaryPath: this.binaryPath,
+ expectedSha256: this.binarySha256
+ });
+ return this.binaryResolution;
+ } catch (error) {
+ throw new NativeCodeIntelligenceError(error?.code ?? 'native_engine_unavailable');
+ }
+ }
+}
+
+async function resolveWorkspace(root) {
+ if (typeof root !== 'string' || root.length === 0) {
+ throw new NativeCodeIntelligenceError('native_engine_workspace_invalid');
+ }
+ try {
+ const resolved = await realpath(path.resolve(root));
+ const metadata = await stat(resolved);
+ if (!metadata.isDirectory()) throw new Error('not a directory');
+ return resolved;
+ } catch {
+ throw new NativeCodeIntelligenceError('native_engine_workspace_invalid');
+ }
+}
+
+function goRepositoryArguments({
+ repositoryIds,
+ clientRepositoryId,
+ serviceRepositoryId,
+ clientEntryNativeId,
+ serviceTargetNativeId
+}, limit) {
+ if (!Array.isArray(repositoryIds)
+ || repositoryIds.length !== 2
+ || repositoryIds[0] !== clientRepositoryId
+ || repositoryIds[1] !== serviceRepositoryId
+ || clientRepositoryId === serviceRepositoryId) {
+ throw new NativeCodeIntelligenceError('native_repository_request_invalid');
+ }
+ return {
+ repositoryIds,
+ clientRepositoryId,
+ serviceRepositoryId,
+ clientEntryNativeId,
+ serviceTargetNativeId,
+ ...(limit === undefined ? {} : { limit })
+ };
+}
+
+function runNativeProcess({ binary, workspace, request, commandArgs, timeoutMs, maxStdoutBytes, maxStderrBytes, signal }) {
+ return new Promise((resolve, reject) => {
+ let settled = false;
+ let stdoutBytes = 0;
+ let stderrBytes = 0;
+ const stdout = [];
+ const child = spawn(binary, commandArgs, {
+ cwd: workspace,
+ env: Object.freeze({
+ PATH: process.env.PATH ?? '',
+ LANG: 'C',
+ LC_ALL: 'C'
+ }),
+ stdio: ['pipe', 'pipe', 'pipe'],
+ shell: false,
+ windowsHide: true
+ });
+ const cleanup = () => {
+ clearTimeout(timer);
+ signal?.removeEventListener('abort', onAbort);
+ };
+ const fail = (error) => {
+ if (settled) return;
+ settled = true;
+ cleanup();
+ if (!child.killed) child.kill('SIGKILL');
+ reject(error);
+ };
+ const onAbort = () => fail(new NativeCodeIntelligenceError('native_engine_cancelled'));
+ const timer = setTimeout(
+ () => fail(new NativeCodeIntelligenceError('native_engine_timeout', { retryable: true })),
+ timeoutMs
+ );
+ signal?.addEventListener('abort', onAbort, { once: true });
+ child.once('error', () => fail(new NativeCodeIntelligenceError('native_engine_process_failed')));
+ child.stdout.on('data', (chunk) => {
+ stdoutBytes += chunk.length;
+ if (stdoutBytes > maxStdoutBytes) {
+ fail(new NativeCodeIntelligenceError('native_engine_stdout_limit'));
+ return;
+ }
+ stdout.push(chunk);
+ });
+ child.stderr.on('data', (chunk) => {
+ stderrBytes += chunk.length;
+ if (stderrBytes > maxStderrBytes) fail(new NativeCodeIntelligenceError('native_engine_stderr_limit'));
+ });
+ child.once('close', (code) => {
+ if (settled) return;
+ settled = true;
+ cleanup();
+ if (code !== 0) {
+ reject(new NativeCodeIntelligenceError('native_engine_process_failed'));
+ return;
+ }
+ resolve(Buffer.concat(stdout, stdoutBytes).toString('utf8'));
+ });
+ child.stdin.once('error', () => fail(new NativeCodeIntelligenceError('native_engine_process_failed')));
+ child.stdin.end(`${JSON.stringify(request)}\n`);
+ });
+}
+
+function writerArguments({
+ maxFiles = 1000,
+ maxFileBytes = 512 * 1024,
+ maxNodes = 5000,
+ maxEdges = 10000,
+ languages
+} = {}) {
+ return {
+ write: true,
+ maxFiles,
+ maxFileBytes,
+ maxNodes,
+ maxEdges,
+ ...(languages === undefined ? {} : { languages })
+ };
+}
+
+function parseFrame(stdout, schema, requestId, invalidCode) {
+ const lines = stdout.trim().split(/\r?\n/u).filter(Boolean);
+ if (lines.length !== 1) throw new NativeCodeIntelligenceError(invalidCode);
+ let frame;
+ try {
+ frame = JSON.parse(lines[0]);
+ assertJsonSchema(schema, frame, 'native process response');
+ } catch {
+ throw new NativeCodeIntelligenceError(invalidCode);
+ }
+ if (frame.requestId !== requestId) throw new NativeCodeIntelligenceError('native_engine_response_mismatch');
+ return frame;
+}
+
+function boundedInteger(value, minimum, maximum, code) {
+ if (!Number.isInteger(value) || value < minimum || value > maximum) {
+ throw new NativeCodeIntelligenceError(code);
+ }
+ return value;
+}
+
+function deepFreeze(value) {
+ if (!value || typeof value !== 'object' || Object.isFrozen(value)) return value;
+ Object.freeze(value);
+ for (const item of Object.values(value)) deepFreeze(item);
+ return value;
+}
diff --git a/providers/native/context-candidate-ast-code/package.json b/providers/native/context-candidate-ast-code/package.json
deleted file mode 100644
index 823412b1..00000000
--- a/providers/native/context-candidate-ast-code/package.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "name": "@open-agent-fabric/native-context-candidate-ast-code",
- "version": "0.2.0-dev",
- "private": true,
- "type": "module",
- "exports": "./src/index.mjs",
- "license": "Apache-2.0"
-}
diff --git a/providers/native/context-candidate-ast-code/provider.json b/providers/native/context-candidate-ast-code/provider.json
deleted file mode 100644
index 29373a01..00000000
--- a/providers/native/context-candidate-ast-code/provider.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "schemaVersion": "1.0.0",
- "id": "provider:native:context-candidate:ast-code",
- "name": "Native AST Code Context Candidate Source",
- "version": "0.2.0-dev",
- "category": "context-candidate",
- "enabledByDefault": true,
- "locality": "in-process",
- "contract": "CandidateSourcePort",
- "contractVersion": "1.0.0",
- "capabilities": [
- "context.candidate.ast-code",
- "source.index.js-ts",
- "source.query.symbols"
- ],
- "limits": {
- "languages": ["javascript", "typescript"],
- "writes": false,
- "network": false,
- "embeddings": false,
- "executesCode": false
- },
- "dataPaths": [],
- "experimental": false,
- "notes": [
- "Uses dependency-free static declaration, import/export, reference, and call parsing for JavaScript and TypeScript.",
- "Returns derived summaries, safe workspace locators, line/byte ranges, content hashes, symbol index relationships, and entity metadata; it does not return raw source bodies.",
- "Supports read-only definition, reference, import, export, file-outline, repository-outline, caller, and callee queries over the local derived index.",
- "Skips symlinks and files outside the configured workspace root."
- ]
-}
diff --git a/providers/native/context-candidate-ast-code/src/index.mjs b/providers/native/context-candidate-ast-code/src/index.mjs
deleted file mode 100644
index 300fa6d3..00000000
--- a/providers/native/context-candidate-ast-code/src/index.mjs
+++ /dev/null
@@ -1,3352 +0,0 @@
-import { createHash } from 'node:crypto';
-import { lstat, readdir, readFile, realpath, stat } from 'node:fs/promises';
-import path from 'node:path';
-import { estimateTokens, hashRef, stableStringify, terms } from '../../../../packages/context-compiler/src/index.mjs';
-import {
- normalizeSourceGraphWorkspaceLocator,
- SOURCE_GRAPH_FINGERPRINT_RE,
- SOURCE_GRAPH_SAFE_LABEL_RE,
- SOURCE_GRAPH_WORKSPACE_ID_RE,
- SOURCE_GRAPH_WORKSPACE_LOCATOR_RE
-} from '../../../../packages/protocol/src/source-graph-locator.mjs';
-
-export const AST_CODE_PROVIDER_VERSION = '1.0.0';
-export const AST_CODE_PARSER_VERSION = 'oaf-js-ts-static-1.0.0';
-
-const SOURCE_ID = 'provider:native:context-candidate:ast-code';
-const GRAPH_SOURCE_ID = 'provider:native:context-candidate:graph';
-const EXTENSIONS = new Set(['.js', '.jsx', '.mjs', '.cjs', '.ts', '.tsx']);
-const EXCLUDED_DIRECTORY_POLICIES = new Map([
- ['.git', 'declared_out_of_scope_directory_excluded'],
- ['node_modules', 'declared_out_of_scope_directory_excluded'],
- ['.next', 'declared_out_of_scope_directory_excluded'],
- ['coverage', 'declared_out_of_scope_directory_excluded'],
- ['dist', 'source_relevant_directory_excluded'],
- ['build', 'source_relevant_directory_excluded'],
- ['out', 'source_relevant_directory_excluded'],
- ['vendor', 'source_relevant_directory_excluded']
-]);
-const DEFAULT_MAX_FILE_BYTES = 512 * 1024;
-const DEFAULT_MAX_FILES = 1000;
-const MAX_COVERAGE_REPRESENTED_LOCATORS = 1000;
-const MAX_COVERAGE_SKIPPED_LOCATORS = 100;
-const MAX_COVERAGE_EXCLUDED_DIRECTORY_LOCATORS = 100;
-const MAX_EXCLUDED_DIRECTORY_DIAGNOSTICS = 100;
-const MAX_COVERAGE_UNSUPPORTED_EXTENSIONS = 32;
-const MAX_POST_CAP_DIRECTORY_DISCOVERY = 10_000;
-const MAX_ARCHITECTURE_RANKING_RESULTS = 25;
-const MAX_ARCHITECTURE_DEPRIORITIZED = 25;
-const MAX_REFERENCES_PER_CHUNK = 80;
-const MAX_CALLS_PER_CHUNK = 40;
-const MAX_TARGETS_PER_SYMBOL_NAME = 8;
-const MAX_REFERENCE_EDGES_PER_CHUNK = 200;
-const MAX_CALL_EDGES_PER_CHUNK = 80;
-const MAX_DIRECT_GRAPH_RESULTS_PER_FILE = 2;
-const MAX_NEIGHBOR_GRAPH_RESULTS_PER_FILE = 1;
-const MAX_REFERENCE_TARGETS_FOR_COMMON_NAME = 8;
-const SOURCE_GRAPH_NODE_KINDS = new Set(['file', 'chunk', 'symbol', 'module']);
-const SOURCE_GRAPH_EDGE_KINDS = new Set(['contains', 'defined_in', 'imports', 'exports', 'references', 'calls']);
-const SOURCE_GRAPH_SYMBOL_KINDS = new Set(['class', 'function', 'method', 'interface', 'type']);
-const SOURCE_GRAPH_NODE_ID_RE = /^sgnode_[a-f0-9]{32}$/u;
-const SOURCE_GRAPH_EDGE_ID_RE = /^sgedge_[a-f0-9]{32}$/u;
-const SOURCE_GRAPH_SOURCE_REF_RE = /^(?:(?:symbol|astchunk|import|export|call|ref|srcsnap)_[a-f0-9]{16,32}|sha256:[a-f0-9]{64})$/u;
-const SOURCE_GRAPH_SNAPSHOT_ID_RE = /^srcsnap_[a-f0-9]{16}$/u;
-const SOURCE_GRAPH_VERSION_RE = /^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/u;
-const SOURCE_GRAPH_DIAGNOSTIC_CODE_RE = /^[a-z][a-z0-9_:-]{0,63}$/u;
-const SOURCE_GRAPH_PUBLIC_FALLBACK_WORKSPACE_ID = 'ws_source_graph';
-const SOURCE_GRAPH_PUBLIC_FALLBACK_GRAPH_FINGERPRINT = hashRef('source-graph-public-fallback-graph');
-const SOURCE_GRAPH_PUBLIC_FALLBACK_SOURCE_INDEX_FINGERPRINT = hashRef('source-graph-public-fallback-source-index');
-const SOURCE_GRAPH_PUBLIC_FALLBACK_GRAPH_VERSION = 'oaf-source-graph-unavailable-1.0.0';
-const SOURCE_GRAPH_PUBLIC_FALLBACK_PARSER_VERSION = 'oaf-source-graph-unavailable';
-const SOURCE_GRAPH_PUBLIC_FALLBACK_BUILT_AT = '1970-01-01T00:00:00.000Z';
-const FIRST_ARGUMENT_CALLBACK_NAMES = new Set(['catch', 'every', 'filter', 'finally', 'find', 'findIndex', 'flatMap', 'forEach', 'map', 'reduce', 'reduceRight', 'some', 'sort', 'then']);
-const CALLABLE_DECLARATION_KINDS = new Set(['function', 'method']);
-const LOW_SIGNAL_REFERENCE_NAMES = new Set([
- 'clock',
- 'config',
- 'content',
- 'contentHash',
- 'createdAt',
- 'ctx',
- 'data',
- 'description',
- 'edge',
- 'edges',
- 'error',
- 'file',
- 'files',
- 'id',
- 'index',
- 'input',
- 'item',
- 'key',
- 'name',
- 'node',
- 'nodes',
- 'message',
- 'options',
- 'output',
- 'path',
- 'query',
- 'record',
- 'request',
- 'response',
- 'arg',
- 'args',
- 'argv',
- 'body',
- 'fixedNow',
- 'now',
- 'option',
- 'payload',
- 'reasonCodes',
- 'resolve',
- 'result',
- 'results',
- 'root',
- 'runId',
- 'split',
- 'state',
- 'status',
- 'summary',
- 'text',
- 'type',
- 'value',
- 'values',
- 'workspaceId'
-]);
-const WEAK_MEMBER_CALL_NAMES = new Set([
- 'add',
- 'catch',
- 'clear',
- 'delete',
- 'entries',
- 'every',
- 'filter',
- 'finally',
- 'find',
- 'findIndex',
- 'forEach',
- 'debug',
- 'error',
- 'get',
- 'has',
- 'includes',
- 'info',
- 'join',
- 'keys',
- 'log',
- 'map',
- 'match',
- 'pop',
- 'push',
- 'reduce',
- 'replace',
- 'reverse',
- 'set',
- 'slice',
- 'some',
- 'sort',
- 'splice',
- 'split',
- 'startsWith',
- 'stringify',
- 'test',
- 'then',
- 'toString',
- 'trim',
- 'values',
- 'warn'
-]);
-const CONTROL_FLOW_NAMES = new Set(['if', 'for', 'while', 'switch', 'catch', 'function']);
-const GENERIC_ARCHITECTURE_UTILITY_NAMES = new Set([
- 'bytecount',
- 'bytelength',
- 'bytes',
- 'count',
- 'length',
- 'noop',
- 'size'
-]);
-const ARCHITECTURE_SIGNAL_TABLE = Object.freeze({
- route_locator: Object.freeze({ weight: 90, direction: 'promote' }),
- bin_locator: Object.freeze({ weight: 76, direction: 'promote' }),
- executable_script_locator: Object.freeze({ weight: 56, direction: 'promote' }),
- package_source_entry_locator: Object.freeze({ weight: 48, direction: 'promote' }),
- exported_symbol: Object.freeze({ weight: 44, direction: 'promote' }),
- changed_locator: Object.freeze({ weight: 28, direction: 'promote' }),
- query_match: Object.freeze({ weight: 12, direction: 'promote' }),
- inbound_behavior: Object.freeze({ perDegree: 3, maximum: 18, direction: 'promote' }),
- outbound_behavior: Object.freeze({ perDegree: 2, maximum: 12, direction: 'promote' }),
- test_locator_penalty: Object.freeze({ weight: -180, direction: 'deprioritize' }),
- private_symbol_penalty: Object.freeze({ weight: -160, direction: 'deprioritize' }),
- generic_utility_penalty: Object.freeze({ weight: -140, direction: 'deprioritize' })
-});
-const JS_KEYWORDS = new Set([
- 'as', 'async', 'await', 'break', 'case', 'catch', 'class', 'const', 'continue',
- 'default', 'delete', 'do', 'else', 'export', 'extends', 'false', 'finally',
- 'for', 'from', 'function', 'if', 'implements', 'import', 'in', 'instanceof',
- 'interface', 'let', 'new', 'null', 'of', 'return', 'static', 'super',
- 'switch', 'this', 'throw', 'true', 'try', 'type', 'typeof', 'undefined',
- 'var', 'void', 'while', 'with', 'yield'
-]);
-
-export function createNativeAstCodeCandidateSource({
- root = null,
- workspaceId = 'ws_local',
- maxFileBytes = DEFAULT_MAX_FILE_BYTES,
- maxFiles = DEFAULT_MAX_FILES,
- clock = () => new Date().toISOString()
-} = {}) {
- return Object.freeze({
- descriptor: () => ({
- schemaVersion: '1.0.0',
- id: SOURCE_ID,
- kind: 'ast-code',
- version: AST_CODE_PROVIDER_VERSION,
- enabled: true,
- methods: ['js_ts_static_chunk'],
- contractVersion: '1.0.0',
- description: 'Workspace-scoped dependency-free JS/TS static code chunk candidate source'
- }),
- health: async () => ({ status: 'healthy' }),
- async query(request, trustedContext = {}) {
- const workspaceRoot = root ?? trustedContext.workspaceRoot;
- if (!workspaceRoot) return { candidates: [] };
- const resolvedWorkspaceId = sourceGraphCandidateWorkspaceId(request?.workspaceId, workspaceId);
- const scan = await scanAstCodeWorkspace({
- root: workspaceRoot,
- workspaceId: resolvedWorkspaceId,
- maxFileBytes,
- maxFiles,
- clock
- });
- const queryText = [
- request.objective,
- request.step,
- ...(request.requiredEntities ?? [])
- ].filter(Boolean).join(' ');
- const scored = scan.chunks
- .map((chunk) => ({ chunk, score: overlapScore(queryText, chunkSearchText(chunk)) }))
- .filter((item) => item.score > 0)
- .sort((a, b) => b.score - a.score || a.chunk.locator.localeCompare(b.chunk.locator))
- .slice(0, trustedContext.sourceLimit ?? request.perSourceLimit ?? 10);
- return {
- candidates: scored.map(({ chunk, score }, index) => ({
- record: recordFromChunk(chunk, resolvedWorkspaceId),
- sourceHit: {
- sourceId: SOURCE_ID,
- sourceKind: 'ast-code',
- sourceVersion: AST_CODE_PROVIDER_VERSION,
- retrievalMethod: 'js_ts_static_chunk',
- localRank: index + 1,
- localScore: Number(Math.max(0, Math.min(1, score)).toFixed(6)),
- reasonCodes: ['ast_code_match'],
- queryFingerprint: trustedContext.queryFingerprint ?? hashRef(stableStringify({ queryText })),
- accessDecisionRef: trustedContext.accessDecisionRef ?? 'poldet_unconfigured',
- retrievedAt: trustedContext.retrievedAt ?? clock()
- }
- }))
- };
- }
- });
-}
-
-export function createNativeSourceGraphCandidateSource({
- root = null,
- workspaceId = 'ws_local',
- maxFileBytes = DEFAULT_MAX_FILE_BYTES,
- maxFiles = DEFAULT_MAX_FILES,
- clock = () => new Date().toISOString()
-} = {}) {
- let cachedGraph = null;
- let cachedGraphKey = null;
- return Object.freeze({
- descriptor: () => ({
- schemaVersion: '1.0.0',
- id: GRAPH_SOURCE_ID,
- kind: 'graph',
- version: AST_CODE_PROVIDER_VERSION,
- enabled: true,
- methods: ['source_graph_lexical'],
- contractVersion: '1.0.0',
- description: 'Workspace-scoped dependency-free JS/TS source graph candidate source'
- }),
- health: async () => ({ status: 'healthy' }),
- async query(request, trustedContext = {}) {
- const workspaceRoot = root ?? trustedContext.workspaceRoot;
- if (!workspaceRoot) return { candidates: [] };
- const resolvedWorkspaceId = sourceGraphCandidateWorkspaceId(request?.workspaceId, workspaceId);
- const queryText = [
- request.objective,
- request.step,
- ...(request.requiredEntities ?? [])
- ].filter(Boolean).join(' ');
- const graphKey = stableStringify({ workspaceRoot, workspaceId: resolvedWorkspaceId, maxFileBytes, maxFiles });
- if (!cachedGraph || cachedGraphKey !== graphKey) {
- cachedGraph = await buildJsTsSourceGraph({
- root: workspaceRoot,
- workspaceId: resolvedWorkspaceId,
- maxFileBytes,
- maxFiles,
- clock
- });
- cachedGraphKey = graphKey;
- }
- const graph = cachedGraph;
- const publicGraph = sanitizeSourceGraphPublicOutput(graph);
- const resultLimit = trustedContext.sourceLimit ?? request.perSourceLimit ?? 10;
- const search = searchSourceGraph(graph, {
- query: queryText,
- limit: sourceGraphSearchLimit(resultLimit)
- });
- const results = publicGraph.envelopeValid ? sourceGraphCandidateResults(publicGraph, search.results, {
- limit: resultLimit
- }) : [];
- return {
- candidates: results.map((result, index) => ({
- record: recordFromGraphResult({ result, graph: publicGraph, workspaceId: publicGraph.workspaceId, collectedAt: clock() }),
- sourceHit: {
- sourceId: GRAPH_SOURCE_ID,
- sourceKind: 'graph',
- sourceVersion: AST_CODE_PROVIDER_VERSION,
- retrievalMethod: search.retrievalMethod,
- localRank: index + 1,
- localScore: Number(Math.max(0, Math.min(1, result.score)).toFixed(6)),
- reasonCodes: [...new Set(['source_graph_match', ...(result.reasonCodes ?? [])])].sort(),
- queryFingerprint: trustedContext.queryFingerprint ?? search.queryFingerprint,
- accessDecisionRef: trustedContext.accessDecisionRef ?? 'poldet_unconfigured',
- retrievedAt: trustedContext.retrievedAt ?? clock()
- }
- }))
- };
- }
- });
-}
-
-function sourceGraphCandidateResults(publicGraph, searchResults, { limit }) {
- const boundedLimit = boundedInteger(limit, 'source_graph_candidate_limit', 1, 100);
- const nodeById = new Map(publicGraph.nodes.map((node) => [node.id, node]));
- const edgesByNodeId = new Map();
- for (const edge of publicGraph.edges) {
- for (const nodeId of [edge.fromNodeId, edge.toNodeId]) {
- const edges = edgesByNodeId.get(nodeId) ?? [];
- edges.push(edge);
- edgesByNodeId.set(nodeId, edges);
- }
- }
- const output = [];
- const seen = new Set();
- const directFileCounts = new Map();
- const neighborFileCounts = new Map();
- const directResults = [];
- const directQuota = Math.max(1, Math.min(boundedLimit, Math.ceil(boundedLimit * 0.75)));
- function add(result, { fileCounts, maxPerFile }) {
- if (!result?.locator || seen.has(result.id)) return;
- const fileLocator = fileLocatorFor(result.locator);
- const fileCount = fileCounts.get(fileLocator) ?? 0;
- if (fileCount >= maxPerFile) return;
- fileCounts.set(fileLocator, fileCount + 1);
- seen.add(result.id);
- output.push(result);
- }
- for (const result of searchResults) {
- const outputLengthBefore = output.length;
- add(result, {
- fileCounts: directFileCounts,
- maxPerFile: MAX_DIRECT_GRAPH_RESULTS_PER_FILE
- });
- if (output.length > outputLengthBefore) directResults.push(result);
- if (output.length >= directQuota) break;
- }
- if (output.length >= boundedLimit) return output;
-
- const neighborSeeds = [...directResults].sort(compareNeighborSeeds);
- for (const result of neighborSeeds) {
- for (const edge of neighborEdgesForResult(result, { edgesByNodeId, nodeById })) {
- const from = nodeById.get(edge.fromNodeId);
- const to = nodeById.get(edge.toNodeId);
- add({
- resultType: 'edge',
- id: edge.id,
- kind: edge.kind,
- label: `${from?.label ?? edge.fromNodeId} ${edge.kind} ${to?.label ?? edge.toNodeId}`,
- locator: edge.locator,
- fromNodeId: edge.fromNodeId,
- toNodeId: edge.toNodeId,
- score: Number((Math.max(0.01, result.score * 0.65)).toFixed(6)),
- reasonCodes: [...new Set(['source_graph_neighbor', ...(result.reasonCodes ?? [])])].sort()
- }, {
- fileCounts: neighborFileCounts,
- maxPerFile: MAX_NEIGHBOR_GRAPH_RESULTS_PER_FILE
- });
- if (output.length >= boundedLimit) break;
- }
- if (output.length >= boundedLimit) break;
- }
- return output;
-}
-
-function sourceGraphSearchLimit(resultLimit) {
- const boundedLimit = boundedInteger(resultLimit, 'source_graph_candidate_limit', 1, 100);
- return Math.min(100, Math.max(boundedLimit, boundedLimit * 4));
-}
-
-function compareNeighborEdges(left, right) {
- return neighborEdgePriority(left.kind) - neighborEdgePriority(right.kind) || left.id.localeCompare(right.id);
-}
-
-function compareNeighborSeeds(left, right) {
- return neighborSeedPriority(left) - neighborSeedPriority(right) || right.score - left.score || left.id.localeCompare(right.id);
-}
-
-function neighborEdgesForResult(result, { edgesByNodeId, nodeById }) {
- const nodeIds = result.resultType === 'node'
- ? [result.id]
- : [result.fromNodeId, result.toNodeId].filter(Boolean);
- const edges = [];
- const seen = new Set();
- function addEdge(edge) {
- if (!edge?.locator || seen.has(edge.id)) return;
- seen.add(edge.id);
- edges.push(edge);
- }
- for (const nodeId of nodeIds) {
- const firstHop = (edgesByNodeId.get(nodeId) ?? []).sort(compareNeighborEdges);
- for (const edge of firstHop) {
- addEdge(edge);
- const otherNodeId = edge.fromNodeId === nodeId ? edge.toNodeId : edge.fromNodeId;
- const otherNode = nodeById.get(otherNodeId);
- if (otherNode?.kind !== 'chunk' || !['contains', 'defined_in'].includes(edge.kind)) continue;
- for (const secondHop of (edgesByNodeId.get(otherNodeId) ?? []).sort(compareNeighborEdges)) {
- if (secondHop.id !== edge.id) addEdge(secondHop);
- }
- }
- }
- return edges;
-}
-
-function neighborSeedPriority(result) {
- if (result.resultType === 'node' && result.kind === 'file') return 0;
- if (result.resultType === 'node' && result.kind === 'symbol') return 1;
- if (result.resultType === 'edge' && result.kind === 'imports') return 2;
- if (['calls', 'references'].includes(result.kind)) return 3;
- return 4;
-}
-
-function neighborEdgePriority(kind) {
- switch (kind) {
- case 'imports':
- return 0;
- case 'calls':
- return 1;
- case 'references':
- return 2;
- case 'exports':
- return 3;
- case 'defined_in':
- return 4;
- case 'contains':
- return 5;
- default:
- return 10;
- }
-}
-
-export async function scanAstCodeWorkspace({
- root,
- workspaceId = 'ws_local',
- maxFileBytes = DEFAULT_MAX_FILE_BYTES,
- maxFiles = DEFAULT_MAX_FILES,
- clock = () => new Date().toISOString()
-} = {}) {
- if (typeof root !== 'string' || !root) throw new Error('root is required');
- const rootReal = await realpath(root);
- const diagnostics = [];
- const chunks = [];
- const fileOutlines = [];
- const skippedLocators = new Set();
- const oversizedLocators = new Set();
- const excludedDirectoryLocators = new Set();
- const declaredOutOfScopeDirectoryLocators = new Set();
- const sourceRelevantExcludedDirectoryLocators = new Set();
- const excludedDirectoryCodes = new Map();
- const unsupportedExtensionCounts = new Map();
- let unsupportedFileCount = 0;
- let excludedDirectoryCount = 0;
- let declaredOutOfScopeDirectoryCount = 0;
- let sourceRelevantExcludedDirectoryCount = 0;
- let excludedDirectoryDiagnosticCount = 0;
- let excludedDirectoryDiagnosticsTruncated = false;
- let visitedFiles = 0;
- let maxFilesReached = false;
- let postCapDirectoryDiscoveryCapped = false;
-
- function markMaxFilesReached() {
- if (maxFilesReached) return;
- maxFilesReached = true;
- diagnostics.push(diagnostic('workspace://__source_graph_scan__', 'max_files_reached'));
- }
-
- function recordExcludedDirectory(locator, code) {
- if (excludedDirectoryCodes.has(locator)) return;
- excludedDirectoryCodes.set(locator, code);
- excludedDirectoryCount += 1;
- addBoundedLocator(excludedDirectoryLocators, locator, MAX_COVERAGE_EXCLUDED_DIRECTORY_LOCATORS);
- if (code === 'declared_out_of_scope_directory_excluded') {
- declaredOutOfScopeDirectoryCount += 1;
- addBoundedLocator(declaredOutOfScopeDirectoryLocators, locator, MAX_COVERAGE_EXCLUDED_DIRECTORY_LOCATORS);
- } else {
- sourceRelevantExcludedDirectoryCount += 1;
- addBoundedLocator(sourceRelevantExcludedDirectoryLocators, locator, MAX_COVERAGE_EXCLUDED_DIRECTORY_LOCATORS);
- }
- if (excludedDirectoryDiagnosticCount < MAX_EXCLUDED_DIRECTORY_DIAGNOSTICS) {
- diagnostics.push(diagnostic(locator, code));
- excludedDirectoryDiagnosticCount += 1;
- } else if (!excludedDirectoryDiagnosticsTruncated) {
- diagnostics.push(diagnostic('workspace://__source_graph_scan__', 'excluded_directory_diagnostics_truncated'));
- excludedDirectoryDiagnosticsTruncated = true;
- }
- }
-
- function recordUnreadableFile(locator) {
- skippedLocators.add(locator);
- diagnostics.push(diagnostic(locator, 'file_unreadable'));
- }
-
- function recordUnreadableDirectory(locator) {
- diagnostics.push(diagnostic(locator, 'directory_unreadable'));
- }
-
- function markPostCapDirectoryDiscoveryCapped() {
- if (postCapDirectoryDiscoveryCapped) return;
- postCapDirectoryDiscoveryCapped = true;
- diagnostics.push(diagnostic('workspace://__source_graph_scan__', 'directory_discovery_capped'));
- }
-
- async function walk(relativeDirectory = '') {
- if (visitedFiles >= maxFiles) {
- markMaxFilesReached();
- return;
- }
- const absoluteDirectory = path.join(rootReal, relativeDirectory);
- let entries;
- try {
- entries = (await readdir(absoluteDirectory, { withFileTypes: true })).sort((a, b) => a.name.localeCompare(b.name));
- } catch (error) {
- if (relativeDirectory === '' && error?.code === 'ENOTDIR') throw error;
- const locator = safeWorkspaceLocatorFor(relativeDirectory) ?? 'workspace://__source_graph_scan__';
- recordUnreadableDirectory(locator);
- return;
- }
- for (const entry of entries) {
- if (visitedFiles >= maxFiles) {
- markMaxFilesReached();
- return;
- }
- const relativePath = normalizeRelative(path.join(relativeDirectory, entry.name));
- const absolutePath = path.join(rootReal, relativePath);
- const info = await lstat(absolutePath);
- const locator = safeWorkspaceLocatorFor(relativePath);
- if (!locator) {
- diagnostics.push(diagnostic('workspace://__source_graph_scan__', 'path_escape_skipped'));
- continue;
- }
- if (info.isSymbolicLink()) {
- skippedLocators.add(locator);
- diagnostics.push(diagnostic(locator, 'symlink_skipped'));
- continue;
- }
- if (info.isDirectory()) {
- const exclusionCode = EXCLUDED_DIRECTORY_POLICIES.get(entry.name);
- if (exclusionCode) {
- recordExcludedDirectory(locator, exclusionCode);
- continue;
- }
- await walk(relativePath);
- continue;
- }
- if (!info.isFile()) continue;
- const extension = path.extname(entry.name).toLowerCase();
- if (!EXTENSIONS.has(extension)) {
- unsupportedFileCount += 1;
- if (extension) unsupportedExtensionCounts.set(extension, (unsupportedExtensionCounts.get(extension) ?? 0) + 1);
- continue;
- }
- let fileReal;
- try {
- fileReal = await realpath(absolutePath);
- } catch {
- recordUnreadableFile(locator);
- continue;
- }
- if (!insideRoot(rootReal, fileReal)) {
- skippedLocators.add(locator);
- diagnostics.push(diagnostic(locator, 'path_escape_skipped'));
- continue;
- }
- let size;
- try {
- size = info.size ?? (await stat(fileReal)).size;
- } catch {
- recordUnreadableFile(locator);
- continue;
- }
- if (size > maxFileBytes) {
- skippedLocators.add(locator);
- oversizedLocators.add(locator);
- diagnostics.push(diagnostic(locator, 'file_too_large'));
- continue;
- }
- let body;
- try {
- body = await readFile(fileReal, 'utf8');
- } catch {
- recordUnreadableFile(locator);
- continue;
- }
- visitedFiles += 1;
- const collectedAt = clock();
- const fileChunks = chunksForFile({ relativePath, body, workspaceId, collectedAt });
- chunks.push(...fileChunks);
- fileOutlines.push(fileOutlineFor({ relativePath, body, workspaceId, collectedAt, chunks: fileChunks }));
- }
- }
-
- async function discoverExcludedDirectoriesAfterCap() {
- let visitedDirectories = 0;
- async function walkDirectories(relativeDirectory = '') {
- if (postCapDirectoryDiscoveryCapped) return;
- const absoluteDirectory = path.join(rootReal, relativeDirectory);
- let entries;
- try {
- entries = (await readdir(absoluteDirectory, { withFileTypes: true })).sort((a, b) => a.name.localeCompare(b.name));
- } catch {
- const locator = safeWorkspaceLocatorFor(relativeDirectory) ?? 'workspace://__source_graph_scan__';
- diagnostics.push(diagnostic(locator, 'directory_discovery_unavailable'));
- return;
- }
- for (const entry of entries) {
- if (postCapDirectoryDiscoveryCapped) return;
- if (!entry.isDirectory()) continue;
- if (visitedDirectories >= MAX_POST_CAP_DIRECTORY_DISCOVERY) {
- markPostCapDirectoryDiscoveryCapped();
- return;
- }
- const relativePath = normalizeRelative(path.join(relativeDirectory, entry.name));
- const absolutePath = path.join(rootReal, relativePath);
- const locator = safeWorkspaceLocatorFor(relativePath);
- if (!locator) {
- diagnostics.push(diagnostic('workspace://__source_graph_scan__', 'path_escape_skipped'));
- continue;
- }
- let info;
- try {
- info = await lstat(absolutePath);
- } catch {
- diagnostics.push(diagnostic(locator, 'directory_discovery_unavailable'));
- continue;
- }
- if (info.isSymbolicLink() || !info.isDirectory()) continue;
- visitedDirectories += 1;
- const exclusionCode = EXCLUDED_DIRECTORY_POLICIES.get(entry.name);
- if (exclusionCode) {
- recordExcludedDirectory(locator, exclusionCode);
- continue;
- }
- await walkDirectories(relativePath);
- }
- }
- await walkDirectories();
- }
-
- await walk();
- if (maxFilesReached) await discoverExcludedDirectoriesAfterCap();
- const sortedChunks = chunks.sort((a, b) => a.locator.localeCompare(b.locator));
- const sortedFileOutlines = fileOutlines.sort((a, b) => a.locator.localeCompare(b.locator));
- const symbolIndex = buildSymbolIndex({ workspaceId, chunks: sortedChunks, fileOutlines: sortedFileOutlines, indexedAt: clock() });
- const coverage = sourceGraphCoverage({
- representedJsTsLocators: sortedFileOutlines.map((file) => file.locator),
- skippedLocators: [...skippedLocators],
- oversizedLocators: [...oversizedLocators],
- excludedDirectoryCount,
- excludedDirectoryLocators: [...excludedDirectoryLocators],
- declaredOutOfScopeDirectoryCount,
- declaredOutOfScopeDirectoryLocators: [...declaredOutOfScopeDirectoryLocators],
- sourceRelevantExcludedDirectoryCount,
- sourceRelevantExcludedDirectoryLocators: [...sourceRelevantExcludedDirectoryLocators],
- unsupportedFileCount,
- unsupportedExtensions: [...unsupportedExtensionCounts.keys()],
- maxFilesReached,
- diagnosticCodes: diagnostics.map((item) => item.code)
- });
- const result = {
- schemaVersion: '1.0.0',
- workspaceId,
- parserVersion: AST_CODE_PARSER_VERSION,
- fileCount: visitedFiles,
- chunkCount: sortedChunks.length,
- chunks: sortedChunks,
- fileOutlines: sortedFileOutlines,
- repositoryOutline: repositoryOutlineFor({ workspaceId, fileOutlines: sortedFileOutlines, symbolIndex }),
- contentJournal: sortedFileOutlines.map((file) => ({
- locator: file.locator,
- contentHash: file.contentHash,
- symbolFingerprint: file.symbolFingerprint,
- collectedAt: file.collectedAt
- })),
- symbolIndex,
- coverage,
- diagnostics: diagnostics.sort((a, b) => a.locator.localeCompare(b.locator) || a.code.localeCompare(b.code))
- };
- return Object.freeze({ ...result, scanFingerprint: contentFingerprint(result) });
-}
-
-function sourceGraphCoverage({
- representedJsTsLocators = [],
- skippedLocators = [],
- oversizedLocators = [],
- excludedDirectoryCount = 0,
- excludedDirectoryLocators = [],
- declaredOutOfScopeDirectoryCount = 0,
- declaredOutOfScopeDirectoryLocators = [],
- sourceRelevantExcludedDirectoryCount = 0,
- sourceRelevantExcludedDirectoryLocators = [],
- unsupportedFileCount = 0,
- unsupportedExtensions = [],
- maxFilesReached = false,
- diagnosticCodes = []
-} = {}) {
- const represented = uniqueSortedStrings(representedJsTsLocators).slice(0, MAX_COVERAGE_REPRESENTED_LOCATORS);
- const skipped = uniqueSortedStrings(skippedLocators).slice(0, MAX_COVERAGE_SKIPPED_LOCATORS);
- const oversized = uniqueSortedStrings(oversizedLocators).slice(0, MAX_COVERAGE_SKIPPED_LOCATORS);
- const excludedDirectories = uniqueSortedStrings(excludedDirectoryLocators).slice(0, MAX_COVERAGE_EXCLUDED_DIRECTORY_LOCATORS);
- const declaredOutOfScopeDirectories = uniqueSortedStrings(declaredOutOfScopeDirectoryLocators).slice(0, MAX_COVERAGE_EXCLUDED_DIRECTORY_LOCATORS);
- const sourceRelevantExcludedDirectories = uniqueSortedStrings(sourceRelevantExcludedDirectoryLocators).slice(0, MAX_COVERAGE_EXCLUDED_DIRECTORY_LOCATORS);
- const extensions = uniqueSortedStrings(unsupportedExtensions)
- .filter((extension) => /^\.[a-z0-9]{1,16}$/u.test(extension))
- .slice(0, MAX_COVERAGE_UNSUPPORTED_EXTENSIONS);
- const reasons = new Set();
- const partialReasons = new Set();
- if (oversizedLocators.length) partialReasons.add('file_too_large');
- if (unsupportedFileCount > 0) partialReasons.add('unsupported_extensions_skipped');
- if (maxFilesReached) partialReasons.add('max_files_reached');
- if (declaredOutOfScopeDirectoryCount > 0) reasons.add('declared_out_of_scope_directory_excluded');
- if (sourceRelevantExcludedDirectoryCount > 0) partialReasons.add('source_relevant_directory_excluded');
- for (const code of diagnosticCodes) {
- if (code === 'symlink_skipped' || code === 'path_escape_skipped' || code === 'file_unreadable' || code === 'directory_unreadable' || code === 'directory_discovery_unavailable' || code === 'directory_discovery_capped') partialReasons.add(code);
- if (code === 'excluded_directory_diagnostics_truncated') reasons.add(code);
- }
- for (const code of partialReasons) reasons.add(code);
- const reasonCodes = [...reasons].sort();
- return Object.freeze({
- status: partialReasons.size ? 'partial' : 'complete',
- representedFileCount: representedJsTsLocators.length,
- representedJsTsLocators: represented,
- skippedFileCount: skippedLocators.length,
- skippedLocators: skipped,
- oversizedFileCount: oversizedLocators.length,
- oversizedLocators: oversized,
- excludedDirectoryCount: Math.max(0, excludedDirectoryCount),
- excludedDirectoryLocators: excludedDirectories,
- declaredOutOfScopeDirectoryCount: Math.max(0, declaredOutOfScopeDirectoryCount),
- declaredOutOfScopeDirectoryLocators: declaredOutOfScopeDirectories,
- sourceRelevantExcludedDirectoryCount: Math.max(0, sourceRelevantExcludedDirectoryCount),
- sourceRelevantExcludedDirectoryLocators: sourceRelevantExcludedDirectories,
- unsupportedFileCount: Math.max(0, unsupportedFileCount),
- unsupportedExtensions: extensions,
- maxFilesReached: Boolean(maxFilesReached),
- reasonCodes
- });
-}
-
-function addBoundedLocator(locators, locator, maximum) {
- if (locators.size < maximum) locators.add(locator);
-}
-
-function uniqueSortedStrings(values) {
- return [...new Set((values ?? []).map((value) => String(value)).filter(Boolean))].sort();
-}
-
-export async function buildJsTsSourceIndex(options = {}) {
- const scan = await scanAstCodeWorkspace(options);
- return Object.freeze({
- schemaVersion: '1.0.0',
- workspaceId: scan.workspaceId,
- parserVersion: scan.parserVersion,
- scanFingerprint: scan.scanFingerprint,
- repositoryOutline: scan.repositoryOutline,
- fileOutlines: scan.fileOutlines,
- contentJournal: scan.contentJournal,
- symbolIndex: scan.symbolIndex,
- coverage: scan.coverage,
- diagnostics: scan.diagnostics,
- sourceIndexFingerprint: contentFingerprint({
- repositoryOutline: scan.repositoryOutline,
- fileOutlines: scan.fileOutlines,
- contentJournal: scan.contentJournal,
- symbolIndex: scan.symbolIndex,
- coverage: scan.coverage,
- diagnostics: scan.diagnostics
- })
- });
-}
-
-export function querySourceIndex(index, { operation, name = null, module = null, locator = null } = {}) {
- if (!index?.symbolIndex) throw new Error('source index is required');
- const symbols = index.symbolIndex.symbols ?? [];
- const references = index.symbolIndex.references ?? [];
- const imports = index.symbolIndex.imports ?? [];
- const exports = index.symbolIndex.exports ?? [];
- const callEdges = index.symbolIndex.callEdges ?? [];
- const normalizedName = name ? safeTag(name) : null;
- const normalizedModule = module ? String(module) : null;
- switch (operation) {
- case 'definition':
- case 'declaration':
- case 'symbol-source':
- return symbols.filter((symbol) => !normalizedName || safeTag(symbol.name) === normalizedName);
- case 'references':
- return references.filter((reference) => !normalizedName || safeTag(reference.targetName) === normalizedName);
- case 'imports':
- return imports.filter((item) => !normalizedModule || item.module === normalizedModule);
- case 'exports':
- return exports.filter((item) => !normalizedName || safeTag(item.name) === normalizedName);
- case 'callers':
- return callEdges.filter((edge) => !normalizedName || safeTag(edge.calleeName) === normalizedName);
- case 'callees':
- return callEdges.filter((edge) => !normalizedName || safeTag(edge.callerName) === normalizedName);
- case 'file-outline':
- return (index.fileOutlines ?? []).filter((file) => !locator || file.locator === locator);
- case 'repository-outline':
- return index.repositoryOutline;
- default:
- throw new Error(`unsupported_source_index_operation:${operation}`);
- }
-}
-
-export async function buildJsTsSourceGraph(options = {}) {
- const index = await buildJsTsSourceIndex(options);
- return buildSourceGraphFromIndex(index, { builtAt: safeTimestamp(options.clock) });
-}
-
-export function buildSourceGraphFromIndex(index, { builtAt = new Date().toISOString() } = {}) {
- if (!index?.symbolIndex) throw new Error('source index is required');
- const workspaceId = index.workspaceId ?? index.symbolIndex.workspaceId;
- if (!workspaceId) throw new Error('source graph workspaceId is required');
- const nodesById = new Map();
- const edgesById = new Map();
- const fileOutlinesByLocator = new Map((index.fileOutlines ?? []).map((file) => [file.locator, file]));
- const knownFileLocators = new Set(fileOutlinesByLocator.keys());
- const symbolNodeBySymbolId = new Map();
-
- function addNode(node) {
- const frozen = Object.freeze(node);
- nodesById.set(frozen.id, frozen);
- return frozen;
- }
-
- function addEdge(edge) {
- if (!nodesById.has(edge.fromNodeId) || !nodesById.has(edge.toNodeId)) return null;
- const frozen = Object.freeze(edge);
- edgesById.set(frozen.id, frozen);
- return frozen;
- }
-
- function ensureFileNode(locator) {
- const fileLocator = fileLocatorFor(locator);
- const outline = fileOutlinesByLocator.get(fileLocator);
- const id = sourceGraphNodeId('file', fileLocator);
- if (nodesById.has(id)) return nodesById.get(id);
- return addNode(withDefined({
- id,
- workspaceId,
- kind: 'file',
- label: fileLocator.replace(/^workspace:\/\//u, ''),
- locator: fileLocator,
- contentHash: outline?.contentHash,
- sourceSnapshotId: outline?.sourceSnapshotId
- }));
- }
-
- function ensureChunkNode({ chunkId, locator, contentHash = null, sourceSnapshotId = null }) {
- if (!chunkId || !locator) return null;
- const id = sourceGraphNodeId('chunk', chunkId);
- if (nodesById.has(id)) return nodesById.get(id);
- const fileNode = ensureFileNode(locator);
- const chunkNode = addNode(withDefined({
- id,
- workspaceId,
- kind: 'chunk',
- label: locatorLabel(locator),
- locator,
- sourceRef: chunkId,
- contentHash,
- sourceSnapshotId
- }));
- addEdge(withDefined({
- id: sourceGraphEdgeId('contains', fileNode.id, chunkNode.id, chunkId),
- workspaceId,
- kind: 'contains',
- fromNodeId: fileNode.id,
- toNodeId: chunkNode.id,
- locator,
- sourceRef: chunkId,
- confidence: 1
- }));
- return chunkNode;
- }
-
- for (const locator of index.symbolIndex.fileLocators ?? index.repositoryOutline?.locators ?? []) ensureFileNode(locator);
- for (const file of index.fileOutlines ?? []) ensureFileNode(file.locator);
-
- for (const symbol of index.symbolIndex.symbols ?? []) {
- const chunkNode = ensureChunkNode({
- chunkId: symbol.chunkId,
- locator: symbol.locator,
- contentHash: symbol.contentHash,
- sourceSnapshotId: symbol.sourceSnapshotId
- });
- const node = addNode(withDefined({
- id: sourceGraphNodeId('symbol', symbol.id),
- workspaceId,
- kind: 'symbol',
- label: symbol.name,
- qualifiedLabel: qualifiedSymbolLabel(symbol.name, symbol.scopeChain),
- locator: symbol.locator,
- sourceRef: symbol.id,
- symbolKind: symbol.kind,
- scopeChain: symbol.scopeChain?.length ? symbol.scopeChain : undefined,
- contentHash: symbol.contentHash,
- sourceSnapshotId: symbol.sourceSnapshotId
- }));
- symbolNodeBySymbolId.set(symbol.id, node);
- if (chunkNode) {
- addEdge(withDefined({
- id: sourceGraphEdgeId('defined_in', node.id, chunkNode.id, symbol.id),
- workspaceId,
- kind: 'defined_in',
- fromNodeId: node.id,
- toNodeId: chunkNode.id,
- locator: symbol.locator,
- sourceRef: symbol.id,
- confidence: 1
- }));
- }
- }
-
- for (const item of index.symbolIndex.imports ?? []) {
- const chunkNode = ensureChunkNode({ chunkId: item.chunkId, locator: item.locator });
- const moduleNode = addNode(withDefined({
- id: sourceGraphNodeId('module', item.module),
- workspaceId,
- kind: 'module',
- label: item.module,
- sourceRef: item.moduleHash,
- moduleHash: item.moduleHash
- }));
- if (chunkNode) {
- addEdge(withDefined({
- id: sourceGraphEdgeId('imports', chunkNode.id, moduleNode.id, item.id),
- workspaceId,
- kind: 'imports',
- fromNodeId: chunkNode.id,
- toNodeId: moduleNode.id,
- locator: item.locator,
- sourceRef: item.id,
- confidence: 0.9
- }));
- const importedFileLocator = resolveImportFileLocator(item.locator, item.module, knownFileLocators);
- const importedFileNode = importedFileLocator ? ensureFileNode(importedFileLocator) : null;
- if (importedFileNode) {
- addEdge(withDefined({
- id: sourceGraphEdgeId('imports', chunkNode.id, importedFileNode.id, `${item.id}:file`),
- workspaceId,
- kind: 'imports',
- fromNodeId: chunkNode.id,
- toNodeId: importedFileNode.id,
- locator: importedFileLocator,
- sourceRef: item.id,
- confidence: 0.85
- }));
- }
- }
- }
-
- for (const item of index.symbolIndex.exports ?? []) {
- const fileNode = ensureFileNode(item.locator);
- const chunkSymbols = (index.symbolIndex.symbols ?? []).filter((symbol) => symbol.chunkId === item.chunkId);
- const targetSymbol = chunkSymbols.find((symbol) => symbol.name === item.name) ?? chunkSymbols[0];
- const targetNode = targetSymbol ? symbolNodeBySymbolId.get(targetSymbol.id) : ensureChunkNode({ chunkId: item.chunkId, locator: item.locator });
- if (targetNode) {
- addEdge(withDefined({
- id: sourceGraphEdgeId('exports', fileNode.id, targetNode.id, item.id),
- workspaceId,
- kind: 'exports',
- fromNodeId: fileNode.id,
- toNodeId: targetNode.id,
- locator: item.locator,
- sourceRef: item.id,
- exportName: item.name,
- confidence: 1
- }));
- }
- }
-
- for (const item of index.symbolIndex.references ?? []) {
- const sourceChunk = ensureChunkNode({ chunkId: item.sourceChunkId, locator: item.sourceLocator });
- const targetNode = symbolNodeBySymbolId.get(item.targetSymbolId);
- if (sourceChunk && targetNode) {
- addEdge(withDefined({
- id: sourceGraphEdgeId('references', sourceChunk.id, targetNode.id, item.id),
- workspaceId,
- kind: 'references',
- fromNodeId: sourceChunk.id,
- toNodeId: targetNode.id,
- locator: item.sourceLocator,
- sourceRef: item.id,
- confidence: 0.75
- }));
- }
- }
-
- for (const item of index.symbolIndex.callEdges ?? []) {
- const callerNode = symbolNodeBySymbolId.get(item.callerSymbolId);
- const calleeNode = symbolNodeBySymbolId.get(item.calleeSymbolId);
- if (callerNode && calleeNode) {
- addEdge(withDefined({
- id: sourceGraphEdgeId('calls', callerNode.id, calleeNode.id, item.id),
- workspaceId,
- kind: 'calls',
- fromNodeId: callerNode.id,
- toNodeId: calleeNode.id,
- locator: item.sourceLocator,
- sourceRef: item.id,
- confidence: 0.7
- }));
- }
- }
-
- const nodes = [...nodesById.values()].sort((a, b) => a.id.localeCompare(b.id));
- const edges = [...edgesById.values()].sort((a, b) => a.id.localeCompare(b.id));
- const graph = {
- schemaVersion: '1.0.0',
- workspaceId,
- graphVersion: 'oaf-native-source-graph-1.0.0',
- parserVersion: index.parserVersion ?? index.symbolIndex.parserVersion ?? AST_CODE_PARSER_VERSION,
- builtAt,
- sourceIndexFingerprint: index.sourceIndexFingerprint ?? index.symbolIndex.symbolIndexFingerprint,
- summary: sourceGraphSummary({ nodes, edges, coverage: index.coverage }),
- nodes,
- edges,
- diagnostics: [...(index.diagnostics ?? [])].sort((a, b) => a.locator.localeCompare(b.locator) || a.code.localeCompare(b.code))
- };
- return Object.freeze({ ...graph, graphFingerprint: graphContentFingerprint(graph) });
-}
-
-export function searchSourceGraph(graph, {
- query = '',
- nodeKinds = null,
- edgeKinds = null,
- labelPattern = null,
- locatorPrefix = null,
- limit = 20,
- offset = 0
-} = {}) {
- assertSourceGraph(graph);
- const publicGraph = sanitizeSourceGraphPublicOutput(graph);
- const boundedLimit = boundedInteger(limit, 'source_graph_search_limit', 1, 100);
- const boundedOffset = boundedInteger(offset, 'source_graph_search_offset', 0, 10_000);
- const nodeKindSet = nodeKinds ? new Set(nodeKinds) : null;
- const edgeKindSet = edgeKinds ? new Set(edgeKinds) : null;
- const includeNodes = !edgeKindSet || Boolean(nodeKindSet);
- const includeEdges = !nodeKindSet || Boolean(edgeKindSet);
- const pattern = labelPattern ? safeRegex(labelPattern, 'source_graph_label_pattern_invalid') : null;
- const nodeById = new Map(publicGraph.nodes.map((node) => [node.id, node]));
- const queryText = String(query ?? '');
- const queryTerms = terms(queryText);
- const results = [];
-
- for (const node of includeNodes ? publicGraph.nodes : []) {
- if (!safeSourceGraphSearchNode(node)) continue;
- if (nodeKindSet && !nodeKindSet.has(node.kind)) continue;
- if (locatorPrefix && !(node.locator ?? '').startsWith(locatorPrefix)) continue;
- if (pattern && !pattern.test(node.label) && !pattern.test(node.qualifiedLabel ?? '')) continue;
- const score = graphSearchScore(queryTerms, sourceGraphNodeSearchText(node)) * graphSearchPathWeight(node.locator, queryTerms, locatorPrefix) * graphSearchSymbolKindWeight(node.symbolKind);
- if (queryTerms.size && score <= 0) continue;
- results.push({
- resultType: 'node',
- id: node.id,
- kind: node.kind,
- label: node.label,
- qualifiedLabel: node.qualifiedLabel,
- locator: node.locator,
- symbolKind: node.symbolKind,
- scopeChain: node.scopeChain,
- score,
- reasonCodes: sourceGraphSearchReasons({ score, pattern, locatorPrefix })
- });
- }
-
- for (const edge of includeEdges ? publicGraph.edges : []) {
- const from = nodeById.get(edge.fromNodeId);
- const to = nodeById.get(edge.toNodeId);
- if (!safeSourceGraphSearchEdge(edge, { from, to })) continue;
- if (edgeKindSet && !edgeKindSet.has(edge.kind)) continue;
- if (locatorPrefix && !(edge.locator ?? '').startsWith(locatorPrefix)) continue;
- const fromPathWeight = from?.locator ? graphSearchPathWeight(from.locator, queryTerms, locatorPrefix) : 1;
- const score = graphSearchScore(queryTerms, sourceGraphEdgeSearchText(edge, from, to)) * graphSearchPathWeight(edge.locator, queryTerms, locatorPrefix) * fromPathWeight * graphSearchEdgeKindWeight(edge.kind);
- if (queryTerms.size && score <= 0) continue;
- const fromLabel = from?.qualifiedLabel ?? from?.label ?? edge.fromNodeId;
- const toLabel = to?.qualifiedLabel ?? to?.label ?? edge.toNodeId;
- const exportLabel = edge.exportName && edge.exportName !== to?.label ? ` ${edge.exportName}` : '';
- results.push({
- resultType: 'edge',
- id: edge.id,
- kind: edge.kind,
- label: `${fromLabel} ${edge.kind}${exportLabel} ${toLabel}`,
- locator: edge.locator,
- exportName: edge.exportName,
- fromNodeId: edge.fromNodeId,
- fromLabel: from?.label,
- fromQualifiedLabel: from?.qualifiedLabel,
- fromLocator: from?.locator,
- fromKind: from?.kind,
- fromSymbolKind: from?.symbolKind,
- toNodeId: edge.toNodeId,
- toLabel: to?.label,
- toQualifiedLabel: to?.qualifiedLabel,
- toLocator: to?.locator,
- toKind: to?.kind,
- toSymbolKind: to?.symbolKind,
- score,
- reasonCodes: sourceGraphSearchReasons({ score, pattern: null, locatorPrefix })
- });
- }
-
- const sorted = sourceGraphSearchDeduplicateResults(results.sort((a, b) => (
- b.score - a.score ||
- graphSearchPathPriority(a.locator) - graphSearchPathPriority(b.locator) ||
- a.resultType.localeCompare(b.resultType) ||
- a.id.localeCompare(b.id)
- )));
- const page = sorted.slice(boundedOffset, boundedOffset + boundedLimit);
- return Object.freeze({
- schemaVersion: '1.0.0',
- workspaceId: publicGraph.workspaceId,
- graphFingerprint: publicGraph.graphFingerprint,
- retrievalMethod: 'source_graph_lexical',
- queryFingerprint: hashRef(stableStringify({ query: queryText, nodeKinds: nodeKinds ?? [], edgeKinds: edgeKinds ?? [], labelPattern, locatorPrefix, limit: boundedLimit, offset: boundedOffset })),
- total: sorted.length,
- limit: boundedLimit,
- offset: boundedOffset,
- hasMore: boundedOffset + boundedLimit < sorted.length,
- omittedCount: Math.max(0, sorted.length - boundedOffset - page.length),
- results: page.map((item) => Object.freeze(withDefined({ ...item, score: Number(item.score.toFixed(6)) })))
- });
-}
-
-// Direct graph inputs remain available for local inspection, but each public
-// read surface consumes this projected envelope so unsafe metadata, labels, and
-// locators never leave a result array.
-export function sanitizeSourceGraphPublicOutput(graph) {
- assertSourceGraph(graph);
- const metadata = sourceGraphPublicMetadata(graph);
- if (!metadata.envelopeValid) {
- return Object.freeze({
- ...metadata,
- diagnosticsComplete: false,
- nodes: Object.freeze([]),
- edges: Object.freeze([]),
- diagnostics: Object.freeze([])
- });
- }
- const nodes = graph.nodes
- .map((node) => publicSourceGraphNode(node, { workspaceId: metadata.workspaceId }))
- .filter(Boolean);
- const nodeById = new Map(nodes.map((node) => [node.id, node]));
- const edges = graph.edges
- .map((edge) => publicSourceGraphEdge(edge, {
- workspaceId: metadata.workspaceId,
- from: nodeById.get(edge?.fromNodeId),
- to: nodeById.get(edge?.toNodeId)
- }))
- .filter(Boolean);
- const rawDiagnostics = Array.isArray(graph.diagnostics) ? graph.diagnostics : [];
- const diagnostics = rawDiagnostics.map(publicSourceGraphDiagnostic).filter(Boolean);
- return Object.freeze({
- ...metadata,
- diagnosticsComplete: Array.isArray(graph.diagnostics) && diagnostics.length === graph.diagnostics.length,
- nodes: Object.freeze(nodes),
- edges: Object.freeze(edges),
- diagnostics: Object.freeze(diagnostics)
- });
-}
-
-function sourceGraphPublicMetadata(graph) {
- const workspaceId = safeSourceGraphWorkspaceId(graph.workspaceId)
- ? graph.workspaceId
- : SOURCE_GRAPH_PUBLIC_FALLBACK_WORKSPACE_ID;
- const graphFingerprint = safeSourceGraphFingerprint(graph.graphFingerprint)
- ? graph.graphFingerprint
- : SOURCE_GRAPH_PUBLIC_FALLBACK_GRAPH_FINGERPRINT;
- const sourceIndexFingerprint = safeSourceGraphFingerprint(graph.sourceIndexFingerprint)
- ? graph.sourceIndexFingerprint
- : SOURCE_GRAPH_PUBLIC_FALLBACK_SOURCE_INDEX_FINGERPRINT;
- const graphVersion = safeSourceGraphVersion(graph.graphVersion)
- ? graph.graphVersion
- : SOURCE_GRAPH_PUBLIC_FALLBACK_GRAPH_VERSION;
- const parserVersion = safeSourceGraphVersion(graph.parserVersion)
- ? graph.parserVersion
- : SOURCE_GRAPH_PUBLIC_FALLBACK_PARSER_VERSION;
- const builtAt = safeSourceGraphTimestamp(graph.builtAt)
- ? graph.builtAt
- : SOURCE_GRAPH_PUBLIC_FALLBACK_BUILT_AT;
- const providedMetadataIsSafe = [
- [graph.workspaceId, safeSourceGraphWorkspaceId],
- [graph.graphFingerprint, safeSourceGraphFingerprint],
- [graph.sourceIndexFingerprint, safeSourceGraphFingerprint],
- [graph.graphVersion, safeSourceGraphVersion],
- [graph.parserVersion, safeSourceGraphVersion],
- [graph.builtAt, safeSourceGraphTimestamp]
- ].every(([value, validator]) => value === undefined || value === null || validator(value));
- const completeEnvelope = providedMetadataIsSafe
- && safeSourceGraphWorkspaceId(graph.workspaceId)
- && safeSourceGraphFingerprint(graph.graphFingerprint)
- && safeSourceGraphFingerprint(graph.sourceIndexFingerprint)
- && safeSourceGraphVersion(graph.graphVersion)
- && safeSourceGraphVersion(graph.parserVersion)
- && safeSourceGraphTimestamp(graph.builtAt);
- return Object.freeze({
- schemaVersion: '1.0.0',
- workspaceId,
- graphFingerprint,
- sourceIndexFingerprint,
- graphVersion,
- parserVersion,
- builtAt,
- envelopeValid: providedMetadataIsSafe,
- completeEnvelope
- });
-}
-
-function publicSourceGraphNode(node, { workspaceId }) {
- if (node?.workspaceId !== undefined && node?.workspaceId !== null && node.workspaceId !== workspaceId) return null;
- const projected = withDefined({
- id: node?.id,
- workspaceId: node?.workspaceId ?? workspaceId,
- kind: node?.kind,
- label: node?.label,
- qualifiedLabel: node?.qualifiedLabel,
- locator: node?.locator,
- sourceRef: node?.sourceRef,
- symbolKind: node?.symbolKind,
- scopeChain: Array.isArray(node?.scopeChain) ? Object.freeze([...node.scopeChain]) : node?.scopeChain,
- moduleHash: node?.moduleHash,
- contentHash: node?.contentHash,
- sourceSnapshotId: node?.sourceSnapshotId
- });
- return safeSourceGraphPublicNode(projected) ? Object.freeze(projected) : null;
-}
-
-function publicSourceGraphEdge(edge, { workspaceId, from, to }) {
- if (edge?.workspaceId !== undefined && edge?.workspaceId !== null && edge.workspaceId !== workspaceId) return null;
- const projected = withDefined({
- id: edge?.id,
- workspaceId: edge?.workspaceId ?? workspaceId,
- kind: edge?.kind,
- fromNodeId: edge?.fromNodeId,
- toNodeId: edge?.toNodeId,
- locator: edge?.locator,
- sourceRef: edge?.sourceRef,
- exportName: edge?.exportName,
- confidence: edge?.confidence
- });
- return safeSourceGraphPublicEdge(projected, { from, to }) ? Object.freeze(projected) : null;
-}
-
-function publicSourceGraphDiagnostic(diagnostic) {
- const projected = withDefined({
- locator: diagnostic?.locator,
- code: diagnostic?.code
- });
- return safeSourceGraphPublicDiagnostic(projected) ? Object.freeze(projected) : null;
-}
-
-function safeSourceGraphPublicNode(node) {
- return Boolean(node)
- && SOURCE_GRAPH_NODE_ID_RE.test(String(node.id ?? ''))
- && safeSourceGraphWorkspaceId(node.workspaceId)
- && SOURCE_GRAPH_NODE_KINDS.has(node.kind)
- && safeArchitectureLabel(node.label)
- && (node.qualifiedLabel === undefined || safeArchitectureLabel(node.qualifiedLabel))
- && (node.locator === undefined || safeArchitectureLocator(node.locator))
- && (node.sourceRef === undefined || safeSourceGraphSourceRef(node.sourceRef))
- && (node.symbolKind === undefined || SOURCE_GRAPH_SYMBOL_KINDS.has(node.symbolKind))
- && (node.scopeChain === undefined || (Array.isArray(node.scopeChain) && node.scopeChain.length <= 16 && node.scopeChain.every(safeArchitectureLabel)))
- && (node.moduleHash === undefined || safeSourceGraphFingerprint(node.moduleHash))
- && (node.contentHash === undefined || safeSourceGraphFingerprint(node.contentHash))
- && (node.sourceSnapshotId === undefined || SOURCE_GRAPH_SNAPSHOT_ID_RE.test(String(node.sourceSnapshotId)));
-}
-
-function safeSourceGraphPublicEdge(edge, { from, to }) {
- return Boolean(edge)
- && SOURCE_GRAPH_EDGE_ID_RE.test(String(edge.id ?? ''))
- && safeSourceGraphWorkspaceId(edge.workspaceId)
- && SOURCE_GRAPH_EDGE_KINDS.has(edge.kind)
- && SOURCE_GRAPH_NODE_ID_RE.test(String(edge.fromNodeId ?? ''))
- && SOURCE_GRAPH_NODE_ID_RE.test(String(edge.toNodeId ?? ''))
- && safeSourceGraphPublicNode(from)
- && safeSourceGraphPublicNode(to)
- && (edge.locator === undefined || safeArchitectureLocator(edge.locator))
- && (edge.sourceRef === undefined || safeSourceGraphSourceRef(edge.sourceRef))
- && (edge.exportName === undefined || safeArchitectureLabel(edge.exportName))
- && (edge.confidence === undefined || (Number.isFinite(edge.confidence) && edge.confidence >= 0 && edge.confidence <= 1));
-}
-
-function safeSourceGraphPublicDiagnostic(diagnostic) {
- return Boolean(diagnostic)
- && safeArchitectureLocator(diagnostic.locator)
- && SOURCE_GRAPH_DIAGNOSTIC_CODE_RE.test(String(diagnostic.code ?? ''));
-}
-
-function safeSourceGraphWorkspaceId(value) {
- return typeof value === 'string' && SOURCE_GRAPH_WORKSPACE_ID_RE.test(value);
-}
-
-function sourceGraphCandidateWorkspaceId(requestedWorkspaceId, configuredWorkspaceId) {
- const configured = safeSourceGraphWorkspaceId(configuredWorkspaceId)
- ? configuredWorkspaceId
- : SOURCE_GRAPH_PUBLIC_FALLBACK_WORKSPACE_ID;
- return safeSourceGraphWorkspaceId(requestedWorkspaceId) ? requestedWorkspaceId : configured;
-}
-
-function safeSourceGraphFingerprint(value) {
- return typeof value === 'string' && SOURCE_GRAPH_FINGERPRINT_RE.test(value);
-}
-
-function safeSourceGraphSourceRef(value) {
- return typeof value === 'string' && SOURCE_GRAPH_SOURCE_REF_RE.test(value);
-}
-
-function safeSourceGraphVersion(value) {
- return typeof value === 'string' && SOURCE_GRAPH_VERSION_RE.test(value);
-}
-
-function safeSourceGraphTimestamp(value) {
- return typeof value === 'string'
- && /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{3})?Z$/u.test(value)
- && !Number.isNaN(Date.parse(value));
-}
-
-function safeSourceGraphSearchNode(node) {
- return safeSourceGraphPublicNode(node);
-}
-
-function safeSourceGraphSearchEdge(edge, { from, to }) {
- return safeSourceGraphPublicEdge(edge, { from, to });
-}
-
-function sourceGraphSearchDeduplicateResults(results) {
- const byKey = new Map();
- const order = [];
- for (const item of results) {
- const key = sourceGraphSearchResultDedupeKey(item);
- if (!key) {
- order.push(item);
- continue;
- }
- const current = byKey.get(key);
- if (!current) {
- byKey.set(key, item);
- order.push(key);
- continue;
- }
- if (sourceGraphSearchResultSpecificity(item) > sourceGraphSearchResultSpecificity(current)) byKey.set(key, item);
- }
- return order.map((item) => typeof item === 'string' ? byKey.get(item) : item);
-}
-
-function sourceGraphSearchResultDedupeKey(item) {
- if (item?.resultType === 'node' && item.kind === 'symbol' && item.id) return `symbol:${item.id}`;
- if (item?.resultType !== 'edge' || item.kind !== 'exports' || !item.fromNodeId || !item.toNodeId) return null;
- if ((!item.exportName || item.exportName === item.toLabel) && sourceGraphSameLocatorFile(item.locator, item.toLocator)) return `symbol:${item.toNodeId}`;
- return `exports:${item.fromNodeId}:${item.toNodeId}:${item.exportName ?? ''}`;
-}
-
-function sourceGraphSameLocatorFile(left, right) {
- return Boolean(left && right && String(left).split('#')[0] === String(right).split('#')[0]);
-}
-
-function sourceGraphSearchResultSpecificity(item) {
- if (item?.resultType === 'node') return 2;
- return String(item?.locator ?? '').includes('#L') ? 1 : 0;
-}
-
-export function traceSourceGraph(graph, {
- startName = null,
- startNodeId = null,
- edgeKinds = ['calls'],
- locatorPrefix = null,
- direction = 'outbound',
- depth = 2,
- limit = 20
-} = {}) {
- assertSourceGraph(graph);
- const publicGraph = sanitizeSourceGraphPublicOutput(graph);
- const boundedDepth = boundedInteger(depth, 'source_graph_trace_depth', 1, 5);
- const boundedLimit = boundedInteger(limit, 'source_graph_trace_limit', 1, 100);
- if (!['outbound', 'inbound', 'both'].includes(direction)) throw new Error(`source_graph_trace_direction_invalid:${direction}`);
- const requestedLocatorPrefix = locatorPrefix ? String(locatorPrefix) : null;
- const safeLocatorPrefix = requestedLocatorPrefix && safeArchitectureLocator(requestedLocatorPrefix) ? requestedLocatorPrefix : null;
- const invalidLocatorPrefix = Boolean(requestedLocatorPrefix && !safeLocatorPrefix);
- const edgeKindSet = new Set((edgeKinds ?? ['calls']).filter((kind) => SOURCE_GRAPH_EDGE_KINDS.has(kind)));
- const nodeById = new Map(publicGraph.nodes.map((node) => [node.id, node]));
- const starts = invalidLocatorPrefix
- ? []
- : sourceGraphTraceStartNodes(publicGraph, nodeById, { startName, startNodeId, locatorPrefix: safeLocatorPrefix });
- const outgoing = new Map();
- const incoming = new Map();
- for (const edge of publicGraph.edges.filter((item) => edgeKindSet.has(item.kind)).sort((a, b) => a.id.localeCompare(b.id))) {
- const outValues = outgoing.get(edge.fromNodeId) ?? [];
- outValues.push(edge);
- outgoing.set(edge.fromNodeId, outValues);
- const inValues = incoming.get(edge.toNodeId) ?? [];
- inValues.push(edge);
- incoming.set(edge.toNodeId, inValues);
- }
- const queue = starts.map((node) => ({ nodeIds: [node.id], edgeIds: [], edgeKinds: [], edgeLocators: [], currentNodeId: node.id }));
- const paths = starts
- .filter((node) => !safeLocatorPrefix || (node.locator ?? '').startsWith(safeLocatorPrefix))
- .slice(0, boundedLimit)
- .map((node) => Object.freeze(withDefined({
- depth: 0,
- nodeIds: [node.id],
- edgeIds: [],
- edgeKinds: [],
- edgeLocators: [],
- terminalNodeId: node.id,
- terminalLabel: node.label,
- terminalQualifiedLabel: node.qualifiedLabel,
- terminalLocator: node.locator,
- terminalKind: node.kind,
- terminalSymbolKind: node.symbolKind,
- terminalScopeChain: node.scopeChain
- })));
- while (queue.length && paths.length < boundedLimit) {
- const item = queue.shift();
- if (item.edgeIds.length >= boundedDepth) continue;
- const nextEdges = [
- ...(['outbound', 'both'].includes(direction) ? (outgoing.get(item.currentNodeId) ?? []).map((edge) => ({ edge, nextNodeId: edge.toNodeId })) : []),
- ...(['inbound', 'both'].includes(direction) ? (incoming.get(item.currentNodeId) ?? []).map((edge) => ({ edge, nextNodeId: edge.fromNodeId })) : [])
- ].sort((a, b) => sourceGraphTraceNextPriority(a, nodeById) - sourceGraphTraceNextPriority(b, nodeById) || a.edge.id.localeCompare(b.edge.id));
- for (const { edge, nextNodeId } of nextEdges) {
- if (item.nodeIds.includes(nextNodeId)) continue;
- const nextPath = {
- nodeIds: [...item.nodeIds, nextNodeId],
- edgeIds: [...item.edgeIds, edge.id],
- edgeKinds: [...item.edgeKinds, edge.kind],
- edgeLocators: [...item.edgeLocators, edge.locator],
- currentNodeId: nextNodeId
- };
- const terminal = nodeById.get(nextNodeId);
- if (safeLocatorPrefix && !(terminal?.locator ?? '').startsWith(safeLocatorPrefix)) continue;
- paths.push(Object.freeze(withDefined({
- depth: nextPath.edgeIds.length,
- nodeIds: nextPath.nodeIds,
- edgeIds: nextPath.edgeIds,
- edgeKinds: nextPath.edgeKinds,
- edgeLocators: nextPath.edgeLocators,
- terminalNodeId: nextNodeId,
- terminalLabel: terminal?.label ?? nextNodeId,
- terminalQualifiedLabel: terminal?.qualifiedLabel,
- terminalLocator: terminal?.locator,
- terminalKind: terminal?.kind,
- terminalSymbolKind: terminal?.symbolKind,
- terminalScopeChain: terminal?.scopeChain
- })));
- if (paths.length >= boundedLimit) break;
- queue.push(nextPath);
- }
- }
- return Object.freeze({
- schemaVersion: '1.0.0',
- workspaceId: publicGraph.workspaceId,
- graphFingerprint: publicGraph.graphFingerprint,
- retrievalMethod: 'source_graph_trace',
- startNodeIds: starts.map((node) => node.id).sort(),
- direction,
- edgeKinds: [...edgeKindSet].sort(),
- depth: boundedDepth,
- limit: boundedLimit,
- paths
- });
-}
-
-function sourceGraphTraceNextPriority(item, nodeById) {
- const node = nodeById.get(item.nextNodeId);
- return graphSearchPathPriority(node?.locator ?? item.edge.locator);
-}
-
-function sourceGraphTraceStartNodes(graph, nodeById, { startName = null, startNodeId = null, locatorPrefix = null } = {}) {
- if (startNodeId) return graph.nodes.filter((node) => node.id === startNodeId);
- const startTag = safeTag(startName);
- if (!startTag) return [];
- const startsById = new Map();
- for (const node of graph.nodes) {
- if (node.kind === 'symbol' && (safeTag(node.label) === startTag || safeTag(node.qualifiedLabel) === startTag)) {
- startsById.set(node.id, node);
- }
- }
- for (const edge of graph.edges) {
- if (edge.kind !== 'exports' || safeTag(edge.exportName) !== startTag) continue;
- const target = nodeById.get(edge.toNodeId);
- if (target?.kind === 'symbol') startsById.set(target.id, target);
- }
- const ranked = [...startsById.values()]
- .filter((node) => !locatorPrefix || (node.locator ?? '').startsWith(locatorPrefix))
- .sort((a, b) => graphSearchPathPriority(a.locator) - graphSearchPathPriority(b.locator) || a.locator.localeCompare(b.locator) || a.id.localeCompare(b.id));
- const sourceRanked = locatorPrefix ? [] : ranked.filter((node) => graphSearchPathPriority(node.locator) <= 1);
- return sourceRanked.length ? sourceRanked : ranked;
-}
-
-export function mapSourceGraphDiffImpact(graph, { changedLocators = [], depth = 2, limit = 100 } = {}) {
- assertSourceGraph(graph);
- const publicGraph = sanitizeSourceGraphPublicOutput(graph);
- const boundedDepth = boundedInteger(depth, 'source_graph_diff_depth', 1, 5);
- const boundedLimit = boundedInteger(limit, 'source_graph_diff_limit', 1, 500);
- const changed = publicGraph.envelopeValid ? sourceGraphChangedLocatorSet(changedLocators) : new Set();
- const startNodes = publicGraph.nodes.filter((node) => node.kind === 'file' && changed.has(node.locator));
- const representedChangedLocators = startNodes.map((node) => node.locator).sort();
- const adjacency = new Map();
- const behaviorDegree = new Map(publicGraph.nodes.map((node) => [node.id, { inbound: 0, outbound: 0 }]));
- const exportedSymbolIds = new Set();
- for (const edge of publicGraph.edges) {
- if (edge.kind === 'exports') exportedSymbolIds.add(edge.toNodeId);
- if (edge.kind === 'calls' || edge.kind === 'references') {
- const from = behaviorDegree.get(edge.fromNodeId);
- const to = behaviorDegree.get(edge.toNodeId);
- if (from) from.outbound += 1;
- if (to) to.inbound += 1;
- }
- const fromValues = adjacency.get(edge.fromNodeId) ?? [];
- fromValues.push({ edge, nextNodeId: edge.toNodeId });
- adjacency.set(edge.fromNodeId, fromValues);
- const toValues = adjacency.get(edge.toNodeId) ?? [];
- toValues.push({ edge, nextNodeId: edge.fromNodeId });
- adjacency.set(edge.toNodeId, toValues);
- }
- const sameFileSymbolNodes = publicGraph.nodes
- .filter((node) => node.kind === 'symbol' && changed.has(fileLocatorFor(node.locator)))
- .sort((a, b) => sourceGraphImpactSymbolRank(b, behaviorDegree, exportedSymbolIds) - sourceGraphImpactSymbolRank(a, behaviorDegree, exportedSymbolIds) || a.label.localeCompare(b.label) || a.id.localeCompare(b.id));
- const seedNodes = (sameFileSymbolNodes.length ? sameFileSymbolNodes : startNodes).slice(0, boundedLimit);
- const nodeById = new Map(publicGraph.nodes.map((node) => [node.id, node]));
- const edgeById = new Map(publicGraph.edges.map((edge) => [edge.id, edge]));
- const impactedNodes = new Set(seedNodes.map((node) => node.id));
- const impactedEdges = new Set();
- const queue = seedNodes.filter((node) => impactedNodes.has(node.id)).map((node) => ({ nodeId: node.id, depth: 0 }));
- while (queue.length) {
- const item = queue.shift();
- if (item.depth >= boundedDepth) continue;
- for (const { edge, nextNodeId } of (adjacency.get(item.nodeId) ?? []).sort((a, b) => a.edge.id.localeCompare(b.edge.id))) {
- impactedEdges.add(edge.id);
- if (!impactedNodes.has(nextNodeId) && impactedNodes.size < boundedLimit) {
- impactedNodes.add(nextNodeId);
- queue.push({ nodeId: nextNodeId, depth: item.depth + 1 });
- }
- }
- }
- const affectedSymbols = [...impactedNodes]
- .map((id) => nodeById.get(id))
- .filter((node) => node?.kind === 'symbol')
- .sort((a, b) => sourceGraphImpactSymbolRank(b, behaviorDegree, exportedSymbolIds) - sourceGraphImpactSymbolRank(a, behaviorDegree, exportedSymbolIds) || a.label.localeCompare(b.label) || a.id.localeCompare(b.id))
- .map((node) => withDefined({ nodeId: node.id, name: node.label, qualifiedName: node.qualifiedLabel, locator: node.locator, symbolKind: node.symbolKind }));
- const impactedEdgeKindCounts = countBy([...impactedEdges].map((id) => edgeById.get(id)).filter(Boolean), (edge) => edge.kind);
- return Object.freeze({
- schemaVersion: '1.0.0',
- workspaceId: publicGraph.workspaceId,
- graphFingerprint: publicGraph.graphFingerprint,
- changedLocators: [...changed].sort(),
- representedChangedLocators,
- depth: boundedDepth,
- impactedNodeIds: [...impactedNodes].sort(),
- impactedEdgeIds: [...impactedEdges].sort(),
- impactedEdgeKindCounts,
- affectedSymbols
- });
-}
-
-function sourceGraphImpactSymbolRank(node, behaviorDegree, exportedSymbolIds) {
- const pathPriority = graphSearchPathPriority(node.locator);
- const counts = behaviorDegree.get(node.id) ?? { inbound: 0, outbound: 0 };
- const behaviorTotal = counts.inbound + counts.outbound;
- const scopeChain = Array.isArray(node.scopeChain) ? node.scopeChain.filter(Boolean) : [];
- let score = pathPriority === 1 ? 4 : pathPriority === 2 ? 2 : pathPriority === 3 ? -24 : -30;
- if (exportedSymbolIds.has(node.id)) score += ['type', 'interface'].includes(node.symbolKind) ? 16 : 40;
- if (!scopeChain.length) score += 18;
- else if (/^[A-Z]/u.test(scopeChain[0] ?? '')) score += 12;
- else score -= 8;
- if (node.qualifiedLabel) score += 6;
- if (node.symbolKind === 'class') score += 22;
- else if (['function', 'method'].includes(node.symbolKind)) score += 10;
- else if (['interface', 'type'].includes(node.symbolKind)) score += 2;
- if (highSignalReferenceName(node.label, [])) score += 4;
- else score -= 12;
- return score + (node.symbolKind === 'class' ? Math.min(40, counts.inbound) : Math.min(8, behaviorTotal));
-}
-
-export async function readAstCodeSlice({ root, chunk } = {}) {
- // Internal verification helper: provider query/protocol outputs expose only hashes and locators.
- if (typeof root !== 'string' || !root) throw new Error('root is required');
- if (!chunk?.locator || !chunk?.byteRange) throw new Error('chunk locator and byteRange are required');
- const rootReal = await realpath(root);
- const relativePath = relativeFromLocator(chunk.locator);
- const absolutePath = path.join(rootReal, relativePath);
- const fileReal = await realpath(absolutePath);
- if (!insideRoot(rootReal, fileReal)) throw new Error('ast_code_slice_outside_workspace');
- const buffer = await readFile(fileReal);
- return buffer.subarray(chunk.byteRange.start, chunk.byteRange.end).toString('utf8');
-}
-
-function chunksForFile({ relativePath, body, workspaceId, collectedAt }) {
- const language = languageFor(relativePath);
- const fileImports = importsFor(body).sort((a, b) => a.module.localeCompare(b.module));
- const lines = body.split('\n');
- const lineStartBytes = lineByteStarts(lines);
- const declarations = declarationsFor(lines, relativePath);
- const chunks = [];
- for (const declaration of declarations) {
- const endLine = declaration.endLine ?? declarationEndLineForDeclaration(lines, declaration);
- const sourceSlice = lines.slice(declaration.startLine, endLine + 1).join('\n');
- const parseErrorState = bracesBalanced(sourceSlice) ? 'none' : 'unbalanced_braces';
- const lineRange = { start: declaration.startLine + 1, end: endLine + 1 };
- const byteRange = {
- start: lineStartBytes[declaration.startLine],
- end: lineStartBytes[endLine] + Buffer.byteLength(lines[endLine] ?? '', 'utf8')
- };
- const entities = entitiesForDeclaration(declaration, sourceSlice);
- const signature = signatureFor(declaration, sourceSlice);
- const declarationCalls = declaration.kind === 'class' ? inheritanceCallsForDeclaration(declaration, sourceSlice, fileImports) : CALLABLE_DECLARATION_KINDS.has(declaration.kind) ? callsForDeclaration(declaration, sourceSlice, fileImports) : [];
- const calls = declarationCalls.map((call) => withDefined({ ...call, callHash: hashRef(`${relativePath}:${lineRange.start}:${call.receiver ? `${call.receiver}.` : ''}${call.name}`) }));
- const references = referencesForSource(sourceSlice).map((name) => ({ name, referenceHash: hashRef(`${relativePath}:${lineRange.start}:${name}`) }));
- const imports = declaration.kind === 'class' && !declarationCalls.length ? [] : importsForSlice(fileImports, sourceSlice).map(publicImport);
- const exports = declaration.exported ? [{ name: declaration.name, kind: declaration.kind, exportHash: hashRef(`${relativePath}:${declaration.name}:export`) }] : [];
- const chunk = {
- schemaVersion: '1.0.0',
- id: `astchunk_${sha256(`${relativePath}:${lineRange.start}:${lineRange.end}:${sourceSlice}`).slice(0, 32)}`,
- workspaceId,
- language,
- locator: `${locatorFor(relativePath)}#L${lineRange.start}-L${lineRange.end}`,
- parserVersion: AST_CODE_PARSER_VERSION,
- parseErrorState,
- byteRange,
- lineRange,
- scopeChain: declaration.scopeChain,
- entities,
- imports,
- exports,
- signatureHash: hashRef(signature),
- siblingLocators: [],
- sourceSnapshotId: `srcsnap_${sha256(`${relativePath}:${hashRef(body)}`).slice(0, 16)}`,
- exactSourceReconstructionHash: hashRef(sourceSlice),
- contentHash: hashRef(sourceSlice),
- calls,
- references,
- collectedAt
- };
- chunks.push(chunk);
- }
- return chunks.map((chunk, index) => {
- const siblingLocators = [chunks[index - 1]?.locator, chunks[index + 1]?.locator].filter(Boolean);
- const withSiblings = { ...chunk, siblingLocators };
- return Object.freeze({ ...withSiblings, chunkFingerprint: contentFingerprint(withSiblings) });
- });
-}
-
-function declarationsFor(lines, relativePath = '') {
- const declarations = [];
- const scopeStack = [];
- let braceDepth = 0;
- const defaultName = defaultExportName(relativePath);
- for (let index = 0; index < lines.length; index += 1) {
- const raw = lines[index];
- const trimmed = raw.trim();
- while (scopeStack.length && scopeEnded(scopeStack[scopeStack.length - 1], { index, braceDepth, raw, trimmed })) scopeStack.pop();
- const classMatch = trimmed.match(/^(?:export\s+)?(?:default\s+)?class\s+([A-Za-z_$][\w$]*)/u);
- const functionMatch = trimmed.match(/^(?:export\s+(?:default\s+)?)?(?:async\s+)?function\s+([A-Za-z_$][\w$]*)/u);
- const anonymousDefaultClassMatch = trimmed.match(/^export\s+default\s+class(?:\s+extends\b|\s*\{)/u);
- const anonymousDefaultFunctionMatch = trimmed.match(/^export\s+default\s+(?:async\s+)?function\s*\(/u);
- const defaultWrapperFunctionMatch = trimmed.match(/^export\s+default\s+(?:React\.)?(?:memo|forwardRef)\s*\(\s*(?:async\s+)?function(?:\s+([A-Za-z_$][\w$]*))?\s*\(/u);
- const defaultWrapperArrowMatch = trimmed.match(/^export\s+default\s+(?:React\.)?(?:memo|forwardRef)\s*\(\s*(?:async\s*)?(?:\([^)]*\)|[A-Za-z_$][\w$]*)(?:\s*:\s*[^=]+)?\s*=>/u);
- const anonymousDefaultArrowMatch = trimmed.match(/^export\s+default\s+(?:async\s*)?(?:\([^)]*\)|[A-Za-z_$][\w$]*)(?:\s*:\s*[^=]+)?\s*=>/u);
- const variableFunctionMatch = trimmed.match(/^(?:export\s+)?(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*(?::[^=]+)?=\s*(?:async\s+)?function(?:\s+[A-Za-z_$][\w$]*)?\s*\(/u);
- const arrowMatch = trimmed.match(/^(?:export\s+)?(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*(?::[^=]+)?=\s*(?:async\s*)?(?:\([^)]*\)|[A-Za-z_$][\w$]*)(?:\s*:\s*[^=]+)?\s*=>/u);
- const wrapperFunctionMatch = trimmed.match(/^(?:export\s+)?(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*(?::[^=]+)?=\s*(?:React\.)?(?:memo|forwardRef)\s*\(\s*(?:async\s+)?function(?:\s+[A-Za-z_$][\w$]*)?\s*\(/u);
- const arrowStartMatch = trimmed.match(/^(?:export\s+)?(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*(?::[^=]+)?=\s*(?:async\s*)?(?:\(\s*$|[A-Za-z_$][\w$]*(?:\s*:\s*[^=]+)?\s*$|$)/u);
- const objectScopeMatch = trimmed.match(/^(?:export\s+)?(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*(?::[^=]+)?=\s*\{\s*$/u);
- const defaultObjectScopeMatch = trimmed.match(/^export\s+default\s+\{\s*$/u);
- const commonJsObjectScopeMatch = trimmed.match(/^((?:module\.)?exports(?:\.[A-Za-z_$][\w$]*)?)\s*=\s*\{\s*$/u);
- const propertyObjectScopeMatch = scopeStack.length ? trimmed.match(/^([A-Za-z_$][\w$]*)\s*:\s*\{\s*$/u) : null;
- const interfaceMatch = trimmed.match(/^(?:export\s+)?interface\s+([A-Za-z_$][\w$]*)/u);
- const typeMatch = trimmed.match(/^(?:export\s+)?type\s+([A-Za-z_$][\w$]*)/u);
- const assignmentFunctionMatch = trimmed.match(/^(?:(?:module\.)?exports|[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)*)\.([A-Za-z_$][\w$]*)\s*=\s*(?:async\s*)?function(?:\s+([A-Za-z_$][\w$]*))?\s*\(/u);
- const assignmentArrowMatch = trimmed.match(/^(?:(?:module\.)?exports|[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)*)\.([A-Za-z_$][\w$]*)\s*=\s*(?:async\s*)?(?:\([^)]*\)|[A-Za-z_$][\w$]*)(?:\s*:\s*[^=]+)?\s*=>/u);
- const objectFunctionMatch = trimmed.match(/^([A-Za-z_$][\w$]*)\s*:\s*(?:async\s*)?function(?:\s+([A-Za-z_$][\w$]*))?\s*\(/u);
- const objectArrowMatch = trimmed.match(/^([A-Za-z_$][\w$]*)\s*:\s*(?:async\s*)?(?:\([^)]*\)|[A-Za-z_$][\w$]*)(?:\s*:\s*[^=]+)?\s*=>/u);
- const classFieldFunctionMatch = scopeStack.length ? trimmed.match(/^(?:(?:public|private|protected|readonly|override|static)\s+)*(#?[A-Za-z_$][\w$]*)\s*=\s*(?:async\s*)?function(?:\s+[A-Za-z_$][\w$]*)?\s*\(/u) : null;
- const classFieldArrowMatch = scopeStack.length ? trimmed.match(/^(?:(?:public|private|protected|readonly|override|static)\s+)*(#?[A-Za-z_$][\w$]*)\s*(?::[^=]+)?=\s*(?:async\s*)?(?:\([^)]*\)|[A-Za-z_$][\w$]*)(?:\s*:\s*[^=]+)?\s*=>/u) : null;
- const callableClassPropertyMatch = scopeStack.length ? trimmed.match(/^(?:(?:public|private|protected|readonly|override|static)\s+)*(#?[A-Za-z_$][\w$]*)!?\s*:\s*([^=;]+);?$/u) : null;
- const methodMatch = trimmed.match(/^(?:static\s+)?(?:(?:get|set)\s+)?(?:async\s+)?(#?[A-Za-z_$][\w$]*)\s*\([^)]*\)\s*(?::[^{]+)?\{/u);
- const exported = /^export\s+/u.test(trimmed);
- if (classMatch) {
- declarations.push({ kind: 'class', name: classMatch[1], startLine: index, scopeChain: scopeStack.map((item) => item.name), exported });
- scopeStack.push(classScope(classMatch[1], lines, index, braceDepth));
- } else if (functionMatch) {
- declarations.push({ kind: 'function', name: functionMatch[1], startLine: index, scopeChain: scopeStack.map((item) => item.name), exported });
- pushFunctionScope(scopeStack, functionMatch[1], lines, index);
- } else if (anonymousDefaultClassMatch) {
- declarations.push({ kind: 'class', name: defaultName, startLine: index, scopeChain: scopeStack.map((item) => item.name), exported: true });
- scopeStack.push(classScope(defaultName, lines, index, braceDepth));
- } else if (anonymousDefaultFunctionMatch) {
- declarations.push({ kind: 'function', name: defaultName, startLine: index, scopeChain: scopeStack.map((item) => item.name), exported: true });
- } else if (defaultWrapperFunctionMatch) {
- declarations.push({ kind: 'function', name: defaultWrapperFunctionMatch[1] ?? defaultName, startLine: index, scopeChain: scopeStack.map((item) => item.name), exported: true });
- } else if (defaultWrapperArrowMatch) {
- declarations.push({ kind: 'function', name: defaultName, startLine: index, scopeChain: scopeStack.map((item) => item.name), exported: true });
- } else if (anonymousDefaultArrowMatch) {
- declarations.push({ kind: 'function', name: defaultName, startLine: index, scopeChain: scopeStack.map((item) => item.name), exported: true });
- } else if (variableFunctionMatch) {
- declarations.push({ kind: 'function', name: variableFunctionMatch[1], startLine: index, scopeChain: scopeStack.map((item) => item.name), exported });
- pushFunctionScope(scopeStack, variableFunctionMatch[1], lines, index);
- } else if (wrapperFunctionMatch) {
- declarations.push({ kind: 'function', name: wrapperFunctionMatch[1], startLine: index, scopeChain: scopeStack.map((item) => item.name), exported });
- } else if (defaultObjectScopeMatch) {
- scopeStack.push({ name: defaultName, depth: braceDepth + Math.max(1, braceDelta(raw)) });
- } else if (commonJsObjectScopeMatch) {
- scopeStack.push({ name: commonJsObjectScopeMatch[1], depth: braceDepth + Math.max(1, braceDelta(raw)) });
- } else if (objectScopeMatch) {
- scopeStack.push({ name: objectScopeMatch[1], depth: braceDepth + Math.max(1, braceDelta(raw)) });
- } else if (propertyObjectScopeMatch) {
- scopeStack.push({ name: propertyObjectScopeMatch[1], depth: braceDepth + Math.max(1, braceDelta(raw)) });
- } else if (arrowMatch || (arrowStartMatch && arrowDeclarationHasArrow(lines, index))) {
- declarations.push({ kind: 'function', name: (arrowMatch ?? arrowStartMatch)[1], startLine: index, scopeChain: scopeStack.map((item) => item.name), exported });
- pushFunctionScope(scopeStack, (arrowMatch ?? arrowStartMatch)[1], lines, index);
- } else if (interfaceMatch) {
- declarations.push({ kind: 'interface', name: interfaceMatch[1], startLine: index, scopeChain: scopeStack.map((item) => item.name), exported });
- } else if (typeMatch) {
- declarations.push({ kind: 'type', name: typeMatch[1], startLine: index, scopeChain: scopeStack.map((item) => item.name), exported });
- } else if (assignmentFunctionMatch) {
- declarations.push({ kind: 'function', name: assignmentFunctionMatch[1] || assignmentFunctionMatch[2], startLine: index, scopeChain: assignmentScopeChain(trimmed) ?? scopeStack.map((item) => item.name), exported: assignmentExports(trimmed) });
- } else if (assignmentArrowMatch) {
- declarations.push({ kind: 'function', name: assignmentArrowMatch[1], startLine: index, scopeChain: assignmentScopeChain(trimmed) ?? scopeStack.map((item) => item.name), exported: assignmentExports(trimmed) });
- } else if (objectFunctionMatch) {
- declarations.push({ kind: 'method', name: objectFunctionMatch[1] || objectFunctionMatch[2], startLine: index, scopeChain: scopeStack.map((item) => item.name), exported: false });
- } else if (objectArrowMatch) {
- declarations.push({ kind: 'method', name: objectArrowMatch[1], startLine: index, scopeChain: scopeStack.map((item) => item.name), exported: false });
- } else if (classFieldFunctionMatch) {
- declarations.push({ kind: 'method', name: classFieldFunctionMatch[1], startLine: index, scopeChain: scopeStack.map((item) => item.name), exported: false });
- } else if (classFieldArrowMatch) {
- declarations.push({ kind: 'method', name: classFieldArrowMatch[1], startLine: index, scopeChain: scopeStack.map((item) => item.name), exported: false });
- } else if (callableClassPropertyMatch && callableClassPropertyType(callableClassPropertyMatch[2])) {
- declarations.push({ kind: 'method', name: callableClassPropertyMatch[1], startLine: index, endLine: index, scopeChain: scopeStack.map((item) => item.name), exported: false });
- } else if (methodMatch && !CONTROL_FLOW_NAMES.has(methodMatch[1])) {
- declarations.push({ kind: 'method', name: methodMatch[1], startLine: index, scopeChain: scopeStack.map((item) => item.name), exported: false });
- }
- braceDepth += braceDelta(raw);
- }
- return declarations;
-}
-
-function scopeEnded(scope, { index, braceDepth, raw, trimmed }) {
- if (Number.isInteger(scope.pendingUntil) && index <= scope.pendingUntil) return false;
- if (Number.isInteger(scope.indent)) return index > scope.startLine && trimmed && leadingWhitespace(raw) <= scope.indent;
- return braceDepth < scope.depth;
-}
-
-function classScope(name, lines, index, braceDepth) {
- const openLine = openingBraceLine(lines, index);
- return { name, depth: braceDepth + Math.max(1, braceDelta(lines[openLine] ?? lines[index] ?? '')), pendingUntil: openLine };
-}
-
-function openingBraceLine(lines, startLine) {
- const limit = Math.min(lines.length, startLine + 30);
- for (let index = startLine; index < limit; index += 1) {
- const line = String(lines[index] ?? '');
- if (braceDelta(line) > 0 || (index === startLine && line.includes('{'))) return index;
- }
- return startLine;
-}
-
-function pushFunctionScope(scopeStack, name, lines, index) {
- if (declarationEndLine(lines, index) > index) scopeStack.push({ name, startLine: index, indent: leadingWhitespace(lines[index] ?? '') });
-}
-
-function leadingWhitespace(value) {
- return String(value ?? '').match(/^\s*/u)?.[0]?.length ?? 0;
-}
-
-function callableClassPropertyType(typeText) {
- return /\b(?:HandlerInterface|MiddlewareHandlerInterface|OnHandlerInterface|GetPath|ErrorHandler|NotFoundHandler)\b/u.test(String(typeText ?? ''));
-}
-
-function defaultExportName(relativePath) {
- const withoutExtension = String(relativePath ?? '').replace(/\.[^.]+$/u, '');
- const parts = withoutExtension.split('/').filter(Boolean);
- const base = parts.at(-1) === 'index' ? parts.at(-2) : parts.at(-1);
- return `default-${safeTag(base ?? 'export').replace(/:/gu, '-')}`;
-}
-
-function arrowDeclarationHasArrow(lines, startLine) {
- const limit = Math.min(lines.length, startLine + 30);
- for (let index = startLine; index < limit; index += 1) {
- const line = stripStringsAndComments(lines[index]);
- if (line.includes('=>')) return true;
- if (/;\s*$/u.test(line.trim())) return false;
- }
- return false;
-}
-
-function assignmentExports(trimmed) {
- return /^(?:(?:module\.)?exports)\./u.test(String(trimmed ?? ''));
-}
-
-function assignmentScopeChain(trimmed) {
- const lhs = String(trimmed ?? '').split('=')[0]?.trim() ?? '';
- const parts = lhs.split('.').filter(Boolean);
- if (parts.length < 3 || parts[1] !== 'prototype') return null;
- return [`${parts[0]}.prototype`];
-}
-
-function entitiesForDeclaration(declaration, sourceSlice) {
- const entities = [{ kind: declaration.kind, name: declaration.name }];
- return Object.freeze(entities.sort((a, b) => a.kind.localeCompare(b.kind) || a.name.localeCompare(b.name)));
-}
-
-function declarationEndLineForDeclaration(lines, declaration) {
- if (['type', 'interface'].includes(declaration?.kind)) return typeLikeDeclarationEndLine(lines, declaration.startLine);
- return declarationEndLine(lines, declaration.startLine);
-}
-
-function typeLikeDeclarationEndLine(lines, startLine) {
- let depth = 0;
- let sawBrace = false;
- let lastContentLine = startLine;
- const state = { inBlockComment: false };
- for (let index = startLine; index < lines.length; index += 1) {
- const cleaned = stripDeclarationBoundaryCommentsAndStrings(lines[index], state);
- const trimmed = cleaned.trim();
- const delta = braceDeltaFromCleaned(cleaned);
- if (trimmed) lastContentLine = index;
- if (delta > 0 || (index === startLine && cleaned.includes('{'))) sawBrace = true;
- depth += delta;
- if (sawBrace && depth <= 0) return index;
- if (!sawBrace && /;\s*$/u.test(trimmed)) return index;
- if (!sawBrace && index === startLine && typeAliasLooksComplete(trimmed)) return index;
- if (!sawBrace && index > startLine && trimmed && !typeAliasContinuationLine(trimmed)) return Math.max(startLine, index - 1);
- if (!sawBrace && index > startLine && !trimmed && lastContentLine > startLine) return lastContentLine;
- }
- return lines.length - 1;
-}
-
-function typeAliasLooksComplete(trimmed) {
- return /^export\s+interface\b/u.test(trimmed)
- || (/^(?:export\s+)?type\b/u.test(trimmed) && /=/u.test(trimmed) && !/[=|&({,]\s*$/u.test(trimmed));
-}
-
-function typeAliasContinuationLine(trimmed) {
- return /^[|&})\],]/u.test(trimmed)
- || /^[A-Za-z_$][\w$]*\??\s*:/u.test(trimmed)
- || /^(?:readonly\s+)?[A-Za-z_$][\w$]*\s*\(/u.test(trimmed);
-}
-
-function stripDeclarationBoundaryCommentsAndStrings(text, state = { inBlockComment: false }) {
- const input = String(text ?? '');
- let output = '';
- for (let index = 0; index < input.length; index += 1) {
- const char = input[index];
- const next = input[index + 1];
- if (state.inBlockComment) {
- if (char === '*' && next === '/') {
- state.inBlockComment = false;
- index += 1;
- }
- continue;
- }
- if (char === '/' && next === '*') {
- state.inBlockComment = true;
- index += 1;
- continue;
- }
- if (char === '/' && next === '/') break;
- if (char === '\'' || char === '"' || char === '`') {
- const quote = char;
- index += 1;
- while (index < input.length) {
- if (input[index] === '\\') {
- index += 2;
- continue;
- }
- if (input[index] === quote) break;
- index += 1;
- }
- continue;
- }
- output += char;
- }
- return output;
-}
-
-function braceDeltaFromCleaned(text) {
- let delta = 0;
- for (const char of String(text ?? '')) {
- if (char === '{') delta += 1;
- else if (char === '}') delta -= 1;
- }
- return delta;
-}
-
-function declarationEndLine(lines, startLine) {
- let depth = 0;
- let sawBrace = false;
- for (let index = startLine; index < lines.length; index += 1) {
- const delta = braceDelta(lines[index]);
- if (delta > 0 || (index === startLine && lines[index].includes('{'))) sawBrace = true;
- depth += delta;
- if (sawBrace && depth <= 0) return index;
- if (!sawBrace && /;\s*$/u.test(lines[index].trim())) return index;
- }
- return lines.length - 1;
-}
-
-function importsFor(body) {
- const imports = [];
- for (const match of String(body ?? '').matchAll(/^\s*import(?!\s*['"])(?:\s+type)?\s+([\s\S]*?)\s+from\s+['"]([^'"]+)['"]/gmu)) {
- const rawModule = match[2];
- const module = sanitizeModuleSpecifier(rawModule);
- imports.push({
- module,
- rawModule,
- syntax: 'static',
- importHash: hashRef(rawModule),
- names: importedNames(match[1]),
- namespace: namespaceImportedName(match[1]),
- aliases: { ...importedAliases(match[1]), ...defaultImportedAliases(match[1], rawModule) }
- });
- }
- for (const line of body.split('\n')) {
- const trimmedLine = line.trim();
- const bareMatch = line.match(/^\s*import\s+['"]([^'"]+)['"]/u);
- const dynamicImportMatch = /^(?:\/[/*]|\*)/u.test(trimmedLine) ? null : line.match(/\bimport\(\s*['"]([^'"]+)['"]\s*\)/u);
- const requireMatch = line.match(/require\(\s*['"]([^'"]+)['"]\s*\)/u);
- const requireBinding = line.match(/\b(?:const|let|var)\s+(.+?)\s*=\s*require\(/u)?.[1]?.trim() ?? null;
- const requireName = requireBinding?.match(/^[A-Za-z_$][\w$]*$/u)?.[0] ?? null;
- const rawModule = bareMatch?.[1] ?? dynamicImportMatch?.[1] ?? requireMatch?.[1] ?? null;
- if (rawModule) {
- const module = sanitizeModuleSpecifier(rawModule);
- imports.push({
- module,
- rawModule,
- syntax: dynamicImportMatch ? 'dynamic' : requireMatch ? 'require' : 'static',
- importHash: hashRef(rawModule),
- names: requireName ? [requireName] : importedRequireNames(requireBinding),
- aliases: importedRequireAliases(requireBinding)
- });
- }
- }
- return mergeImports(imports);
-}
-
-function mergeImports(imports) {
- const byKey = new Map();
- for (const item of imports) {
- const key = `${item.syntax}:${item.module}`;
- const existing = byKey.get(key);
- byKey.set(key, existing ? {
- ...existing,
- names: [...new Set([...(existing.names ?? []), ...(item.names ?? [])])].sort(),
- namespace: existing.namespace ?? item.namespace,
- aliases: { ...(existing.aliases ?? {}), ...(item.aliases ?? {}) }
- } : item);
- }
- return [...byKey.values()];
-}
-
-function fileOutlineFor({ relativePath, body, workspaceId, collectedAt, chunks }) {
- const imports = importsFor(body).sort((a, b) => a.module.localeCompare(b.module));
- const exports = exportsFor({ body, chunks }).sort((a, b) => a.name.localeCompare(b.name));
- const contentHash = hashRef(body);
- const outline = {
- schemaVersion: '1.0.0',
- workspaceId,
- locator: locatorFor(relativePath),
- language: languageFor(relativePath),
- contentHash,
- sourceSnapshotId: `srcsnap_${sha256(`${relativePath}:${contentHash}`).slice(0, 16)}`,
- lineCount: body.split('\n').length,
- chunkIds: chunks.map((chunk) => chunk.id).sort(),
- symbols: chunks.flatMap((chunk) => chunk.entities.map((entity) => ({
- name: entity.name,
- kind: entity.kind,
- locator: chunk.locator,
- signatureHash: chunk.signatureHash
- }))).sort((a, b) => a.name.localeCompare(b.name) || a.kind.localeCompare(b.kind)),
- imports: imports.map(publicImport),
- exports,
- collectedAt
- };
- return Object.freeze({ ...outline, symbolFingerprint: contentFingerprint(outline) });
-}
-
-function repositoryOutlineFor({ workspaceId, fileOutlines, symbolIndex }) {
- const outline = {
- schemaVersion: '1.0.0',
- workspaceId,
- fileCount: fileOutlines.length,
- symbolCount: symbolIndex.symbols.length,
- importCount: symbolIndex.imports.length,
- exportCount: symbolIndex.exports.length,
- callEdgeCount: symbolIndex.callEdges.length,
- locators: fileOutlines.map((file) => file.locator).sort(),
- languages: [...new Set(fileOutlines.map((file) => file.language))].sort()
- };
- return Object.freeze({ ...outline, outlineFingerprint: hashRef(stableStringify(outline)) });
-}
-
-function buildSymbolIndex({ workspaceId, chunks, fileOutlines, indexedAt }) {
- const symbols = [];
- const imports = [];
- const exports = [];
- const references = [];
- const callEdges = [];
- const symbolsByName = new Map();
- const symbolsByChunkId = new Map();
- const knownFileLocators = new Set(fileOutlines.map((file) => file.locator));
- for (const chunk of chunks) {
- for (const entity of chunk.entities) {
- const symbol = {
- id: `symbol_${sha256(`${chunk.locator}:${entity.kind}:${entity.name}`).slice(0, 32)}`,
- workspaceId,
- name: entity.name,
- kind: entity.kind,
- locator: chunk.locator,
- chunkId: chunk.id,
- scopeChain: chunk.scopeChain,
- signatureHash: chunk.signatureHash,
- contentHash: chunk.contentHash,
- sourceSnapshotId: chunk.sourceSnapshotId
- };
- symbols.push(symbol);
- const values = symbolsByName.get(entity.name) ?? [];
- values.push(symbol);
- symbolsByName.set(entity.name, values);
- const chunkValues = symbolsByChunkId.get(chunk.id) ?? [];
- chunkValues.push(symbol);
- symbolsByChunkId.set(chunk.id, chunkValues);
- }
- for (const item of chunk.imports) imports.push({
- id: `import_${sha256(`${chunk.locator}:${item.module}`).slice(0, 32)}`,
- workspaceId,
- module: item.module,
- moduleHash: item.importHash,
- locator: chunk.locator,
- chunkId: chunk.id
- });
- for (const item of chunk.exports ?? []) {
- exports.push({
- id: `export_${sha256(`${chunk.locator}:${item.name}`).slice(0, 32)}`,
- workspaceId,
- name: item.name,
- kind: item.kind,
- locator: chunk.locator,
- chunkId: chunk.id,
- exportHash: item.exportHash
- });
- }
- }
- const defaultExportTargetByFileLocator = defaultExportTargetsForFiles(fileOutlines, symbols);
- const fileOutlineByLocator = new Map(fileOutlines.map((file) => [file.locator, file]));
- for (const file of fileOutlines) {
- for (const item of file.exports ?? []) {
- const reExportFileLocator = item.module ? resolveImportFileLocator(file.locator, item.module, knownFileLocators) : null;
- if (item.namespace && reExportFileLocator) {
- const target = symbols.find((symbol) => fileLocatorFor(symbol.locator) === reExportFileLocator);
- const chunkId = target?.chunkId ?? file.chunkIds?.[0];
- if (!chunkId) continue;
- exports.push({
- id: `export_${sha256(`${file.locator}:namespace:${item.name}:${target?.id ?? chunkId}`).slice(0, 32)}`,
- workspaceId,
- name: item.name,
- kind: item.kind,
- locator: file.locator,
- chunkId,
- exportHash: item.exportHash
- });
- continue;
- }
- if (item.star && reExportFileLocator) {
- for (const target of symbols.filter((symbol) => fileLocatorFor(symbol.locator) === reExportFileLocator)) {
- exports.push({
- id: `export_${sha256(`${file.locator}:star:${target.id}`).slice(0, 32)}`,
- workspaceId,
- name: target.name,
- kind: target.kind,
- locator: file.locator,
- chunkId: target.chunkId,
- exportHash: item.exportHash
- });
- }
- continue;
- }
- const targetName = reExportFileLocator && item.targetName === 'default'
- ? defaultExportTargetByFileLocator.get(reExportFileLocator) ?? defaultExportName(relativeFromLocator(reExportFileLocator))
- : item.targetName ?? item.name;
- const target = symbols.find((symbol) => symbol.name === targetName && fileLocatorFor(symbol.locator) === (reExportFileLocator ?? file.locator));
- const chunkId = target?.chunkId ?? file.chunkIds?.[0];
- if (!chunkId) continue;
- exports.push({
- id: `export_${sha256(`${file.locator}:${item.name}:${targetName}:${target?.id ?? chunkId}`).slice(0, 32)}`,
- workspaceId,
- name: item.name,
- kind: target?.kind ?? item.kind,
- locator: file.locator,
- chunkId,
- exportHash: item.exportHash
- });
- }
- }
- const exportsByFileAndName = exportsByFileName(exports);
-
- for (const chunk of chunks) {
- const caller = chunk.entities.find((entity) => entity.kind === 'class') ?? chunk.entities.find((entity) => ['function', 'method'].includes(entity.kind)) ?? chunk.entities[0];
- let referenceEdgesForChunk = 0;
- for (const reference of (chunk.references ?? []).slice(0, MAX_REFERENCES_PER_CHUNK)) {
- if (referenceEdgesForChunk >= MAX_REFERENCE_EDGES_PER_CHUNK) break;
- const targets = symbolsByName.get(reference.name) ?? [];
- if (!targets.length || !highSignalReferenceName(reference.name, targets)) continue;
- for (const target of targets.slice(0, MAX_TARGETS_PER_SYMBOL_NAME)) {
- if (referenceEdgesForChunk >= MAX_REFERENCE_EDGES_PER_CHUNK) break;
- if (target.chunkId === chunk.id && target.name === caller?.name) continue;
- references.push({
- id: `ref_${sha256(`${chunk.locator}:${reference.name}:${target.id}`).slice(0, 32)}`,
- workspaceId,
- targetSymbolId: target.id,
- targetName: target.name,
- sourceLocator: chunk.locator,
- sourceChunkId: chunk.id,
- referenceHash: reference.referenceHash
- });
- referenceEdgesForChunk += 1;
- }
- }
- if (!caller) continue;
- const callerSymbol = symbols.find((symbol) => symbol.chunkId === chunk.id && symbol.name === caller.name);
- if (!callerSymbol) continue;
- const importedFileLocators = new Set((chunk.imports ?? [])
- .map((item) => resolveImportFileLocator(chunk.locator, item.module, knownFileLocators))
- .filter(Boolean));
- for (const item of chunk.imports ?? []) {
- const fileLocator = resolveImportFileLocator(chunk.locator, item.module, knownFileLocators);
- if (!fileLocator) continue;
- for (const exported of exports.filter((candidate) => fileLocatorFor(candidate.locator) === fileLocator)) {
- const targetSymbol = symbolsByChunkId.get(exported.chunkId)?.[0];
- if (targetSymbol) importedFileLocators.add(fileLocatorFor(targetSymbol.locator));
- }
- }
- let callEdgesForChunk = 0;
- for (const call of (chunk.calls ?? []).slice(0, MAX_CALLS_PER_CHUNK)) {
- if (callEdgesForChunk >= MAX_CALL_EDGES_PER_CHUNK) break;
- const namedImportTargets = importedNamedCallTargets(call, { chunk, knownFileLocators, exportsByFileAndName, symbolsByChunkId, fileOutlineByLocator }) ?? [];
- const defaultImportTargets = namedImportTargets.length ? [] : importedDefaultCallTargets(call.name, { importedFileLocators, defaultExportTargetByFileLocator, symbolsByName });
- const importedTargets = namedImportTargets.length ? namedImportTargets : defaultImportTargets;
- const fallbackTargets = symbolsByName.get(call.name) ?? [];
- const matchingSymbols = importedTargets?.length
- ? importedTargets
- : LOW_SIGNAL_REFERENCE_NAMES.has(call.name) ? [] : fallbackTargets;
- if (!matchingSymbols.length) continue;
- const targets = prioritizeCallTargets(matchingSymbols, { sourceLocator: chunk.locator, importedFileLocators });
- for (const callee of targets.slice(0, MAX_TARGETS_PER_SYMBOL_NAME)) {
- if (callEdgesForChunk >= MAX_CALL_EDGES_PER_CHUNK) break;
- if (callee.id === callerSymbol.id) continue;
- callEdges.push({
- id: `call_${sha256(`${callerSymbol.id}:${callee.id}:${chunk.locator}`).slice(0, 32)}`,
- workspaceId,
- callerSymbolId: callerSymbol.id,
- callerName: callerSymbol.name,
- calleeSymbolId: callee.id,
- calleeName: callee.name,
- sourceLocator: chunk.locator,
- callHash: call.callHash
- });
- callEdgesForChunk += 1;
- }
- }
- }
-
- const index = {
- schemaVersion: '1.0.0',
- workspaceId,
- parserVersion: AST_CODE_PARSER_VERSION,
- indexedAt,
- symbols: uniqueObjects(symbols, 'id').sort(byId),
- references: uniqueObjects(references, 'id').sort(byId),
- imports: uniqueObjects(imports, 'id').sort(byId),
- exports: uniqueObjects(exports, 'id').sort(byId),
- callEdges: uniqueObjects(callEdges, 'id').sort(byId),
- fileLocators: fileOutlines.map((file) => file.locator).sort()
- };
- return Object.freeze({ ...index, symbolIndexFingerprint: contentFingerprint(index) });
-}
-
-function prioritizeCallTargets(targets = [], { sourceLocator, importedFileLocators }) {
- const sourceFile = fileLocatorFor(sourceLocator);
- const sourcePathPriority = graphSearchPathPriority(sourceLocator);
- const sorted = [...targets].sort((left, right) => (
- callTargetRank(left, sourceFile, importedFileLocators) - callTargetRank(right, sourceFile, importedFileLocators) ||
- left.locator.localeCompare(right.locator) ||
- left.id.localeCompare(right.id)
- ));
- const bestRank = sorted.length ? callTargetRank(sorted[0], sourceFile, importedFileLocators) : 0;
- const bestPriority = sorted.length ? callTargetPriority(sorted[0], sourceFile, importedFileLocators) : 0;
- const bestPathPriority = sorted.length ? graphSearchPathPriority(sorted[0].locator) : 0;
- if (sourcePathPriority === 1 && bestPriority === 2 && bestPathPriority >= 3) return [];
- return sorted.filter((target) => callTargetRank(target, sourceFile, importedFileLocators) === bestRank);
-}
-
-function callTargetRank(symbol, sourceFile, importedFileLocators) {
- return (callTargetPriority(symbol, sourceFile, importedFileLocators) * 10) + graphSearchPathPriority(symbol.locator);
-}
-
-function callTargetPriority(symbol, sourceFile, importedFileLocators) {
- const targetFile = fileLocatorFor(symbol.locator);
- if (targetFile === sourceFile) return 0;
- if (importedFileLocators?.has(targetFile)) return 1;
- return 2;
-}
-
-function qualifiedSymbolLabel(name, scopeChain = []) {
- const scope = Array.isArray(scopeChain) ? scopeChain.filter(Boolean).join('.') : '';
- return scope ? `${scope}.${name}` : undefined;
-}
-
-function highSignalReferenceName(name, targets = []) {
- const normalized = String(name ?? '');
- if (!normalized || JS_KEYWORDS.has(normalized) || LOW_SIGNAL_REFERENCE_NAMES.has(normalized)) return false;
- if (/^[a-z_$]{1,3}$/u.test(normalized)) return false;
- if (targets.length > MAX_REFERENCE_TARGETS_FOR_COMMON_NAME && !/[A-Z]/u.test(normalized) && normalized.length < 12) return false;
- return true;
-}
-
-function defaultExportTargetsForFiles(fileOutlines, symbols) {
- const symbolsByFileAndName = new Set(symbols.map((symbol) => `${fileLocatorFor(symbol.locator)}:${symbol.name}`));
- return new Map(fileOutlines.map((file) => {
- const explicit = file.exports?.find((item) => item.name === 'default' && item.targetName)?.targetName;
- const fallback = defaultExportName(relativeFromLocator(file.locator));
- const targetName = explicit ?? (symbolsByFileAndName.has(`${file.locator}:${fallback}`) ? fallback : null);
- return targetName ? [file.locator, targetName] : null;
- }).filter(Boolean));
-}
-
-function importedDefaultCallTargets(callName, { importedFileLocators, defaultExportTargetByFileLocator, symbolsByName }) {
- if (!String(callName ?? '').startsWith('default-')) return [];
- const targets = [];
- for (const fileLocator of importedFileLocators ?? []) {
- if (defaultExportName(relativeFromLocator(fileLocator)) !== callName) continue;
- const targetName = defaultExportTargetByFileLocator.get(fileLocator);
- targets.push(...(symbolsByName.get(targetName) ?? []).filter((symbol) => fileLocatorFor(symbol.locator) === fileLocator));
- }
- return targets;
-}
-
-function importedNamedCallTargets(call, { chunk, knownFileLocators, exportsByFileAndName, symbolsByChunkId, fileOutlineByLocator }) {
- const targets = [];
- for (const item of chunk.imports ?? []) {
- const fileLocator = resolveImportFileLocator(chunk.locator, item.module, knownFileLocators);
- if (!fileLocator) continue;
- if (call.receiver && call.receiver !== item.namespace) {
- const importedReceiver = item.aliases?.[call.receiver] ?? call.receiver;
- if (!item.names?.includes(call.receiver) && !Object.values(item.aliases ?? {}).includes(call.receiver)) continue;
- const namespaceExport = fileOutlineByLocator.get(fileLocator)?.exports?.find((candidate) => candidate.namespace && candidate.name === importedReceiver);
- const namespaceFileLocator = namespaceExport?.module ? resolveImportFileLocator(fileLocator, namespaceExport.module, knownFileLocators) : null;
- const exported = namespaceFileLocator ? exportsByFileAndName.get(`${namespaceFileLocator}:${call.name}`) : null;
- if (exported?.chunkId) targets.push(...(symbolsByChunkId.get(exported.chunkId) ?? []));
- continue;
- }
- const importedName = call.receiver === item.namespace ? call.name : item.aliases?.[call.name] ?? call.name;
- if (!call.receiver && !item.names?.includes(call.name) && !Object.values(item.aliases ?? {}).includes(call.name) && importedName === call.name && !item.names?.includes(importedName)) continue;
- const exported = fileLocator ? exportsByFileAndName.get(`${fileLocator}:${importedName}`) : null;
- if (exported?.chunkId) targets.push(...(symbolsByChunkId.get(exported.chunkId) ?? []));
- }
- return targets.length ? targets : null;
-}
-
-function exportsByFileName(exports) {
- const output = new Map();
- for (const item of exports) output.set(`${fileLocatorFor(item.locator)}:${item.name}`, item);
- return output;
-}
-
-function exportsFor({ body, chunks }) {
- const output = [];
- for (const chunk of chunks) output.push(...(chunk.exports ?? []));
- for (const match of body.matchAll(/^\s*export\s+\{([^}]+)\}(?:\s+from\s+['"]([^'"]+)['"])?/gmu)) {
- const module = match[2] ? sanitizeModuleSpecifier(match[2]) : null;
- for (const item of namedExportItems(match[1])) {
- output.push({
- name: item.name,
- kind: 'export',
- exportHash: hashRef(`${module ? 're-export' : 'export'}:${item.targetName}:${item.name}:${module ?? ''}`),
- targetName: item.targetName,
- ...(module ? { module } : {})
- });
- }
- }
- for (const match of body.matchAll(/^\s*export\s+\*\s+as\s+([A-Za-z_$][\w$]*)\s+from\s+['"]([^'"]+)['"]/gmu)) {
- const module = sanitizeModuleSpecifier(match[2]);
- output.push({ name: match[1], kind: 'export', module, namespace: true, exportHash: hashRef(`re-export-namespace:${match[1]}:${module}`) });
- }
- for (const match of body.matchAll(/^\s*export\s+default\s+([A-Za-z_$][\w$]*)\s*;?\s*$/gmu)) {
- output.push({ name: 'default', kind: 'export', targetName: match[1], exportHash: hashRef(`default-export:${match[1]}`) });
- }
- for (const match of body.matchAll(/^\s*export\s+default\s+(?:async\s+)?function\s+([A-Za-z_$][\w$]*)/gmu)) {
- output.push({ name: 'default', kind: 'export', targetName: match[1], exportHash: hashRef(`default-export:${match[1]}`) });
- }
- for (const match of body.matchAll(/^\s*export\s+default\s+class\s+([A-Za-z_$][\w$]*)/gmu)) {
- output.push({ name: 'default', kind: 'export', targetName: match[1], exportHash: hashRef(`default-export:${match[1]}`) });
- }
- for (const match of body.matchAll(/^\s*export\s+\*\s+from\s+['"]([^'"]+)['"]/gmu)) {
- const module = sanitizeModuleSpecifier(match[1]);
- output.push({ name: '*', kind: 'export', module, star: true, exportHash: hashRef(`re-export-star:${module}`) });
- }
- for (const match of body.matchAll(/^\s*module\.exports\.([A-Za-z_$][\w$]*)\s*=/gmu)) {
- output.push({ name: match[1], kind: 'export', exportHash: hashRef(`commonjs:${match[1]}`) });
- }
- for (const match of body.matchAll(/^\s*module\.exports\s*=\s*(?:async\s*)?function\s+([A-Za-z_$][\w$]*)\s*\(/gmu)) {
- output.push({ name: match[1], kind: 'export', exportHash: hashRef(`commonjs:${match[1]}`) });
- }
- for (const match of body.matchAll(/^\s*module\.exports\s*=\s*([A-Za-z_$][\w$]*)\s*;?\s*$/gmu)) {
- output.push({ name: match[1], kind: 'export', exportHash: hashRef(`commonjs:${match[1]}`) });
- }
- for (const match of body.matchAll(/^\s*module\.exports\s*=\s*\{([\s\S]*?)^\s*\}/gmu)) {
- for (const value of commonJsObjectExportNames(match[1])) {
- output.push({ name: value, kind: 'export', exportHash: hashRef(`commonjs:${value}`) });
- }
- }
- return uniqueBy(output, (item) => `${item.kind}:${item.name}`);
-}
-
-function namedExportItems(body) {
- return String(body ?? '').split(',').map((value) => {
- const [targetName, exportedName] = value.trim().split(/\s+as\s+/u).map((item) => item?.trim()).filter(Boolean);
- if (!targetName || !/^[A-Za-z_$][\w$]*$/u.test(targetName)) return null;
- const name = exportedName && /^[A-Za-z_$][\w$]*$/u.test(exportedName) ? exportedName : targetName;
- return { name, targetName };
- }).filter(Boolean);
-}
-
-function commonJsObjectExportNames(body) {
- const names = [];
- for (const line of String(body ?? '').split('\n')) {
- const cleaned = stripStringsAndComments(line).trim().replace(/,$/u, '');
- if (!cleaned || cleaned.includes('{') || cleaned.includes('}')) continue;
- const name = (
- cleaned.match(/^([A-Za-z_$][\w$]*)$/u) ??
- cleaned.match(/^([A-Za-z_$][\w$]*)\s*\(/u) ??
- cleaned.match(/^([A-Za-z_$][\w$]*)\s*:\s*(?:async\s*)?(?:function\b|\([^)]*\)\s*=>|[A-Za-z_$][\w$]*\s*=>)/u) ??
- cleaned.match(/^[A-Za-z_$][\w$]*\s*:\s*([A-Za-z_$][\w$]*)$/u)
- )?.[1];
- if (name) names.push(name);
- }
- return [...new Set(names)].sort();
-}
-
-function signatureFor(declaration, sourceSlice) {
- const line = sourceSlice.split('\n')[0] ?? declaration.name;
- return stripStringsAndComments(line).replace(/\{.*$/u, '').replace(/\s+/gu, ' ').trim().slice(0, 240);
-}
-
-function referencesForSource(sourceSlice) {
- const names = [];
- for (const match of stripStringsAndComments(sourceSlice).matchAll(/\b[A-Za-z_$][\w$]*\b/gu)) {
- if (!JS_KEYWORDS.has(match[0])) names.push(match[0]);
- }
- return [...new Set(names)].sort();
-}
-
-function callsForDeclaration(declaration, sourceSlice, imports = []) {
- const calls = callsForSource(sourceSlice).filter((call) => call.name !== declaration.name);
- return expandCallAliases(calls, imports);
-}
-
-function inheritanceCallsForDeclaration(declaration, sourceSlice, imports = []) {
- const calls = [];
- const stripped = stripStringsAndComments(sourceSlice);
- const match = stripped.match(/\bclass\s+[A-Za-z_$][\w$]*\s+extends\s+([A-Za-z_$][\w$]*)(?:\s*\.\s*([A-Za-z_$][\w$]*))?/u);
- if (match) calls.push(match[2] ? { receiver: match[1], name: match[2] } : { name: match[1] });
- const implementsMatch = stripped.match(/\bimplements\s+([^{]+)/u);
- for (const item of implementsMatch?.[1]?.split(',') ?? []) {
- const value = item.trim().match(/^([A-Za-z_$][\w$]*)(?:\s*\.\s*([A-Za-z_$][\w$]*))?/u);
- if (value) calls.push(value[2] ? { receiver: value[1], name: value[2] } : { name: value[1] });
- }
- return expandCallAliases(calls.filter((call) => call.name !== declaration.name), imports);
-}
-
-function expandCallAliases(calls, imports = []) {
- const aliases = new Map(imports.flatMap((item) => Object.entries(item.aliases ?? {})));
- return uniqueBy(calls.flatMap((call) => {
- const original = call.receiver ? null : aliases.get(call.name);
- return original && original !== call.name ? [call, { name: original }] : [call];
- }), (call) => `${call.receiver ?? ''}:${call.name}`).sort((a, b) => a.name.localeCompare(b.name) || String(a.receiver ?? '').localeCompare(String(b.receiver ?? '')));
-}
-
-function callsForSource(sourceSlice) {
- const calls = [];
- const stripped = stripStringsAndComments(sourceSlice);
- for (const match of stripped.matchAll(/\b([A-Za-z_$][\w$]*)\s*\(/gu)) {
- if (previousNonWhitespace(stripped, match.index) === '.') continue;
- if (!JS_KEYWORDS.has(match[1])) calls.push({ name: match[1] });
- }
- for (const match of stripped.matchAll(/\b([A-Za-z_$][\w$]*)\s*\.\s*(#?[A-Za-z_$][\w$]*)\s*\(/gu)) {
- if (!WEAK_MEMBER_CALL_NAMES.has(match[2])) calls.push({ receiver: match[1], name: match[2] });
- }
- for (const call of callbackReferencesForSource(stripped)) {
- calls.push(call);
- }
- for (const match of stripped.matchAll(/\b(?:[A-Za-z_$][\w$]*\s*\.\s*)?createElement\s*\(\s*([A-Z][\w$]*)(?:\s*\.\s*([A-Z][\w$]*))?/gu)) {
- calls.push(match[2] ? { receiver: match[1], name: match[2] } : { name: match[1] });
- }
- for (const match of stripped.matchAll(/<\s*([A-Z][\w$]*)\.([A-Z][\w$]*)(?=[\s/>])/gu)) {
- calls.push({ receiver: match[1], name: match[2] });
- }
- for (const match of stripped.matchAll(/<\s*([A-Z][\w$]*)(?=[\s/>])/gu)) {
- calls.push({ name: match[1] });
- }
- return uniqueBy(calls, (call) => `${call.receiver ?? ''}:${call.name}`).sort((a, b) => a.name.localeCompare(b.name) || String(a.receiver ?? '').localeCompare(String(b.receiver ?? '')));
-}
-
-function callbackReferencesForSource(stripped) {
- const calls = [];
- for (const match of stripped.matchAll(/\b(?:[A-Za-z_$][\w$]*\s*\.\s*)?([A-Za-z_$][\w$]*)\s*\(([^()]*)\)/gu)) {
- if (/\bfunction\s*$/u.test(stripped.slice(0, match.index))) continue;
- if (nextNonWhitespace(stripped, match.index + match[0].length) === '{') continue;
- const args = match[2].split(',');
- const callbackArgs = FIRST_ARGUMENT_CALLBACK_NAMES.has(match[1]) ? args : args.slice(1);
- for (const value of callbackArgs) {
- pushCallbackReference(calls, value.trim());
- }
- }
- return calls;
-}
-
-function pushCallbackReference(calls, item) {
- const member = item.match(/^([A-Za-z_$][\w$]*)\s*\.\s*([A-Za-z_$][\w$]*)$/u);
- if (member && !JS_KEYWORDS.has(member[1]) && !JS_KEYWORDS.has(member[2]) && !WEAK_MEMBER_CALL_NAMES.has(member[2])) {
- calls.push({ receiver: member[1], name: member[2] });
- return;
- }
- if (/^[A-Za-z_$][\w$]*$/u.test(item) && !JS_KEYWORDS.has(item)) {
- calls.push({ name: item });
- }
-}
-
-function previousNonWhitespace(value, index) {
- for (let cursor = index - 1; cursor >= 0; cursor -= 1) {
- if (!/\s/u.test(value[cursor])) return value[cursor];
- }
- return '';
-}
-
-function nextNonWhitespace(value, index) {
- for (let cursor = index; cursor < value.length; cursor += 1) {
- if (!/\s/u.test(value[cursor])) return value[cursor];
- }
- return '';
-}
-
-function importsForSlice(imports, sourceSlice) {
- const referenceTerms = referencesForSource(sourceSlice);
- const referenced = new Set(referenceTerms);
- return imports.filter((item) => {
- if (item.syntax === 'dynamic') return dynamicImportPattern(item.rawModule).test(sourceSlice);
- return !item.names.length || item.names.some((name) => referenced.has(name));
- }).map((item) => withDefined({
- ...item,
- aliases: item.namespace ? { ...(item.aliases ?? {}), ...destructuredNamespaceAliases(sourceSlice, item.namespace) } : item.aliases
- }));
-}
-
-function dynamicImportPattern(rawModule) {
- return new RegExp(`\\bimport\\(\\s*['"]${escapeRegExp(rawModule)}['"]\\s*\\)`, 'u');
-}
-
-function escapeRegExp(value) {
- return String(value ?? '').replace(/[.*+?^${}()|[\]\\]/gu, '\\$&');
-}
-
-function importedNames(specifier) {
- const value = String(specifier ?? '').trim();
- if (!value) return [];
- const names = [];
- const namespaceMatch = value.match(/\*\s+as\s+([A-Za-z_$][\w$]*)/u);
- if (namespaceMatch) names.push(namespaceMatch[1]);
- const leading = value.split('{')[0].trim().replace(/^type\s+/u, '').split(',')[0].trim();
- if (leading && /^[A-Za-z_$][\w$]*$/u.test(leading)) names.push(leading);
- const named = value.match(/\{([^}]+)\}/u)?.[1] ?? '';
- for (const part of named.split(',')) {
- const cleaned = part.trim().replace(/^type\s+/u, '');
- if (!cleaned) continue;
- const alias = cleaned.split(/\s+as\s+/u).pop()?.trim();
- if (alias && /^[A-Za-z_$][\w$]*$/u.test(alias)) names.push(alias);
- }
- return [...new Set(names)].sort();
-}
-
-function namespaceImportedName(specifier) {
- return String(specifier ?? '').match(/\*\s+as\s+([A-Za-z_$][\w$]*)/u)?.[1] ?? null;
-}
-
-function importedAliases(specifier) {
- const aliases = {};
- const named = String(specifier ?? '').match(/\{([^}]+)\}/u)?.[1] ?? '';
- for (const part of named.split(',')) {
- const [imported, local] = part.trim().replace(/^type\s+/u, '').split(/\s+as\s+/u).map((item) => item?.trim()).filter(Boolean);
- if (imported && local && /^[A-Za-z_$][\w$]*$/u.test(imported) && /^[A-Za-z_$][\w$]*$/u.test(local)) aliases[local] = imported;
- }
- return aliases;
-}
-
-function destructuredNamespaceAliases(sourceSlice, namespace) {
- const aliases = {};
- const pattern = new RegExp(`\\b(?:const|let|var)\\s*\\{([^}]+)\\}\\s*=\\s*${escapeRegExp(namespace)}\\b`, 'gu');
- for (const match of stripStringsAndComments(sourceSlice).matchAll(pattern)) {
- for (const part of match[1].split(',')) {
- const [imported, local] = part.trim().split(/\s*:\s*/u).map((item) => item?.trim()).filter(Boolean);
- if (imported && local && /^[A-Za-z_$][\w$]*$/u.test(imported) && /^[A-Za-z_$][\w$]*$/u.test(local)) aliases[local] = imported;
- }
- }
- return aliases;
-}
-
-function defaultImportedAliases(specifier, rawModule) {
- const leading = String(specifier ?? '').split('{')[0].trim().replace(/^type\s+/u, '').split(',')[0].trim();
- if (!leading || !/^[A-Za-z_$][\w$]*$/u.test(leading)) return {};
- return { [leading]: defaultExportNameFromModule(rawModule) };
-}
-
-function defaultExportNameFromModule(rawModule) {
- const parts = String(rawModule ?? '').split('/').filter((part) => part && part !== '.');
- const last = parts.at(-1)?.replace(/\.[^.]+$/u, '');
- const base = last === 'index' ? parts.at(-2)?.replace(/\.[^.]+$/u, '') : last;
- return `default-${safeTag(base ?? 'export').replace(/:/gu, '-')}`;
-}
-
-function importedRequireNames(binding) {
- const value = String(binding ?? '').trim();
- const named = value.match(/^\{([^}]+)\}$/u)?.[1] ?? '';
- if (!named) return [];
- return [...new Set(named.split(',').map((part) => {
- const pieces = part.trim().split(/\s*:\s*/u).map((item) => item.trim()).filter(Boolean);
- return pieces.at(-1);
- }).filter((name) => /^[A-Za-z_$][\w$]*$/u.test(name)))].sort();
-}
-
-function importedRequireAliases(binding) {
- const aliases = {};
- const named = String(binding ?? '').trim().match(/^\{([^}]+)\}$/u)?.[1] ?? '';
- for (const part of named.split(',')) {
- const [imported, local] = part.trim().split(/\s*:\s*/u).map((item) => item?.trim()).filter(Boolean);
- if (imported && local && /^[A-Za-z_$][\w$]*$/u.test(imported) && /^[A-Za-z_$][\w$]*$/u.test(local)) aliases[local] = imported;
- }
- return aliases;
-}
-
-function publicImport(item) {
- return withDefined({
- module: item.module,
- importHash: item.importHash,
- names: item.names?.length ? [...item.names].sort() : undefined,
- namespace: item.namespace ?? undefined,
- aliases: Object.keys(item.aliases ?? {}).length ? Object.fromEntries(Object.entries(item.aliases).sort(([left], [right]) => left.localeCompare(right))) : undefined
- });
-}
-
-function sanitizeModuleSpecifier(rawModule) {
- const value = String(rawModule ?? '').trim();
- if (!value) return 'invalid-module';
- const normalized = value.replace(/\s+/gu, ' ').slice(0, 240);
- if (path.isAbsolute(value) || /^[A-Za-z]:[\\/]/u.test(value) || /^file:/iu.test(value) || /(^|[\\/])(?:Users|private)([\\/]|$)/u.test(value) || /(^|[\\/])var[\\/]folders([\\/]|$)/u.test(value)) {
- return 'local:absolute-import';
- }
- return SOURCE_GRAPH_SAFE_LABEL_RE.test(normalized) ? normalized : 'external-module';
-}
-
-function contentFingerprint(value) {
- return hashRef(stableStringify(stripVolatileTimestamps(value)));
-}
-
-function stripVolatileTimestamps(value) {
- if (Array.isArray(value)) return value.map(stripVolatileTimestamps);
- if (!value || typeof value !== 'object') return value;
- const output = {};
- for (const [key, item] of Object.entries(value)) {
- if (['collectedAt', 'indexedAt'].includes(key)) continue;
- output[key] = stripVolatileTimestamps(item);
- }
- return output;
-}
-
-function recordFromChunk(chunk, workspaceId) {
- const entityNames = chunk.entities.map((entity) => entity.name);
- const importNames = chunk.imports.map((item) => item.module);
- const filePath = relativeFromLocator(chunk.locator);
- const text = [
- `Code chunk ${entityNames.join(' ')} in ${chunk.locator}.`,
- importNames.length ? `Imports ${importNames.join(' ')}.` : '',
- `Parse ${chunk.parseErrorState}.`
- ].filter(Boolean).join(' ');
- const tags = [
- 'code',
- `language:${chunk.language}`,
- ...entityNames.map((name) => `symbol:${safeTag(name)}`),
- ...importNames.map((name) => `import:${safeTag(importAlias(name))}`)
- ].sort();
- return {
- id: `ast_${sha256(`${chunk.locator}:${chunk.contentHash}`).slice(0, 32)}`,
- version: chunk.chunkFingerprint,
- kind: 'code_chunk',
- workspaceId,
- text,
- tags,
- relations: tags,
- scope: 'workspace-private',
- dataClass: 'workspace-private',
- trustClass: 'observed',
- status: chunk.parseErrorState === 'none' ? 'active' : 'quarantined',
- source: chunk.locator,
- tokens: estimateTokens(text),
- confidence: chunk.parseErrorState === 'none' ? 0.82 : 0.25,
- authority: 0.55,
- updatedAt: chunk.collectedAt,
- contentHash: chunk.contentHash,
- metadata: {
- path: filePath,
- locator: chunk.locator,
- representation: 'source-locator-summary',
- astCode: {
- parserVersion: chunk.parserVersion,
- parseErrorState: chunk.parseErrorState,
- byteRange: chunk.byteRange,
- lineRange: chunk.lineRange,
- scopeChain: chunk.scopeChain,
- entities: chunk.entities,
- imports: chunk.imports.map((item) => ({ moduleHash: item.importHash }))
- }
- }
- };
-}
-
-function recordFromGraphResult({ result, graph, workspaceId, collectedAt }) {
- const publicGraph = sanitizeSourceGraphPublicOutput(graph);
- const publicWorkspaceId = safeSourceGraphWorkspaceId(workspaceId)
- ? workspaceId
- : publicGraph.workspaceId;
- const filePath = result.locator ? relativeFromLocator(result.locator) : null;
- const text = [
- `Source graph ${result.resultType} ${result.kind} ${result.label}.`,
- result.locator ? `Locator ${result.locator}.` : '',
- 'Use this locator to recover the tracked source file.'
- ].filter(Boolean).join(' ');
- const tagValues = [
- 'code',
- 'source-graph',
- `graph-kind:${safeTag(result.kind)}`,
- `graph-result:${safeTag(result.resultType)}`,
- result.label,
- result.locator,
- filePath
- ].filter(Boolean);
- const tags = [...new Set(tagValues.flatMap((value) => [...terms(value)].slice(0, 16)))].sort();
- return {
- id: `graph_${sha256(`${result.id}:${result.locator ?? ''}:${publicGraph.graphFingerprint}`).slice(0, 32)}`,
- version: publicGraph.graphFingerprint,
- kind: 'observation',
- workspaceId: publicWorkspaceId,
- text,
- tags,
- relations: tags,
- scope: 'workspace-private',
- dataClass: 'workspace-private',
- trustClass: 'observed',
- status: 'active',
- source: result.locator ?? `workspace://__source_graph__#${result.id}`,
- tokens: estimateTokens(text),
- confidence: result.resultType === 'node' ? 0.8 : 0.72,
- authority: 0.6,
- updatedAt: collectedAt,
- contentHash: hashRef(stableStringify({ graph: publicGraph.graphFingerprint, result })),
- metadata: {
- path: filePath,
- locator: result.locator ?? null,
- representation: 'source-graph-locator',
- retrieval: { candidateEligible: Boolean(result.locator) },
- sourceGraph: {
- graphFingerprint: publicGraph.graphFingerprint,
- sourceIndexFingerprint: publicGraph.sourceIndexFingerprint,
- resultId: result.id,
- resultType: result.resultType,
- kind: result.kind,
- score: result.score,
- reasonCodes: result.reasonCodes ?? []
- }
- }
- };
-}
-
-function chunkSearchText(chunk) {
- return [
- chunk.locator,
- chunk.language,
- chunk.parseErrorState,
- ...chunk.scopeChain,
- ...chunk.entities.map((entity) => `${entity.kind} ${entity.name} symbol:${entity.name}`),
- ...chunk.imports.map((item) => `${item.module} import:${importAlias(item.module)}`)
- ].join(' ');
-}
-
-function overlapScore(query, text) {
- const queryTerms = terms(query);
- const textTerms = terms(text);
- if (!queryTerms.size || !textTerms.size) return 0;
- let matches = 0;
- for (const term of queryTerms) if (textTerms.has(term)) matches += 1;
- return matches / Math.sqrt(queryTerms.size * textTerms.size);
-}
-
-function diagnostic(locator, code) {
- return Object.freeze({ locator, code });
-}
-
-function locatorFor(relativePath) {
- return normalizeSourceGraphWorkspaceLocator(`workspace://${normalizeRelative(relativePath)}`);
-}
-
-function safeWorkspaceLocatorFor(relativePath) {
- try {
- return locatorFor(relativePath);
- } catch {
- return null;
- }
-}
-
-function fileLocatorFor(locator) {
- if (typeof locator !== 'string') return '';
- const value = locator.split('#')[0];
- if (!value.startsWith('workspace://')) throw new Error('source_graph_locator_invalid');
- return value;
-}
-
-function resolveImportFileLocator(sourceLocator, moduleSpecifier, knownFileLocators) {
- const moduleValue = String(moduleSpecifier ?? '');
- if (!moduleValue.startsWith('.') && !moduleValue.startsWith('@/')) return null;
- const sourcePath = relativeFromLocator(fileLocatorFor(sourceLocator));
- const basePath = moduleValue.startsWith('@/')
- ? path.posix.normalize(moduleValue.slice(2))
- : path.posix.normalize(path.posix.join(path.posix.dirname(sourcePath), moduleValue));
- if (!basePath || basePath.startsWith('../') || path.posix.isAbsolute(basePath)) return null;
- const withoutExtension = basePath.replace(/\.(?:[cm]?js|jsx|tsx?)$/u, '');
- const candidates = [
- basePath,
- `${withoutExtension}.ts`,
- `${withoutExtension}.tsx`,
- `${withoutExtension}.js`,
- `${withoutExtension}.jsx`,
- `${withoutExtension}.mjs`,
- `${withoutExtension}.cjs`,
- `${withoutExtension}/index.ts`,
- `${withoutExtension}/index.tsx`,
- `${withoutExtension}/index.js`,
- `${withoutExtension}/index.mjs`
- ];
- for (const candidate of candidates) {
- const locator = locatorFor(candidate);
- if (knownFileLocators.has(locator)) return locator;
- }
- return null;
-}
-
-function locatorLabel(locator) {
- return String(locator ?? '').replace(/^workspace:\/\//u, '');
-}
-
-function relativeFromLocator(locator) {
- if (!locator.startsWith('workspace://')) throw new Error('ast_code_locator_invalid');
- const withoutScheme = locator.slice('workspace://'.length).split('#')[0];
- if (!withoutScheme || path.isAbsolute(withoutScheme) || withoutScheme.split('/').includes('..')) throw new Error('ast_code_locator_invalid');
- return withoutScheme;
-}
-
-function normalizeRelative(value) {
- return String(value).split(path.sep).join('/').replace(/^\/+/u, '');
-}
-
-function insideRoot(rootReal, candidateReal) {
- const relative = path.relative(rootReal, candidateReal);
- return relative === '' || (!relative.startsWith('..') && !path.isAbsolute(relative));
-}
-
-function lineByteStarts(lines) {
- const starts = [];
- let offset = 0;
- for (let index = 0; index < lines.length; index += 1) {
- starts.push(offset);
- offset += Buffer.byteLength(lines[index] ?? '', 'utf8');
- if (index < lines.length - 1) offset += 1;
- }
- return starts;
-}
-
-function bracesBalanced(text) {
- return braceDelta(text) === 0;
-}
-
-function braceDelta(text) {
- const stripped = stripStringsAndComments(text);
- let delta = 0;
- for (const char of stripped) {
- if (char === '{') delta += 1;
- else if (char === '}') delta -= 1;
- }
- return delta;
-}
-
-function stripStringsAndComments(text) {
- const input = String(text);
- let output = '';
- for (let index = 0; index < input.length; index += 1) {
- const char = input[index];
- const next = input[index + 1];
- if (char === '/' && next === '/') {
- index += 2;
- while (index < input.length && input[index] !== '\n') index += 1;
- if (input[index] === '\n') output += '\n';
- continue;
- }
- if (char === '/' && next === '*') {
- index += 2;
- while (index < input.length && !(input[index] === '*' && input[index + 1] === '/')) {
- if (input[index] === '\n') output += '\n';
- index += 1;
- }
- if (index < input.length) index += 1;
- continue;
- }
- if (char === '\'' || char === '"' || char === '`') {
- const quote = char;
- index += 1;
- while (index < input.length) {
- if (input[index] === '\n') output += '\n';
- if (input[index] === '\\') {
- index += 2;
- continue;
- }
- if (input[index] === quote) break;
- index += 1;
- }
- continue;
- }
- output += char;
- }
- return output;
-}
-
-function languageFor(relativePath) {
- const extension = path.extname(relativePath);
- if (['.ts', '.tsx'].includes(extension)) return 'typescript';
- return 'javascript';
-}
-
-function importAlias(moduleName) {
- const parts = String(moduleName).split('/').filter(Boolean);
- return parts[parts.length - 1] ?? moduleName;
-}
-
-function safeTag(value) {
- return String(value).normalize('NFKC').replace(/[^A-Za-z0-9_:-]+/gu, '-').replace(/^-|-$/gu, '') || 'unknown';
-}
-
-function safeTimestamp(clock) {
- const value = typeof clock === 'function' ? clock() : new Date().toISOString();
- return value instanceof Date ? value.toISOString() : String(value);
-}
-
-function sourceGraphNodeId(kind, value) {
- return `sgnode_${sha256(`${kind}:${value}`).slice(0, 32)}`;
-}
-
-function sourceGraphEdgeId(kind, fromNodeId, toNodeId, sourceRef = '') {
- return `sgedge_${sha256(`${kind}:${fromNodeId}:${toNodeId}:${sourceRef}`).slice(0, 32)}`;
-}
-
-function withDefined(value) {
- return Object.fromEntries(Object.entries(value).filter(([, item]) => item !== undefined && item !== null));
-}
-
-export function rankArchitectureNodes(graph, {
- changedLocators = [],
- query = '',
- limit = 20
-} = {}) {
- assertSourceGraph(graph);
- const publicGraph = sanitizeSourceGraphPublicOutput(graph);
- const boundedLimit = boundedInteger(limit, 'source_graph_architecture_limit', 1, MAX_ARCHITECTURE_RANKING_RESULTS);
- const changed = sourceGraphChangedLocatorSet(changedLocators);
- const queryTerms = terms(String(query ?? '').slice(0, 512));
- const behaviorDegree = new Map(publicGraph.nodes.map((node) => [node.id, { inbound: 0, outbound: 0 }]));
- const exportedSymbolIds = new Set();
- for (const edge of publicGraph.edges) {
- if (edge.kind === 'exports') exportedSymbolIds.add(edge.toNodeId);
- if (!['calls', 'references'].includes(edge.kind)) continue;
- const from = behaviorDegree.get(edge.fromNodeId);
- const to = behaviorDegree.get(edge.toNodeId);
- if (from) from.outbound += 1;
- if (to) to.inbound += 1;
- }
-
- const candidates = publicGraph.nodes
- .filter((node) => architectureRankableSymbol(node))
- .map((node) => architectureCandidate({
- node,
- counts: behaviorDegree.get(node.id) ?? { inbound: 0, outbound: 0 },
- exported: exportedSymbolIds.has(node.id),
- changed: changed.has(fileLocatorFor(node.locator)),
- queryTerms
- }))
- .sort(compareArchitectureCandidates);
- const preferredCandidates = candidates.filter((candidate) => !candidate.deprioritized);
- const entryCandidates = preferredCandidates.filter((candidate) => candidate.entryEvidence || (candidate.inbound === 0 && candidate.outbound > 0));
- const hotspotCandidates = preferredCandidates.filter((candidate) => candidate.entryEvidence || candidate.total > 0);
- const entryPoints = (entryCandidates.length ? entryCandidates : preferredCandidates.length ? preferredCandidates : candidates)
- .slice(0, boundedLimit)
- .map(architectureNodeReference);
- const hotspots = (hotspotCandidates.length ? hotspotCandidates : preferredCandidates.length ? preferredCandidates : candidates)
- .slice(0, boundedLimit)
- .map(architectureHotspot);
- const deprioritized = candidates
- .filter((candidate) => candidate.deprioritized)
- .slice(0, Math.min(boundedLimit, MAX_ARCHITECTURE_DEPRIORITIZED))
- .map(architectureDeprioritizedDiagnostic);
- return Object.freeze({
- entryPoints: Object.freeze(entryPoints),
- hotspots: Object.freeze(hotspots),
- deprioritized: Object.freeze(deprioritized)
- });
-}
-
-function sourceGraphChangedLocatorSet(values) {
- const list = Array.isArray(values) ? values : values === null || values === undefined || values === '' ? [] : [values];
- const output = new Set();
- for (const value of list) {
- try {
- const locator = fileLocatorFor(String(value));
- if (safeArchitectureLocator(locator)) output.add(locator);
- } catch {
- // Public graph reads are read-only and fail closed for untrusted locators.
- }
- }
- return output;
-}
-
-function architectureRankableSymbol(node) {
- return node?.kind === 'symbol'
- && ['class', 'function', 'method', 'interface', 'type'].includes(node.symbolKind)
- && safeArchitectureLabel(node.label)
- && safeArchitectureLocator(node.locator);
-}
-
-function architectureCandidate({ node, counts, exported, changed, queryTerms }) {
- const signalCodes = [];
- let score = 0;
- function signal(code, multiplier = 1) {
- const definition = ARCHITECTURE_SIGNAL_TABLE[code];
- if (!definition) return;
- signalCodes.push(code);
- if (definition.weight !== undefined) score += definition.weight * multiplier;
- if (definition.perDegree !== undefined) score += Math.min(definition.maximum, definition.perDegree * multiplier);
- }
- const locatorSignals = architectureLocatorSignals(node.locator);
- for (const code of locatorSignals) signal(code);
- if (exported) signal('exported_symbol');
- if (changed) signal('changed_locator');
- if (architectureQueryMatches(node, queryTerms)) signal('query_match');
- if (counts.inbound > 0) signal('inbound_behavior', counts.inbound);
- if (counts.outbound > 0) signal('outbound_behavior', counts.outbound);
- if (architectureTestLocator(node.locator)) signal('test_locator_penalty');
- if (String(node.label).startsWith('#')) signal('private_symbol_penalty');
- if (architectureGenericUtilityName(node.label)) signal('generic_utility_penalty');
- const penaltyCodes = signalCodes.filter((code) => ARCHITECTURE_SIGNAL_TABLE[code]?.direction === 'deprioritize');
- return Object.freeze({
- node,
- inbound: counts.inbound,
- outbound: counts.outbound,
- total: counts.inbound + counts.outbound,
- score,
- reasonCodes: Object.freeze([...new Set(signalCodes)]),
- penaltyCodes: Object.freeze(penaltyCodes),
- deprioritized: penaltyCodes.length > 0,
- entryEvidence: ['class', 'function', 'method'].includes(node.symbolKind) && (locatorSignals.length > 0 || exported)
- });
-}
-
-function architectureLocatorSignals(locator) {
- const relative = relativeFromLocator(locator);
- const signals = [];
- if (/(?:^|\/)(?:route|handler|page|layout)\.[cm]?[jt]sx?$/u.test(relative) || /(?:^|\/)(?:api|routes?)(?:\/|$)/u.test(relative)) signals.push('route_locator');
- if (/(?:^|\/)bin\//u.test(relative)) signals.push('bin_locator', 'executable_script_locator');
- if (/^packages\/[^/]+\/(?:src\/)?(?:index|main|cli)\.[cm]?[jt]sx?$/u.test(relative)) signals.push('package_source_entry_locator');
- return signals;
-}
-
-function architectureQueryMatches(node, queryTerms) {
- if (!queryTerms.size) return false;
- const nodeTerms = terms(expandSearchText([node.label, node.qualifiedLabel, node.locator].filter(Boolean).join(' ')));
- for (const term of queryTerms) if (nodeTerms.has(term)) return true;
- return false;
-}
-
-function architectureTestLocator(locator) {
- const relative = relativeFromLocator(locator);
- return /(?:^|\/)(?:test|tests|__tests__|spec|fixtures|mocks?)(?:\/|$)/u.test(relative)
- || /\.(?:test|spec)\.[cm]?[jt]sx?$/u.test(relative);
-}
-
-function architectureGenericUtilityName(label) {
- const normalized = String(label ?? '').replace(/^#/u, '').toLowerCase();
- return /^assert(?:[A-Z_$]|$)/u.test(String(label ?? ''))
- || GENERIC_ARCHITECTURE_UTILITY_NAMES.has(normalized)
- || LOW_SIGNAL_REFERENCE_NAMES.has(normalized);
-}
-
-function compareArchitectureCandidates(left, right) {
- return Number(left.deprioritized) - Number(right.deprioritized)
- || right.score - left.score
- || graphSearchPathPriority(left.node.locator) - graphSearchPathPriority(right.node.locator)
- || left.node.label.localeCompare(right.node.label)
- || left.node.id.localeCompare(right.node.id);
-}
-
-function architectureNodeReference(candidate) {
- return Object.freeze(withDefined({
- nodeId: candidate.node.id,
- label: candidate.node.label,
- qualifiedLabel: safeArchitectureLabel(candidate.node.qualifiedLabel) ? candidate.node.qualifiedLabel : undefined,
- locator: candidate.node.locator,
- symbolKind: candidate.node.symbolKind,
- reasonCodes: candidate.reasonCodes
- }));
-}
-
-function architectureHotspot(candidate) {
- return Object.freeze(withDefined({
- nodeId: candidate.node.id,
- label: candidate.node.label,
- qualifiedLabel: safeArchitectureLabel(candidate.node.qualifiedLabel) ? candidate.node.qualifiedLabel : undefined,
- locator: candidate.node.locator,
- symbolKind: candidate.node.symbolKind,
- inbound: candidate.inbound,
- outbound: candidate.outbound,
- total: candidate.total,
- reasonCodes: candidate.reasonCodes
- }));
-}
-
-function architectureDeprioritizedDiagnostic(candidate) {
- return Object.freeze(withDefined({
- nodeId: candidate.node.id,
- label: candidate.node.label,
- qualifiedLabel: safeArchitectureLabel(candidate.node.qualifiedLabel) ? candidate.node.qualifiedLabel : undefined,
- locator: candidate.node.locator,
- symbolKind: candidate.node.symbolKind,
- reasonCodes: candidate.penaltyCodes
- }));
-}
-
-function safeArchitectureLocator(value) {
- return SOURCE_GRAPH_WORKSPACE_LOCATOR_RE.test(String(value ?? ''));
-}
-
-function safeArchitectureLabel(value) {
- return SOURCE_GRAPH_SAFE_LABEL_RE.test(String(value ?? ''));
-}
-
-function sourceGraphSummary({ nodes, edges, coverage = undefined }) {
- const nodeKindCounts = countBy(nodes, (node) => node.kind);
- const edgeKindCounts = countBy(edges, (edge) => edge.kind);
- const symbolNodes = nodes.filter((node) => node.kind === 'symbol');
- const symbolLabelCounts = countBy(symbolNodes, (node) => node.label);
- const symbolsByLabel = new Map();
- for (const node of symbolNodes) {
- const values = symbolsByLabel.get(node.label) ?? [];
- values.push(node);
- symbolsByLabel.set(node.label, values);
- }
- const ambiguousSymbolLabelCount = Object.values(symbolLabelCounts).filter((count) => count > 1).length;
- const qualifiedSymbolCount = symbolNodes.filter((node) => node.qualifiedLabel).length;
- const degree = new Map(nodes.map((node) => [node.id, { inbound: 0, outbound: 0 }]));
- const hotspotDegree = new Map(nodes.map((node) => [node.id, { inbound: 0, outbound: 0 }]));
- const callDegree = new Map(nodes.map((node) => [node.id, { inbound: 0, outbound: 0 }]));
- for (const edge of edges) {
- const from = degree.get(edge.fromNodeId);
- const to = degree.get(edge.toNodeId);
- if (from) from.outbound += 1;
- if (to) to.inbound += 1;
- if (edge.kind === 'calls' || edge.kind === 'references') {
- const hotspotFrom = hotspotDegree.get(edge.fromNodeId);
- const hotspotTo = hotspotDegree.get(edge.toNodeId);
- if (hotspotFrom) hotspotFrom.outbound += 1;
- if (hotspotTo) hotspotTo.inbound += 1;
- }
- if (edge.kind === 'calls') {
- const callFrom = callDegree.get(edge.fromNodeId);
- const callTo = callDegree.get(edge.toNodeId);
- if (callFrom) callFrom.outbound += 1;
- if (callTo) callTo.inbound += 1;
- }
- }
- const behaviorHotspots = sourceGraphHotspots(nodes, hotspotDegree);
- const structuralHotspots = behaviorHotspots.length ? [] : sourceGraphHotspots(nodes, degree);
- const hotspots = (behaviorHotspots.length ? behaviorHotspots : structuralHotspots).slice(0, 10);
- const entryPoints = nodes
- .filter((node) => node.kind === 'symbol')
- .map((node) => {
- const counts = callDegree.get(node.id) ?? { inbound: 0, outbound: 0 };
- return { node, counts };
- })
- .filter(({ counts }) => counts.inbound === 0 && counts.outbound > 0)
- .map(({ node, counts }) => withDefined({ nodeId: node.id, label: node.label, qualifiedLabel: node.qualifiedLabel, locator: node.locator, symbolKind: node.symbolKind, outbound: counts.outbound }))
- .sort((a, b) => graphSearchPathPriority(a.locator) - graphSearchPathPriority(b.locator) || b.outbound - a.outbound || a.label.localeCompare(b.label) || a.nodeId.localeCompare(b.nodeId))
- .map(({ outbound: _outbound, ...item }) => item)
- .slice(0, 10);
- const ambiguousLabels = [...symbolsByLabel.entries()]
- .map(([label, values]) => sourceGraphAmbiguousLabelSample(label, values, hotspotDegree))
- .filter(Boolean)
- .sort((a, b) => b.signalScore - a.signalScore || b.count - a.count || a.label.localeCompare(b.label))
- .slice(0, 10);
- return Object.freeze(withDefined({
- fileCount: nodeKindCounts.file ?? 0,
- symbolCount: nodeKindCounts.symbol ?? 0,
- moduleCount: nodeKindCounts.module ?? 0,
- nodeCount: nodes.length,
- edgeCount: edges.length,
- qualifiedSymbolCount,
- ambiguousSymbolLabelCount,
- ambiguousLabels: ambiguousLabels.map(({ signalScore: _signalScore, ...item }) => item),
- nodeKindCounts,
- edgeKindCounts,
- hotspots,
- entryPoints,
- coverage
- }));
-}
-
-function sourceGraphAmbiguousLabelSample(label, values, behaviorDegree) {
- if (values.length < 2 || !highSignalReferenceName(label, values)) return null;
- const candidates = values
- .map((node) => ({ node, signalScore: sourceGraphAmbiguousSymbolSignal(node, behaviorDegree) }))
- .filter((item) => item.signalScore > 0)
- .sort((a, b) => b.signalScore - a.signalScore || graphSearchPathPriority(a.node.locator) - graphSearchPathPriority(b.node.locator) || a.node.locator.localeCompare(b.node.locator));
- if (candidates.length < 2) return null;
- return {
- label,
- count: values.length,
- qualifiedLabels: [...new Set(candidates.map(({ node }) => node.qualifiedLabel).filter(Boolean))].slice(0, 5),
- locators: candidates.map(({ node }) => node.locator).filter(Boolean).slice(0, 3),
- signalScore: candidates[0].signalScore
- };
-}
-
-function sourceGraphAmbiguousSymbolSignal(node, behaviorDegree) {
- const pathPriority = graphSearchPathPriority(node.locator);
- if (pathPriority > 2) return 0;
- const counts = behaviorDegree.get(node.id) ?? { inbound: 0, outbound: 0 };
- const behaviorTotal = counts.inbound + counts.outbound;
- let score = pathPriority === 1 ? 2 : 1;
- if (node.qualifiedLabel) score += 8;
- if (['class', 'interface', 'type'].includes(node.symbolKind)) score += 4;
- if (['method', 'function'].includes(node.symbolKind)) score += 2;
- if (behaviorTotal > 0) score += 2;
- if (!node.qualifiedLabel && !behaviorTotal && !/[A-Z]/u.test(node.label ?? '')) return 0;
- return score;
-}
-
-function sourceGraphHotspots(nodes, degree) {
- const ranked = nodes
- .filter((node) => node.kind === 'symbol' && highSignalReferenceName(node.label, []))
- .map((node) => {
- const counts = degree.get(node.id) ?? { inbound: 0, outbound: 0 };
- return withDefined({ nodeId: node.id, label: node.label, qualifiedLabel: node.qualifiedLabel, locator: node.locator, inbound: counts.inbound, outbound: counts.outbound, total: counts.inbound + counts.outbound });
- })
- .filter((item) => item.total > 0)
- .sort((a, b) => graphSearchPathPriority(a.locator) - graphSearchPathPriority(b.locator) || b.total - a.total || a.label.localeCompare(b.label) || a.nodeId.localeCompare(b.nodeId));
- const sourceRanked = ranked.filter((item) => graphSearchPathPriority(item.locator) <= 1);
- return sourceRanked.length ? sourceRanked : ranked;
-}
-
-function countBy(items, keyFn) {
- const counts = {};
- for (const item of items) {
- const key = keyFn(item);
- counts[key] = (counts[key] ?? 0) + 1;
- }
- return Object.freeze(Object.fromEntries(Object.entries(counts).sort((a, b) => a[0].localeCompare(b[0]))));
-}
-
-function graphContentFingerprint(value) {
- return hashRef(stableStringify(stripGraphVolatile(value)));
-}
-
-function stripGraphVolatile(value) {
- if (Array.isArray(value)) return value.map(stripGraphVolatile);
- if (!value || typeof value !== 'object') return value;
- const output = {};
- for (const [key, item] of Object.entries(value)) {
- if (['builtAt', 'graphFingerprint'].includes(key)) continue;
- output[key] = stripGraphVolatile(item);
- }
- return output;
-}
-
-function assertSourceGraph(graph) {
- if (!graph || graph.schemaVersion !== '1.0.0' || !Array.isArray(graph.nodes) || !Array.isArray(graph.edges)) {
- throw new Error('source graph is required');
- }
-}
-
-function boundedInteger(value, name, min, max) {
- if (!Number.isInteger(value) || value < min || value > max) throw new Error(`${name}:invalid`);
- return value;
-}
-
-function safeRegex(pattern, errorCode) {
- try {
- return new RegExp(String(pattern), 'u');
- } catch {
- throw new Error(errorCode);
- }
-}
-
-function graphSearchScore(queryTerms, text) {
- if (!queryTerms.size) return 1;
- const graphTerms = terms(text);
- if (!graphTerms.size) return 0;
- let matches = 0;
- for (const term of queryTerms) if (graphTerms.has(term)) matches += 1;
- return matches / Math.sqrt(queryTerms.size * graphTerms.size);
-}
-
-function graphSearchSymbolKindWeight(symbolKind) {
- if (['class', 'function', 'method'].includes(symbolKind)) return 1.18;
- if (['type', 'interface'].includes(symbolKind)) return 0.82;
- return 1;
-}
-
-function graphSearchEdgeKindWeight(kind) {
- if (['defined_in', 'contains'].includes(kind)) return 0.35;
- return 1;
-}
-
-function sourceGraphNodeSearchText(node) {
- return expandSearchText([
- node.kind,
- node.label,
- node.qualifiedLabel,
- node.symbolKind,
- ...(node.scopeChain ?? []),
- node.locator,
- node.sourceRef,
- node.moduleHash
- ].filter(Boolean).join(' '));
-}
-
-function sourceGraphEdgeSearchText(edge, from, to) {
- return expandSearchText([
- edge.kind,
- edge.exportName,
- edge.locator,
- edge.sourceRef,
- from?.kind,
- from?.label,
- from?.qualifiedLabel,
- from?.locator,
- to?.kind,
- to?.label,
- to?.qualifiedLabel,
- to?.locator
- ].filter(Boolean).join(' '));
-}
-
-function expandSearchText(value) {
- const raw = String(value ?? '');
- const expanded = raw
- .replace(/([a-z0-9])([A-Z])/gu, '$1 $2')
- .replace(/[_:./#-]+/gu, ' ');
- return `${raw} ${expanded}`;
-}
-
-function sourceGraphSearchReasons({ score, pattern, locatorPrefix }) {
- return [
- score > 0 ? 'lexical_match' : 'unfiltered_match',
- pattern ? 'label_pattern_match' : null,
- locatorPrefix ? 'locator_prefix_match' : null
- ].filter(Boolean);
-}
-
-function graphSearchPathPriority(locator = '') {
- const relative = String(locator ?? '').replace(/^workspace:\/\//u, '').split('#')[0];
- if (!relative) return 2;
- if (/(^|\/)(?:test|tests|__tests__|spec|fixtures|mocks?)(?:\/|$)/u.test(relative) || /\.(?:test|spec)\.[cm]?[jt]sx?$/u.test(relative)) return 3;
- if (/(^|\/)scripts\//u.test(relative)) return 2;
- if (isTypeDeclarationPath(relative)) return 2;
- if (/(^|\/)(?:node_modules|vendor|dist|build|coverage|generated)(?:\/|$)/u.test(relative)) return 4;
- return 1;
-}
-
-function graphSearchPathWeight(locator = '', queryTerms = new Set(), locatorPrefix = null) {
- const relative = String(locator ?? '').replace(/^workspace:\/\//u, '').split('#')[0];
- if (!relative) return 0.45;
- if (locatorPrefix) return 1;
- if ([...queryTerms].some((term) => ['type', 'types', 'interface', 'interfaces', 'declaration', 'declarations'].includes(term))) return 1;
- if (isTypeDeclarationPath(relative)) return 0.8;
- if ([...queryTerms].some((term) => ['script', 'scripts', 'eval', 'evals', 'benchmark', 'benchmarks', 'bench'].includes(term))) return 1;
- if (/(^|\/)scripts\//u.test(relative)) return 0.7;
- if ([...queryTerms].some((term) => ['test', 'tests', 'spec', 'fixture', 'fixtures', 'mock', 'mocks'].includes(term))) return 1;
- if (/(^|\/)(?:test|tests|__tests__|spec|fixtures|mocks?)(?:\/|$)/u.test(relative) || /\.(?:test|spec)\.[cm]?[jt]sx?$/u.test(relative)) return 0.55;
- if (/(^|\/)(?:node_modules|vendor|dist|build|coverage|generated)(?:\/|$)/u.test(relative)) return 0.35;
- return 1;
-}
-
-function isTypeDeclarationPath(relative = '') {
- return /\.d\.[cm]?ts$/u.test(relative) || /(^|\/)types\//u.test(relative);
-}
-
-function uniqueBy(items, keyFn) {
- const seen = new Set();
- const output = [];
- for (const item of items) {
- const key = keyFn(item);
- if (seen.has(key)) continue;
- seen.add(key);
- output.push(Object.freeze(item));
- }
- return output;
-}
-
-function uniqueObjects(items, key) {
- return uniqueBy(items, (item) => item[key]);
-}
-
-function byId(a, b) {
- return a.id.localeCompare(b.id);
-}
-
-function sha256(value) {
- return createHash('sha256').update(String(value)).digest('hex');
-}
diff --git a/providers/native/context-candidate-graph/provider.json b/providers/native/context-candidate-graph/provider.json
deleted file mode 100644
index 1df83707..00000000
--- a/providers/native/context-candidate-graph/provider.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "schemaVersion": "1.0.0",
- "id": "provider:native:context-candidate:graph",
- "name": "Native Source Graph Context Candidate Source",
- "version": "0.2.0-dev",
- "category": "context-candidate",
- "enabledByDefault": true,
- "locality": "in-process",
- "contract": "CandidateSourcePort",
- "contractVersion": "1.0.0",
- "capabilities": [
- "context.candidate.graph",
- "source.graph.js-ts"
- ],
- "limits": {
- "languages": ["javascript", "typescript"],
- "writes": false,
- "network": false,
- "embeddings": false,
- "graphDatabase": false,
- "executesCode": false
- },
- "dataPaths": [],
- "experimental": false,
- "notes": [
- "Uses the native dependency-free JS/TS source graph to return locator-only graph hits as Context Compiler candidates.",
- "Returns safe workspace locators, graph fingerprints, result kinds, scores, and reason codes; it does not return raw source bodies.",
- "The graph is derived and read-only; it is not canonical source, memory, or authority state."
- ]
-}
diff --git a/providers/native/memory-sqlite/src/index.mjs b/providers/native/memory-sqlite/src/index.mjs
index 293abd17..3115117e 100644
--- a/providers/native/memory-sqlite/src/index.mjs
+++ b/providers/native/memory-sqlite/src/index.mjs
@@ -42,6 +42,14 @@ function parseJson(value, fallback) {
try { return JSON.parse(value); } catch { return fallback; }
}
+function isFts5Unavailable(error) {
+ return /no such module:\s*fts5/iu.test(String(error?.message ?? error));
+}
+
+function isFts5TableMissing(error) {
+ return /no such table:\s*memory_(?:fact_)?fts/iu.test(String(error?.message ?? error));
+}
+
function contentHash(record) {
return createHash('sha256').update(JSON.stringify({
workspaceId: record.workspaceId,
@@ -429,9 +437,11 @@ export class SQLiteMemoryProvider {
constructor({ filename = ':memory:', clock = nowIso, migrate = true, readOnly = false } = {}) {
this.filename = filename;
this.clock = clock;
+ this.fts5Available = false;
if (filename !== ':memory:' && !readOnly) mkdirSync(path.dirname(path.resolve(filename)), { recursive: true, mode: 0o700 });
this.database = readOnly ? new DatabaseSync(filename, { readOnly: true }) : new DatabaseSync(filename);
if (migrate) this.#migrate();
+ else this.#detectFts5();
}
#migrate() {
@@ -491,14 +501,6 @@ export class SQLiteMemoryProvider {
);
CREATE INDEX IF NOT EXISTS idx_memory_proposal_queue_claim ON memory_proposal_queue(workspace_id, status, lease_until, enqueued_at);
CREATE INDEX IF NOT EXISTS idx_memory_proposal_queue_errors ON memory_proposal_queue(workspace_id, status, updated_at DESC);
- CREATE VIRTUAL TABLE IF NOT EXISTS memory_fts USING fts5(
- id UNINDEXED,
- workspace_id UNINDEXED,
- kind,
- text,
- tags,
- tokenize='unicode61 remove_diacritics 2'
- );
CREATE TABLE IF NOT EXISTS memory_episodes (
id TEXT PRIMARY KEY,
workspace_id TEXT NOT NULL,
@@ -558,17 +560,8 @@ export class SQLiteMemoryProvider {
FOREIGN KEY(target_entity_id) REFERENCES memory_entities(id),
FOREIGN KEY(fact_id) REFERENCES memory_facts(id)
);
- CREATE VIRTUAL TABLE IF NOT EXISTS memory_fact_fts USING fts5(
- id UNINDEXED,
- workspace_id UNINDEXED,
- scope UNINDEXED,
- subject,
- predicate,
- object,
- text,
- tokenize='unicode61 remove_diacritics 2'
- );
`);
+ this.#initializeFts5();
this.#ensureColumn('memory_records', 'source_trust', "TEXT NOT NULL DEFAULT 'unverified'");
this.#ensureColumn('memory_records', 'decision', "TEXT NOT NULL DEFAULT 'allow'");
this.#ensureColumn('memory_records', 'reasons_json', "TEXT NOT NULL DEFAULT '[]'");
@@ -583,6 +576,45 @@ export class SQLiteMemoryProvider {
this.#rebuildTemporalFactFts();
}
+ #initializeFts5() {
+ try {
+ this.database.exec(`
+ CREATE VIRTUAL TABLE IF NOT EXISTS memory_fts USING fts5(
+ id UNINDEXED,
+ workspace_id UNINDEXED,
+ kind,
+ text,
+ tags,
+ tokenize='unicode61 remove_diacritics 2'
+ );
+ CREATE VIRTUAL TABLE IF NOT EXISTS memory_fact_fts USING fts5(
+ id UNINDEXED,
+ workspace_id UNINDEXED,
+ scope UNINDEXED,
+ subject,
+ predicate,
+ object,
+ text,
+ tokenize='unicode61 remove_diacritics 2'
+ );
+ `);
+ this.#detectFts5();
+ } catch (error) {
+ if (!isFts5Unavailable(error)) throw error;
+ }
+ }
+
+ #detectFts5() {
+ try {
+ this.database.prepare('SELECT COUNT(*) AS count FROM memory_fts').get();
+ this.database.prepare('SELECT COUNT(*) AS count FROM memory_fact_fts').get();
+ this.fts5Available = true;
+ } catch (error) {
+ if (isFts5Unavailable(error) || isFts5TableMissing(error)) return;
+ throw error;
+ }
+ }
+
#ensureColumn(table, column, definition) {
const columns = this.database.prepare(`PRAGMA table_info(${table})`).all().map((row) => row.name);
if (!columns.includes(column)) this.database.exec(`ALTER TABLE ${table} ADD COLUMN ${column} ${definition};`);
@@ -637,6 +669,7 @@ export class SQLiteMemoryProvider {
}
#rebuildTemporalFactFts() {
+ if (!this.fts5Available) return;
const rows = this.database.prepare('SELECT id, workspace_id, scope, subject, predicate, object, text FROM memory_facts').all();
this.database.prepare('DELETE FROM memory_fact_fts').run();
const insert = this.database.prepare('INSERT INTO memory_fact_fts(id, workspace_id, scope, subject, predicate, object, text) VALUES (?, ?, ?, ?, ?, ?, ?)');
@@ -720,9 +753,11 @@ export class SQLiteMemoryProvider {
verified_by=excluded.verified_by, activated_by=excluded.activated_by,
lifecycle_json=excluded.lifecycle_json, metadata_json=excluded.metadata_json
`).run(values);
- this.database.prepare('DELETE FROM memory_fts WHERE workspace_id = ? AND id = ?').run(record.workspaceId, record.id);
- this.database.prepare('INSERT INTO memory_fts(id, workspace_id, kind, text, tags) VALUES (?, ?, ?, ?, ?)')
- .run(record.id, record.workspaceId, record.kind, record.text, record.tags.join(' '));
+ if (this.fts5Available) {
+ this.database.prepare('DELETE FROM memory_fts WHERE workspace_id = ? AND id = ?').run(record.workspaceId, record.id);
+ this.database.prepare('INSERT INTO memory_fts(id, workspace_id, kind, text, tags) VALUES (?, ?, ?, ?, ?)')
+ .run(record.id, record.workspaceId, record.kind, record.text, record.tags.join(' '));
+ }
}
async put(input) {
@@ -753,7 +788,7 @@ export class SQLiteMemoryProvider {
const statusPlaceholders = allowedStatuses.map(() => '?').join(',');
const expression = ftsExpression(query);
let rows;
- if (expression) {
+ if (expression && this.fts5Available) {
rows = this.database.prepare(`
SELECT m.*, bm25(memory_fts) AS rank
FROM memory_fts
@@ -780,7 +815,7 @@ export class SQLiteMemoryProvider {
LIMIT ?
`).all(workspaceId, ...scopes, ...allowedStatuses, at, at, boundedLimit);
}
- return rows.map((row) => ({ ...rowToRecord(row), provider: PROVIDER_ID, retrieval: { method: expression ? 'fts5' : 'recent', score: expression ? 1 / (1 + Math.abs(Number(row.rank ?? 0))) : 0.1 } }));
+ return rows.map((row) => ({ ...rowToRecord(row), provider: PROVIDER_ID, retrieval: { method: expression && this.fts5Available ? 'fts5' : 'recent', score: expression && this.fts5Available ? 1 / (1 + Math.abs(Number(row.rank ?? 0))) : 0.1 } }));
}
async supersede({ workspaceId, previousId, replacement }) {
@@ -807,7 +842,7 @@ export class SQLiteMemoryProvider {
try {
const existing = this.database.prepare('SELECT id FROM memory_records WHERE workspace_id = ? AND id = ?').get(workspaceId, id);
if (!existing) { this.database.exec('ROLLBACK'); return false; }
- this.database.prepare('DELETE FROM memory_fts WHERE workspace_id = ? AND id = ?').run(workspaceId, id);
+ if (this.fts5Available) this.database.prepare('DELETE FROM memory_fts WHERE workspace_id = ? AND id = ?').run(workspaceId, id);
this.database.prepare('DELETE FROM memory_records WHERE workspace_id = ? AND id = ?').run(workspaceId, id);
this.database.exec('COMMIT');
return true;
@@ -935,9 +970,11 @@ export class SQLiteMemoryProvider {
updated_at: fact.updatedAt,
metadata_json: JSON.stringify(fact.metadata)
});
- this.database.prepare('DELETE FROM memory_fact_fts WHERE workspace_id = ? AND id = ?').run(fact.workspaceId, fact.id);
- this.database.prepare('INSERT INTO memory_fact_fts(id, workspace_id, scope, subject, predicate, object, text) VALUES (?, ?, ?, ?, ?, ?, ?)')
- .run(fact.id, fact.workspaceId, fact.scope, fact.subject, fact.predicate, fact.object, temporalFactFtsText(fact));
+ if (this.fts5Available) {
+ this.database.prepare('DELETE FROM memory_fact_fts WHERE workspace_id = ? AND id = ?').run(fact.workspaceId, fact.id);
+ this.database.prepare('INSERT INTO memory_fact_fts(id, workspace_id, scope, subject, predicate, object, text) VALUES (?, ?, ?, ?, ?, ?, ?)')
+ .run(fact.id, fact.workspaceId, fact.scope, fact.subject, fact.predicate, fact.object, temporalFactFtsText(fact));
+ }
}
#temporalFactFromRow(row) {
@@ -1024,7 +1061,7 @@ export class SQLiteMemoryProvider {
if (predicate) { conditions.push('m.predicate = ?'); parameters.push(predicate); }
const expression = ftsExpression(query);
let rows;
- if (expression) {
+ if (expression && this.fts5Available) {
rows = this.database.prepare(`
SELECT m.*, bm25(memory_fact_fts) AS rank
FROM memory_fact_fts
@@ -1035,6 +1072,12 @@ export class SQLiteMemoryProvider {
LIMIT ?
`).all(expression, ...parameters, boundedLimit);
} else {
+ const lexicalTokens = tokenizeQuery(query);
+ if (lexicalTokens.length) {
+ const tokenMatch = '(LOWER(m.subject) LIKE ? OR LOWER(m.predicate) LIKE ? OR LOWER(m.object) LIKE ? OR LOWER(m.text) LIKE ?)';
+ conditions.push(`(${lexicalTokens.map(() => tokenMatch).join(' OR ')})`);
+ for (const token of lexicalTokens) parameters.push(`%${token}%`, `%${token}%`, `%${token}%`, `%${token}%`);
+ }
rows = this.database.prepare(`
SELECT m.*, 0 AS rank
FROM memory_facts m
@@ -1091,7 +1134,7 @@ export class SQLiteMemoryProvider {
#ftsTemporalMatches({ workspaceId, scope, query, at, limit }) {
const expression = ftsExpression(query);
- if (!expression) return new Map();
+ if (!expression || !this.fts5Available) return new Map();
const rows = this.database.prepare(`
SELECT m.id, bm25(memory_fact_fts) AS rank
FROM memory_fact_fts
@@ -1122,7 +1165,7 @@ export class SQLiteMemoryProvider {
const boundedLimit = Math.max(1, Math.min(100, Number(limit) || 10));
const rows = this.#validTemporalFactRows({ workspaceId, scope: normalizedScope, at });
const ftsScores = this.#ftsTemporalMatches({ workspaceId, scope: normalizedScope, query, at, limit: Math.max(boundedLimit, 25) });
- const seedRows = rows.filter((row) => ftsScores.has(row.id));
+ const seedRows = rows.filter((row) => ftsScores.has(row.id) || temporalFactLexicalScore(row, query) > 0);
const relatedIds = this.#relatedTemporalFactIds(rows, seedRows);
const scored = rows
.map((row) => {
@@ -1154,7 +1197,9 @@ export class SQLiteMemoryProvider {
query,
results,
signals: {
- fts5: { status: ftsScores.size ? 'used' : 'empty', matchCount: ftsScores.size },
+ fts5: this.fts5Available
+ ? { status: ftsScores.size ? 'used' : 'empty', matchCount: ftsScores.size }
+ : { status: 'unavailable', matchCount: 0 },
semantic: { status: 'skipped', reason: 'local_embedder_unavailable' },
graph: { status: seedRows.length ? 'used' : 'empty', relatedFactCount: relatedIds.size },
temporal: { status: 'used', at }
diff --git a/rfcs/0001-protocol-contracts.md b/rfcs/0001-protocol-contracts.md
index 07efa3b7..dae0ae39 100644
--- a/rfcs/0001-protocol-contracts.md
+++ b/rfcs/0001-protocol-contracts.md
@@ -55,6 +55,40 @@ schema-valid complete envelope and otherwise returns its unavailable report.
Colon-bearing source-graph labels are limited to safe `node:` built-in module
names and the fixed `local:absolute-import` placeholder.
+Additive v1 coverage can also identify the active ignore policy and report
+candidate, represented, and omitted graph counts by node or edge kind. Node and
+edge budgets are enforced while the graph is built, with structural and call
+edges retained before reference edges. A partial result remains read-only: the
+omission fields describe missing representation and never grant access to
+ignored files, absolute paths, source bodies, or additional operations.
+
+The code-intelligence graph adds a provider-neutral, bounded contract for the
+production native engine. It fixes canonical structural IDs and stable node,
+edge, language, resolution, evidence, generation, and freshness vocabularies.
+Closed records reject raw source bodies, absolute paths, provider identities,
+parser-native IDs, and arbitrary metadata. The graph is derived local state and
+does not become canonical memory or approval authority. This schema is additive
+within v1; `source-graph.schema.json` remains the JavaScript and TypeScript
+compatibility surface until the native migration passes its release gates.
+
+The native engine request and response schemas add the versioned JSON Lines
+process contract. Node supplies one bounded `graph.build` request rooted at the
+child process working directory, enforces the deadline and optional
+cancellation token, and validates both the response envelope and nested graph.
+The engine emits protocol frames only on stdout. Failures use stable error
+codes with sanitized details; raw errors, source text, absolute paths, provider
+objects, filesystem authority, and network authority are not protocol fields.
+
+The code-intelligence capability matrix can record an additive per-capability
+applicability value and rationale. Tier 1 semantic auditing requires both
+fields. A `not-applicable` row must also use the `not-applicable` benchmark
+state and the `unsupported` product state. Applicable rows cannot use that
+benchmark state. This keeps language semantics separate from missing fixture or
+repository evidence and prevents an unsupported applicable behavior from
+becoming green through an empty sample. Older v1 matrix rows without these
+optional schema fields remain structurally valid, but they cannot pass the
+current Tier 1 semantic audit.
+
## Requirements
- canonical IDs are independent of providers;
diff --git a/rust/Cargo.lock b/rust/Cargo.lock
index a9271b86..58b832e5 100644
--- a/rust/Cargo.lock
+++ b/rust/Cargo.lock
@@ -609,22 +609,39 @@ dependencies = [
[[package]]
name = "oaf"
-version = "0.1.0"
+version = "2.0.0"
dependencies = [
"anyhow",
"chrono",
"getrandom 0.2.17",
"hex",
+ "oaf-index",
"oaf-ingest",
"oaf-store",
"regex",
+ "serde",
+ "serde_json",
+ "sha2",
+ "tempfile",
+]
+
+[[package]]
+name = "oaf-index"
+version = "2.0.0"
+dependencies = [
+ "anyhow",
+ "hex",
+ "oaf-ingest",
+ "rusqlite",
+ "serde",
"serde_json",
"sha2",
+ "tempfile",
]
[[package]]
name = "oaf-ingest"
-version = "0.1.0"
+version = "2.0.0"
dependencies = [
"anyhow",
"hex",
@@ -661,7 +678,7 @@ dependencies = [
[[package]]
name = "oaf-store"
-version = "0.1.0"
+version = "2.0.0"
dependencies = [
"anyhow",
"chrono",
diff --git a/rust/Cargo.toml b/rust/Cargo.toml
index 1eb3c67c..ad98e961 100644
--- a/rust/Cargo.toml
+++ b/rust/Cargo.toml
@@ -1,8 +1,8 @@
[workspace]
-members = ["oaf-store", "oaf-ingest", "oaf"]
+members = ["oaf-store", "oaf-ingest", "oaf-index", "oaf"]
resolver = "2"
[workspace.package]
edition = "2021"
-version = "0.1.0"
+version = "2.0.0"
license = "Apache-2.0"
diff --git a/rust/oaf-index/Cargo.toml b/rust/oaf-index/Cargo.toml
new file mode 100644
index 00000000..d5aee8c8
--- /dev/null
+++ b/rust/oaf-index/Cargo.toml
@@ -0,0 +1,17 @@
+[package]
+name = "oaf-index"
+version.workspace = true
+edition.workspace = true
+license.workspace = true
+
+[dependencies]
+anyhow = "1.0.86"
+rusqlite = { version = "0.32.1", features = ["bundled"] }
+sha2 = "0.10.8"
+hex = "0.4.3"
+serde = { version = "1.0.203", features = ["derive"] }
+serde_json = "1.0.117"
+oaf-ingest = { path = "../oaf-ingest" }
+
+[dev-dependencies]
+tempfile = "3.10.1"
diff --git a/rust/oaf-index/src/doctor.rs b/rust/oaf-index/src/doctor.rs
new file mode 100644
index 00000000..b66d1459
--- /dev/null
+++ b/rust/oaf-index/src/doctor.rs
@@ -0,0 +1,307 @@
+use crate::{inspect_index, HealthStatus, IndexHealth, SourceIndex, SourceIndexOptions};
+use anyhow::{bail, Result};
+use serde::{Deserialize, Serialize};
+use sha2::{Digest, Sha256};
+use std::ffi::OsString;
+use std::fs::{self, File};
+use std::io::Read;
+use std::path::{Path, PathBuf};
+
+const HASH_BUFFER_BYTES: usize = 64 * 1024;
+const DATABASE_PARTS: [&str; 3] = ["", "-wal", "-shm"];
+
+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct IndexRepairPlan {
+ pub fingerprint: String,
+ pub database_fingerprint: String,
+ pub source_status: HealthStatus,
+ pub reason_codes: Vec,
+ pub action: String,
+ pub backup_file_name: String,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct IndexDoctorReport {
+ pub health: IndexHealth,
+ pub last_valid_generation_readable: bool,
+ pub repair_required: bool,
+ pub repair_plan: Option,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct IndexRepairReceipt {
+ pub plan_fingerprint: String,
+ pub previous_status: HealthStatus,
+ pub active_generation: i64,
+ pub backup_file_name: String,
+ pub backup_cleanup_performed: bool,
+}
+
+#[derive(Serialize)]
+#[serde(rename_all = "camelCase")]
+struct RepairPlanSeed<'a> {
+ database_fingerprint: &'a str,
+ repository_identity: &'a str,
+ engine_version: &'a str,
+ source_status: HealthStatus,
+ reason_codes: &'a [String],
+ action: &'static str,
+}
+
+pub fn doctor_index(path: &Path, options: &SourceIndexOptions) -> Result {
+ super::validate_options(options)?;
+ let health = inspect_index(path, options);
+ let last_valid_generation_readable = health.active_generation.is_some_and(|generation_id| {
+ SourceIndex::open_read_only(path, options)
+ .and_then(|index| index.load_generation(generation_id))
+ .is_ok()
+ });
+ let repair_required = !matches!(health.status, HealthStatus::Absent | HealthStatus::Ready);
+ let repair_plan = if repair_required && path.is_file() {
+ Some(build_repair_plan(path, options, &health)?)
+ } else {
+ None
+ };
+ Ok(IndexDoctorReport {
+ health,
+ last_valid_generation_readable,
+ repair_required,
+ repair_plan,
+ })
+}
+
+pub fn repair_index(
+ path: &Path,
+ options: &SourceIndexOptions,
+ confirmation: &str,
+ replacement: &crate::GenerationInput,
+) -> Result {
+ reject_unsafe_repair_path(path)?;
+ let report = doctor_index(path, options)?;
+ let plan = report
+ .repair_plan
+ .ok_or_else(|| anyhow::anyhow!("source_index_repair_not_required"))?;
+ if confirmation != plan.fingerprint {
+ bail!("source_index_repair_confirmation_mismatch");
+ }
+ if database_bundle_fingerprint(path)? != plan.database_fingerprint {
+ bail!("source_index_repair_plan_stale");
+ }
+
+ let parent = path
+ .parent()
+ .ok_or_else(|| anyhow::anyhow!("source_index_repair_parent_required"))?;
+ let short_fingerprint = &plan.fingerprint[7..23];
+ let backup_path = parent.join(&plan.backup_file_name);
+ let candidate_path = parent.join(format!(
+ ".memory-recall-source-index-{short_fingerprint}.candidate.sqlite"
+ ));
+ if database_bundle_exists(&backup_path) || database_bundle_exists(&candidate_path) {
+ bail!("source_index_repair_artifact_exists");
+ }
+
+ let candidate_result = (|| -> Result<()> {
+ let mut candidate = SourceIndex::open(&candidate_path, options)?;
+ candidate.commit_generation(replacement)?;
+ drop(candidate);
+ let candidate_report = doctor_index(&candidate_path, options)?;
+ if candidate_report.health.status != HealthStatus::Ready
+ || !candidate_report.last_valid_generation_readable
+ {
+ bail!("source_index_repair_candidate_invalid");
+ }
+ Ok(())
+ })();
+ if candidate_result.is_err() {
+ remove_database_bundle(&candidate_path)?;
+ bail!("source_index_repair_candidate_failed");
+ }
+
+ if database_bundle_fingerprint(path)? != plan.database_fingerprint {
+ remove_database_bundle(&candidate_path)?;
+ bail!("source_index_repair_plan_stale");
+ }
+ move_database_bundle(path, &backup_path)?;
+ if database_bundle_fingerprint(&backup_path)? != plan.database_fingerprint {
+ move_database_bundle(&backup_path, path)
+ .map_err(|_| anyhow::anyhow!("source_index_repair_rollback_failed"))?;
+ remove_database_bundle(&candidate_path)?;
+ bail!("source_index_repair_source_changed");
+ }
+ if move_database_bundle(&candidate_path, path).is_err() {
+ remove_database_bundle(path)?;
+ move_database_bundle(&backup_path, path)
+ .map_err(|_| anyhow::anyhow!("source_index_repair_rollback_failed"))?;
+ remove_database_bundle(&candidate_path)?;
+ bail!("source_index_repair_swap_failed");
+ }
+
+ let verified = doctor_index(path, options);
+ let active_generation = match verified {
+ Ok(report)
+ if report.health.status == HealthStatus::Ready
+ && report.last_valid_generation_readable =>
+ {
+ report.health.active_generation
+ }
+ _ => None,
+ };
+ let Some(active_generation) = active_generation else {
+ restore_backup(path, &backup_path, &candidate_path)?;
+ bail!("source_index_repair_verification_failed");
+ };
+
+ Ok(IndexRepairReceipt {
+ plan_fingerprint: plan.fingerprint,
+ previous_status: plan.source_status,
+ active_generation,
+ backup_file_name: plan.backup_file_name,
+ backup_cleanup_performed: false,
+ })
+}
+
+fn build_repair_plan(
+ path: &Path,
+ options: &SourceIndexOptions,
+ health: &IndexHealth,
+) -> Result {
+ let database_fingerprint = database_bundle_fingerprint(path)?;
+ let seed = RepairPlanSeed {
+ database_fingerprint: &database_fingerprint,
+ repository_identity: &options.repository_identity,
+ engine_version: &options.engine_version,
+ source_status: health.status,
+ reason_codes: &health.reason_codes,
+ action: "rebuild",
+ };
+ let fingerprint = format!(
+ "sha256:{}",
+ hex::encode(Sha256::digest(serde_json::to_vec(&seed)?))
+ );
+ let backup_file_name = format!(".memory-recall-source-index-{}.bak", &fingerprint[7..23]);
+ Ok(IndexRepairPlan {
+ fingerprint,
+ database_fingerprint,
+ source_status: health.status,
+ reason_codes: health.reason_codes.clone(),
+ action: "rebuild".to_string(),
+ backup_file_name,
+ })
+}
+
+fn reject_unsafe_repair_path(path: &Path) -> Result<()> {
+ let metadata = fs::symlink_metadata(path)
+ .map_err(|_| anyhow::anyhow!("source_index_repair_source_missing"))?;
+ if !metadata.file_type().is_file() || metadata.file_type().is_symlink() {
+ bail!("source_index_repair_path_invalid");
+ }
+ let parent = path
+ .parent()
+ .ok_or_else(|| anyhow::anyhow!("source_index_repair_parent_required"))?;
+ if fs::symlink_metadata(parent).is_ok_and(|metadata| metadata.file_type().is_symlink()) {
+ bail!("source_index_repair_parent_invalid");
+ }
+ Ok(())
+}
+
+fn database_bundle_fingerprint(path: &Path) -> Result {
+ if !path.is_file() {
+ bail!("source_index_repair_source_missing");
+ }
+ let mut hasher = Sha256::new();
+ let mut buffer = vec![0_u8; HASH_BUFFER_BYTES];
+ for suffix in DATABASE_PARTS {
+ let part = database_part(path, suffix);
+ if !part.exists() {
+ continue;
+ }
+ let metadata = fs::symlink_metadata(&part)
+ .map_err(|_| anyhow::anyhow!("source_index_repair_fingerprint_failed"))?;
+ if !metadata.file_type().is_file() || metadata.file_type().is_symlink() {
+ bail!("source_index_repair_path_invalid");
+ }
+ hasher.update(suffix.as_bytes());
+ hasher.update(metadata.len().to_le_bytes());
+ let mut file = File::open(&part)
+ .map_err(|_| anyhow::anyhow!("source_index_repair_fingerprint_failed"))?;
+ loop {
+ let read = file
+ .read(&mut buffer)
+ .map_err(|_| anyhow::anyhow!("source_index_repair_fingerprint_failed"))?;
+ if read == 0 {
+ break;
+ }
+ hasher.update(&buffer[..read]);
+ }
+ }
+ Ok(format!("sha256:{}", hex::encode(hasher.finalize())))
+}
+
+fn database_bundle_exists(path: &Path) -> bool {
+ DATABASE_PARTS
+ .into_iter()
+ .any(|suffix| database_part(path, suffix).exists())
+}
+
+fn move_database_bundle(source: &Path, destination: &Path) -> Result<()> {
+ if !source.is_file() || database_bundle_exists(destination) {
+ bail!("source_index_repair_move_invalid");
+ }
+ let parts = DATABASE_PARTS
+ .into_iter()
+ .filter_map(|suffix| {
+ let source_part = database_part(source, suffix);
+ source_part
+ .exists()
+ .then(|| (source_part, database_part(destination, suffix)))
+ })
+ .collect::>();
+ let mut moved = Vec::new();
+ for (source_part, destination_part) in &parts {
+ if fs::rename(source_part, destination_part).is_err() {
+ let mut rollback_failed = false;
+ for (rollback_source, rollback_destination) in moved.into_iter().rev() {
+ rollback_failed |= fs::rename(rollback_destination, rollback_source).is_err();
+ }
+ if rollback_failed {
+ bail!("source_index_repair_rollback_failed");
+ }
+ bail!("source_index_repair_move_failed");
+ }
+ moved.push((source_part, destination_part));
+ }
+ Ok(())
+}
+
+fn restore_backup(path: &Path, backup_path: &Path, candidate_path: &Path) -> Result<()> {
+ remove_database_bundle(candidate_path)?;
+ remove_database_bundle(path)?;
+ move_database_bundle(backup_path, path)
+ .map_err(|_| anyhow::anyhow!("source_index_repair_rollback_failed"))
+}
+
+fn remove_database_bundle(path: &Path) -> Result<()> {
+ for suffix in DATABASE_PARTS {
+ let part = database_part(path, suffix);
+ match fs::symlink_metadata(&part) {
+ Ok(metadata) if metadata.file_type().is_file() => fs::remove_file(part)
+ .map_err(|_| anyhow::anyhow!("source_index_repair_cleanup_failed"))?,
+ Ok(_) => bail!("source_index_repair_cleanup_failed"),
+ Err(error) if error.kind() == std::io::ErrorKind::NotFound => {}
+ Err(_) => bail!("source_index_repair_cleanup_failed"),
+ }
+ }
+ Ok(())
+}
+
+fn database_part(path: &Path, suffix: &str) -> PathBuf {
+ if suffix.is_empty() {
+ return path.to_path_buf();
+ }
+ let mut value: OsString = path.as_os_str().to_owned();
+ value.push(suffix);
+ PathBuf::from(value)
+}
diff --git a/rust/oaf-index/src/lib.rs b/rust/oaf-index/src/lib.rs
new file mode 100644
index 00000000..a0563825
--- /dev/null
+++ b/rust/oaf-index/src/lib.rs
@@ -0,0 +1,2657 @@
+use anyhow::{bail, Context, Result};
+use rusqlite::{
+ params, params_from_iter, types::Value as SqlValue, Connection, OpenFlags, OptionalExtension,
+};
+use sha2::{Digest, Sha256};
+use std::collections::{BTreeMap, BTreeSet, VecDeque};
+use std::fs;
+use std::path::{Path, PathBuf};
+use std::time::{Duration, Instant};
+
+mod doctor;
+pub use doctor::*;
+mod model;
+pub use model::*;
+pub mod registry;
+pub use registry::*;
+mod watcher;
+pub use watcher::*;
+
+pub const SCHEMA_VERSION: i64 = 1;
+pub const COMMUNITY_ALGORITHM_VERSION: &str = "label-propagation-v1";
+pub const PROCESS_ALGORITHM_VERSION: &str = "entry-path-v1";
+fn projection_cursor(kind: u8, generation: i64, offset: usize) -> String {
+ format!("cinode_{kind:02x}{:014x}{offset:016x}", generation.max(0))
+}
+fn projection_offset(cursor: Option<&String>, kind: u8, generation: i64) -> Result {
+ let Some(cursor) = cursor else {
+ return Ok(0);
+ };
+ let suffix = cursor
+ .strip_prefix("cinode_")
+ .context("source_index_projection_cursor_invalid")?;
+ if suffix.len() != 32
+ || !suffix.bytes().all(|b| b.is_ascii_hexdigit())
+ || suffix[..2] != format!("{kind:02x}")
+ || u64::from_str_radix(&suffix[2..16], 16).ok() != Some(generation.max(0) as u64)
+ {
+ bail!("source_index_projection_cursor_stale");
+ }
+ usize::from_str_radix(&suffix[16..], 16).context("source_index_projection_cursor_invalid")
+}
+const COMMUNITY_MAX_PASSES: usize = 8;
+const COMMUNITY_SCAN_NODE_LIMIT: usize = 5_000;
+const COMMUNITY_SCAN_EDGE_LIMIT: usize = 20_000;
+const PROCESS_MIN_CONFIDENCE: f64 = 0.75;
+const PROCESS_ENTRY_KINDS: &[&str] = &["entry_point", "handles_route"];
+const PROCESS_STEP_KINDS: &[&str] = &[
+ "calls",
+ "constructs",
+ "depends_on",
+ "emits",
+ "handles_route",
+ "listens",
+ "process_step",
+ "reads",
+ "writes",
+];
+const MIGRATION_ID: &str = "0001_source_index";
+const MIGRATION_SQL: &str = r#"
+CREATE TABLE index_metadata (
+ singleton INTEGER PRIMARY KEY CHECK (singleton = 1),
+ schema_version INTEGER NOT NULL,
+ repository_identity TEXT NOT NULL,
+ engine_version TEXT NOT NULL,
+ ignore_fingerprint TEXT,
+ active_generation INTEGER,
+ created_at TEXT NOT NULL,
+ updated_at TEXT NOT NULL
+) STRICT;
+CREATE TABLE index_migrations (
+ migration_id TEXT PRIMARY KEY,
+ checksum TEXT NOT NULL,
+ applied_at TEXT NOT NULL
+) STRICT;
+CREATE TABLE index_generations (
+ id INTEGER PRIMARY KEY,
+ parent_id INTEGER REFERENCES index_generations(id),
+ state TEXT NOT NULL CHECK (state IN ('staging', 'committed', 'failed')),
+ reason TEXT NOT NULL,
+ created_at TEXT NOT NULL,
+ committed_at TEXT,
+ file_count INTEGER NOT NULL DEFAULT 0,
+ node_count INTEGER NOT NULL DEFAULT 0,
+ edge_count INTEGER NOT NULL DEFAULT 0,
+ unresolved_count INTEGER NOT NULL DEFAULT 0,
+ diagnostic_count INTEGER NOT NULL DEFAULT 0,
+ structural_fingerprint TEXT,
+ ignore_fingerprint TEXT
+) STRICT;
+CREATE TABLE index_files (
+ generation_id INTEGER NOT NULL REFERENCES index_generations(id) ON DELETE CASCADE,
+ ordinal INTEGER NOT NULL,
+ locator TEXT NOT NULL,
+ content_hash TEXT NOT NULL,
+ byte_size INTEGER NOT NULL,
+ language TEXT NOT NULL,
+ parse_state TEXT NOT NULL,
+ diagnostic_count INTEGER NOT NULL DEFAULT 0,
+ owner_identity TEXT NOT NULL,
+ PRIMARY KEY (generation_id, locator)
+) WITHOUT ROWID, STRICT;
+CREATE TABLE index_nodes (
+ generation_id INTEGER NOT NULL REFERENCES index_generations(id) ON DELETE CASCADE,
+ ordinal INTEGER NOT NULL,
+ canonical_id TEXT NOT NULL,
+ kind TEXT NOT NULL,
+ language_kind TEXT NOT NULL,
+ qualified_name TEXT NOT NULL,
+ locator TEXT NOT NULL,
+ start_line INTEGER NOT NULL,
+ end_line INTEGER NOT NULL,
+ content_hash TEXT,
+ visibility TEXT NOT NULL,
+ PRIMARY KEY (generation_id, canonical_id)
+) WITHOUT ROWID, STRICT;
+CREATE TABLE index_edges (
+ generation_id INTEGER NOT NULL REFERENCES index_generations(id) ON DELETE CASCADE,
+ ordinal INTEGER NOT NULL,
+ canonical_id TEXT NOT NULL,
+ source_id TEXT NOT NULL,
+ target_id TEXT NOT NULL,
+ kind TEXT NOT NULL,
+ locator TEXT NOT NULL,
+ start_line INTEGER NOT NULL,
+ end_line INTEGER NOT NULL,
+ resolver TEXT NOT NULL,
+ resolver_version TEXT NOT NULL,
+ confidence REAL NOT NULL CHECK (confidence >= 0 AND confidence <= 1),
+ resolution_class TEXT NOT NULL,
+ stale INTEGER NOT NULL CHECK (stale IN (0, 1)),
+ PRIMARY KEY (generation_id, canonical_id)
+) WITHOUT ROWID, STRICT;
+CREATE TABLE index_unresolved (
+ generation_id INTEGER NOT NULL REFERENCES index_generations(id) ON DELETE CASCADE,
+ ordinal INTEGER NOT NULL,
+ canonical_id TEXT NOT NULL,
+ source_id TEXT NOT NULL,
+ relationship_kind TEXT NOT NULL,
+ target_text_hash TEXT NOT NULL,
+ locator TEXT NOT NULL,
+ start_line INTEGER NOT NULL,
+ end_line INTEGER NOT NULL,
+ reason_code TEXT NOT NULL,
+ confidence_class TEXT NOT NULL,
+ PRIMARY KEY (generation_id, canonical_id)
+) WITHOUT ROWID, STRICT;
+CREATE TABLE index_coverage (
+ generation_id INTEGER NOT NULL REFERENCES index_generations(id) ON DELETE CASCADE,
+ ordinal INTEGER NOT NULL,
+ language TEXT NOT NULL,
+ capability TEXT NOT NULL,
+ represented_count INTEGER NOT NULL,
+ omitted_count INTEGER NOT NULL,
+ failed_count INTEGER NOT NULL,
+ reason_code TEXT,
+ PRIMARY KEY (generation_id, language, capability)
+) WITHOUT ROWID, STRICT;
+CREATE TABLE index_diagnostics (
+ generation_id INTEGER NOT NULL REFERENCES index_generations(id) ON DELETE CASCADE,
+ ordinal INTEGER NOT NULL,
+ canonical_id TEXT NOT NULL,
+ severity TEXT NOT NULL,
+ code TEXT NOT NULL,
+ locator TEXT NOT NULL,
+ start_line INTEGER NOT NULL,
+ end_line INTEGER NOT NULL,
+ message_hash TEXT NOT NULL,
+ PRIMARY KEY (generation_id, canonical_id)
+) WITHOUT ROWID, STRICT;
+CREATE TABLE index_health (
+ singleton INTEGER PRIMARY KEY CHECK (singleton = 1),
+ integrity_status TEXT NOT NULL,
+ interrupted_generation INTEGER,
+ last_successful_refresh_at TEXT,
+ repair_reason_code TEXT,
+ updated_at TEXT NOT NULL
+) STRICT;
+CREATE INDEX index_nodes_name ON index_nodes (generation_id, qualified_name, canonical_id);
+CREATE INDEX index_nodes_locator ON index_nodes (generation_id, locator, canonical_id);
+CREATE INDEX index_edges_source ON index_edges (generation_id, source_id, kind, canonical_id);
+CREATE INDEX index_edges_target ON index_edges (generation_id, target_id, kind, canonical_id);
+"#;
+
+pub fn repository_identity_hash(root: &Path, workspace_id: &str) -> String {
+ let mut hasher = Sha256::new();
+ hasher.update(root.as_os_str().to_string_lossy().as_bytes());
+ hasher.update([0]);
+ hasher.update(workspace_id.as_bytes());
+ format!("sha256:{}", hex::encode(hasher.finalize()))
+}
+
+#[derive(Debug, Clone)]
+pub struct SourceIndexOptions {
+ pub repository_identity: String,
+ pub engine_version: String,
+}
+
+impl SourceIndexOptions {
+ pub fn new(repository_identity: impl Into, engine_version: impl Into) -> Self {
+ Self {
+ repository_identity: repository_identity.into(),
+ engine_version: engine_version.into(),
+ }
+ }
+}
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
+#[serde(rename_all = "kebab-case")]
+pub enum HealthStatus {
+ Absent,
+ Ready,
+ Stale,
+ MigrationRequired,
+ Interrupted,
+ Corrupt,
+ WrongRepository,
+ UnsupportedSchema,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
+pub struct IndexHealth {
+ pub status: HealthStatus,
+ pub reason_codes: Vec,
+ pub active_generation: Option,
+ pub schema_version: Option,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
+pub struct ActiveGenerationMetadata {
+ pub summary: GenerationSummary,
+ pub files: Vec,
+ pub coverage: Vec,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct CommunityProjection {
+ pub id: String,
+ pub label: String,
+ pub path_prefix: String,
+ pub node_ids: Vec,
+ pub relationship_ids: Vec,
+ pub represented_node_count: usize,
+ pub represented_relationship_count: usize,
+ pub generation: i64,
+ pub algorithm_version: String,
+ pub truncated: bool,
+}
+
+#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct ProcessProjection {
+ pub id: String,
+ pub label: String,
+ pub entry_node_id: String,
+ pub entry_relationship_id: String,
+ pub sink_node_id: String,
+ pub sink_kind: String,
+ pub node_ids: Vec,
+ pub relationship_ids: Vec,
+ pub confidence: f64,
+ pub generation: i64,
+ pub algorithm_version: String,
+ pub truncated: bool,
+}
+
+#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
+pub struct GraphProjection {
+ pub items: Vec,
+ pub nodes: Vec,
+ pub edges: Vec,
+ pub truncated: bool,
+ pub next_cursor: Option,
+}
+
+pub struct SourceIndex {
+ connection: Connection,
+ _path: PathBuf,
+ engine_version: String,
+}
+
+impl SourceIndex {
+ pub fn open(path: &Path, options: &SourceIndexOptions) -> Result {
+ validate_options(options)?;
+ let parent = path.parent().context("source_index_parent_required")?;
+ fs::create_dir_all(parent).context("source_index_parent_create_failed")?;
+ secure_permissions(parent, 0o700)?;
+ let connection = Connection::open(path).context("source_index_open_failed")?;
+ configure_writer(&connection)?;
+ migrate(&connection, options)?;
+ secure_permissions(path, 0o600)?;
+ validate_current(&connection, options)?;
+ Ok(Self {
+ connection,
+ _path: path.to_path_buf(),
+ engine_version: options.engine_version.clone(),
+ })
+ }
+
+ pub fn open_read_only(path: &Path, options: &SourceIndexOptions) -> Result {
+ validate_options(options)?;
+ let connection =
+ open_read_only_connection(path).context("source_index_read_only_open_failed")?;
+ connection
+ .pragma_update(None, "foreign_keys", "ON")
+ .context("source_index_foreign_keys_failed")?;
+ connection
+ .pragma_update(None, "query_only", "ON")
+ .context("source_index_query_only_failed")?;
+ validate_current(&connection, options)?;
+ Ok(Self {
+ connection,
+ _path: path.to_path_buf(),
+ engine_version: options.engine_version.clone(),
+ })
+ }
+
+ pub fn schema_version(&self) -> i64 {
+ self.connection
+ .pragma_query_value(None, "user_version", |row| row.get(0))
+ .unwrap_or_default()
+ }
+
+ pub fn active_generation(&self) -> Option {
+ self.connection
+ .query_row(
+ "SELECT active_generation FROM index_metadata WHERE singleton = 1",
+ [],
+ |row| row.get(0),
+ )
+ .optional()
+ .ok()
+ .flatten()
+ .flatten()
+ }
+
+ pub fn journal_mode(&self) -> String {
+ self.connection
+ .pragma_query_value(None, "journal_mode", |row| row.get(0))
+ .unwrap_or_else(|_| "unknown".to_string())
+ }
+
+ pub fn foreign_keys_enabled(&self) -> bool {
+ self.connection
+ .pragma_query_value(None, "foreign_keys", |row| row.get::<_, i64>(0))
+ .is_ok_and(|value| value == 1)
+ }
+
+ pub fn commit_generation(&mut self, input: &GenerationInput) -> Result {
+ validate_generation(input)?;
+ let transaction = self.connection.transaction()?;
+ let parent_id = transaction.query_row(
+ "SELECT active_generation FROM index_metadata WHERE singleton = 1",
+ [],
+ |row| row.get::<_, Option>(0),
+ )?;
+ let generation_id = transaction.query_row(
+ "SELECT COALESCE(MAX(id), 0) + 1 FROM index_generations",
+ [],
+ |row| row.get::<_, i64>(0),
+ )?;
+ transaction.execute(
+ "INSERT INTO index_generations (id, parent_id, state, reason, created_at, structural_fingerprint, ignore_fingerprint) VALUES (?1, ?2, 'staging', ?3, ?4, ?5, ?6)",
+ params![generation_id, parent_id, input.reason, input.created_at, input.structural_fingerprint, input.ignore_fingerprint],
+ )?;
+ insert_generation_records(&transaction, generation_id, input)?;
+ let committed_at = timestamp_token();
+ let file_count = count_i64(input.files.len())?;
+ let node_count = count_i64(input.nodes.len())?;
+ let edge_count = count_i64(input.edges.len())?;
+ let unresolved_count = count_i64(input.unresolved.len())?;
+ let diagnostic_count = count_i64(input.diagnostics.len())?;
+ transaction.execute(
+ "UPDATE index_generations SET state = 'committed', committed_at = ?2, file_count = ?3, node_count = ?4, edge_count = ?5, unresolved_count = ?6, diagnostic_count = ?7 WHERE id = ?1 AND state = 'staging'",
+ params![generation_id, committed_at, file_count, node_count, edge_count, unresolved_count, diagnostic_count],
+ )?;
+ transaction.execute(
+ "UPDATE index_metadata SET active_generation = ?1, ignore_fingerprint = ?2, engine_version = ?3, updated_at = ?4 WHERE singleton = 1",
+ params![generation_id, input.ignore_fingerprint, self.engine_version, committed_at],
+ )?;
+ transaction.execute(
+ "UPDATE index_health SET integrity_status = 'ready', interrupted_generation = NULL, last_successful_refresh_at = ?1, repair_reason_code = NULL, updated_at = ?1 WHERE singleton = 1",
+ [&committed_at],
+ )?;
+ transaction.execute(
+ "UPDATE index_generations SET parent_id = NULL WHERE state = 'committed' AND id != ?1",
+ [generation_id],
+ )?;
+ transaction.execute(
+ "DELETE FROM index_generations WHERE state = 'committed' AND id NOT IN (SELECT id FROM index_generations WHERE state = 'committed' ORDER BY id DESC LIMIT 2)",
+ [],
+ )?;
+ transaction.commit()?;
+ let (busy, log_frames, checkpointed_frames) =
+ self.connection
+ .query_row("PRAGMA wal_checkpoint(FULL)", [], |row| {
+ Ok((
+ row.get::<_, i64>(0)?,
+ row.get::<_, i64>(1)?,
+ row.get::<_, i64>(2)?,
+ ))
+ })?;
+ if busy != 0 || log_frames != checkpointed_frames {
+ bail!("source_index_checkpoint_incomplete");
+ }
+ Ok(GenerationSummary {
+ id: generation_id,
+ parent_id,
+ reason: input.reason.clone(),
+ created_at: input.created_at.clone(),
+ committed_at,
+ file_count,
+ node_count,
+ edge_count,
+ unresolved_count,
+ diagnostic_count,
+ structural_fingerprint: input.structural_fingerprint.clone(),
+ ignore_fingerprint: input.ignore_fingerprint.clone(),
+ })
+ }
+
+ pub fn generation_summaries(&self, limit: usize) -> Result> {
+ if !(1..=100).contains(&limit) {
+ bail!("source_index_query_limit_invalid");
+ }
+ let mut statement = self.connection.prepare(
+ "SELECT id, parent_id, reason, created_at, committed_at, file_count, node_count, edge_count, unresolved_count, diagnostic_count, structural_fingerprint, ignore_fingerprint FROM index_generations WHERE state = 'committed' ORDER BY id DESC LIMIT ?1",
+ )?;
+ let summaries = statement
+ .query_map([count_i64(limit)?], row_to_summary)?
+ .collect::>>()
+ .context("source_index_generation_summary_failed")?;
+ Ok(summaries)
+ }
+
+ pub fn load_active_generation(&self) -> Result> {
+ self.active_generation()
+ .map(|generation_id| self.load_generation(generation_id))
+ .transpose()
+ }
+
+ pub fn load_active_generation_metadata(&self) -> Result > {
+ self.active_generation()
+ .map(|generation_id| {
+ let summary = load_generation_summary(&self.connection, generation_id)?;
+ let files = load_generation_files(&self.connection, generation_id)?;
+ let coverage = load_generation_coverage(&self.connection, generation_id)?;
+ Ok(ActiveGenerationMetadata {
+ summary,
+ files,
+ coverage,
+ })
+ })
+ .transpose()
+ }
+
+ pub fn load_generation(&self, generation_id: i64) -> Result {
+ let summary = load_generation_summary(&self.connection, generation_id)?;
+ let input = load_generation_records(&self.connection, &summary)?;
+ Ok(StoredGeneration { summary, input })
+ }
+
+ pub fn plan_refresh(
+ &self,
+ current_files: &[DiscoveredFile],
+ ignore_fingerprint: Option<&str>,
+ bounds: &RefreshBounds,
+ ) -> Result {
+ validate_refresh_bounds(bounds)?;
+ if let Some(fingerprint) = ignore_fingerprint {
+ validate_hash(fingerprint)?;
+ }
+ let mut current = BTreeMap::new();
+ for file in current_files {
+ validate_locator(&file.locator)?;
+ validate_hash(&file.content_hash)?;
+ if file.byte_size < 0 || current.insert(file.locator.clone(), file).is_some() {
+ bail!("source_index_refresh_discovery_invalid");
+ }
+ }
+ let Some(active) = self.load_active_generation_metadata()? else {
+ let added_files = current.keys().cloned().collect::>();
+ return Ok(RefreshPlan {
+ invalidated_files: added_files.clone(),
+ added_files,
+ changed_files: Vec::new(),
+ deleted_files: Vec::new(),
+ renamed_files: Vec::new(),
+ unchanged_file_count: 0,
+ ignore_rules_changed: ignore_fingerprint.is_some(),
+ truncated: false,
+ no_change: false,
+ reason_codes: vec!["source_index_initial_build".to_string()],
+ });
+ };
+ let previous = active
+ .files
+ .iter()
+ .map(|file| (file.locator.clone(), file))
+ .collect::>();
+ let mut added = current
+ .keys()
+ .filter(|locator| !previous.contains_key(*locator))
+ .cloned()
+ .collect::>();
+ let mut deleted = previous
+ .keys()
+ .filter(|locator| !current.contains_key(*locator))
+ .cloned()
+ .collect::>();
+ let changed = current
+ .iter()
+ .filter(|(locator, file)| {
+ previous.get(*locator).is_some_and(|old| {
+ old.content_hash != file.content_hash || old.byte_size != file.byte_size
+ })
+ })
+ .map(|(locator, _)| locator.clone())
+ .collect::>();
+ let unchanged_file_count = current
+ .iter()
+ .filter(|(locator, file)| {
+ previous.get(*locator).is_some_and(|old| {
+ old.content_hash == file.content_hash && old.byte_size == file.byte_size
+ })
+ })
+ .count();
+ let renamed_files = detect_renames(&previous, ¤t, &added, &deleted);
+ for rename in &renamed_files {
+ added.remove(&rename.to_locator);
+ deleted.remove(&rename.from_locator);
+ }
+ let ignore_rules_changed =
+ active.summary.ignore_fingerprint.as_deref() != ignore_fingerprint;
+ let no_change = added.is_empty()
+ && deleted.is_empty()
+ && changed.is_empty()
+ && renamed_files.is_empty()
+ && !ignore_rules_changed;
+ if no_change {
+ return Ok(RefreshPlan {
+ added_files: Vec::new(),
+ changed_files: Vec::new(),
+ deleted_files: Vec::new(),
+ renamed_files: Vec::new(),
+ invalidated_files: Vec::new(),
+ unchanged_file_count,
+ ignore_rules_changed: false,
+ truncated: false,
+ no_change: true,
+ reason_codes: vec!["source_index_no_change".to_string()],
+ });
+ }
+ let mut seed_files = changed.clone();
+ seed_files.extend(deleted.iter().cloned());
+ seed_files.extend(
+ renamed_files
+ .iter()
+ .map(|rename| rename.from_locator.clone()),
+ );
+ let (mut invalidated, mut truncated) = if ignore_rules_changed {
+ (current.keys().cloned().collect::>(), false)
+ } else {
+ let active = self.load_generation(active.summary.id)?;
+ invalidation_closure(&active.input, &seed_files, bounds)
+ };
+ invalidated.extend(added.iter().cloned());
+ invalidated.extend(renamed_files.iter().map(|rename| rename.to_locator.clone()));
+ invalidated.retain(|locator| current.contains_key(locator));
+ if invalidated.len() > bounds.max_invalidated_files {
+ invalidated = invalidated
+ .into_iter()
+ .take(bounds.max_invalidated_files)
+ .collect();
+ truncated = true;
+ }
+ let mut reason_codes = Vec::new();
+ for (present, code) in [
+ (!changed.is_empty(), "source_index_content_changed"),
+ (!added.is_empty(), "source_index_files_added"),
+ (!deleted.is_empty(), "source_index_files_deleted"),
+ (!renamed_files.is_empty(), "source_index_files_renamed"),
+ (ignore_rules_changed, "source_index_ignore_rules_changed"),
+ (truncated, "source_index_invalidation_truncated"),
+ ] {
+ if present {
+ reason_codes.push(code.to_string());
+ }
+ }
+ Ok(RefreshPlan {
+ added_files: added.into_iter().collect(),
+ changed_files: changed.into_iter().collect(),
+ deleted_files: deleted.into_iter().collect(),
+ renamed_files,
+ invalidated_files: invalidated.into_iter().collect(),
+ unchanged_file_count,
+ ignore_rules_changed,
+ truncated,
+ no_change: false,
+ reason_codes,
+ })
+ }
+
+ pub fn commit_incremental(
+ &mut self,
+ plan: &RefreshPlan,
+ replacement: &GenerationInput,
+ ) -> Result {
+ if plan.no_change {
+ let summary = self
+ .generation_summaries(1)?
+ .into_iter()
+ .next()
+ .context("source_index_active_generation_missing")?;
+ return Ok(RefreshCommit {
+ summary,
+ wrote: false,
+ invalidated_file_count: 0,
+ });
+ }
+ if plan.truncated {
+ bail!("source_index_refresh_plan_truncated");
+ }
+ let replacement_files = replacement
+ .files
+ .iter()
+ .map(|file| file.locator.as_str())
+ .collect::>();
+ if plan
+ .invalidated_files
+ .iter()
+ .any(|locator| !replacement_files.contains(locator.as_str()))
+ {
+ bail!("source_index_refresh_replacement_incomplete");
+ }
+ let active = self
+ .load_active_generation()?
+ .context("source_index_active_generation_missing")?;
+ let merged = merge_incremental_generation(&active.input, replacement, plan)?;
+ let summary = self.commit_generation(&merged)?;
+ Ok(RefreshCommit {
+ summary,
+ wrote: true,
+ invalidated_file_count: plan.invalidated_files.len(),
+ })
+ }
+
+ pub fn find_nodes(&self, query: &str, bounds: &QueryBounds) -> Result> {
+ validate_query_bounds(bounds)?;
+ validate_query_text(query)?;
+ let started = Instant::now();
+ let Some(generation_id) = self.active_generation() else {
+ return Ok(QueryPage {
+ items: Vec::new(),
+ next_cursor: None,
+ });
+ };
+ let cursor = bounds.cursor.as_deref().unwrap_or("");
+ let terms = search_terms(query);
+ let query_with = |connector: &str| -> Result> {
+ let predicates = terms
+ .iter()
+ .enumerate()
+ .map(|(index, _)| {
+ let parameter = index + 3;
+ format!("(lower(qualified_name) LIKE ?{parameter} ESCAPE '\\' OR lower(locator) LIKE ?{parameter} ESCAPE '\\')")
+ })
+ .collect::>()
+ .join(connector);
+ let limit_parameter = terms.len() + 3;
+ let sql = format!(
+ "SELECT canonical_id, kind, language_kind, qualified_name, locator, start_line, end_line, content_hash, visibility FROM index_nodes WHERE generation_id = ?1 AND canonical_id > ?2 AND {predicates} ORDER BY canonical_id LIMIT ?{limit_parameter}"
+ );
+ let mut parameters = Vec::with_capacity(terms.len() + 3);
+ parameters.push(SqlValue::Integer(generation_id));
+ parameters.push(SqlValue::Text(cursor.to_string()));
+ parameters.extend(
+ terms
+ .iter()
+ .map(|term| SqlValue::Text(format!("%{}%", escape_like(term)))),
+ );
+ parameters.push(SqlValue::Integer(count_i64(bounds.limit + 1)?));
+ let mut statement = self.connection.prepare(&sql)?;
+ let items = statement
+ .query_map(params_from_iter(parameters.iter()), row_to_node)?
+ .collect::>>()?;
+ Ok(items)
+ };
+ let mut items = query_with(" AND ")?;
+ if items.is_empty() && terms.len() > 1 {
+ items = query_with(" OR ")?;
+ }
+ ensure_deadline(started, bounds)?;
+ bounded_page(items, bounds)
+ }
+
+ pub fn find_exact_nodes(
+ &self,
+ query: &str,
+ bounds: &QueryBounds,
+ ) -> Result> {
+ validate_query_bounds(bounds)?;
+ validate_query_text(query)?;
+ let started = Instant::now();
+ let Some(generation_id) = self.active_generation() else {
+ return Ok(QueryPage {
+ items: Vec::new(),
+ next_cursor: None,
+ });
+ };
+ let cursor = bounds.cursor.as_deref().unwrap_or("");
+ let mut statement = self.connection.prepare(
+ "SELECT canonical_id, kind, language_kind, qualified_name, locator, start_line, end_line, content_hash, visibility FROM index_nodes WHERE generation_id = ?1 AND canonical_id > ?2 AND (canonical_id = ?3 OR qualified_name = ?3 OR locator = ?3 OR (length(qualified_name) > length(?3) + 2 AND substr(qualified_name, -(length(?3) + 2)) = '::' || ?3)) ORDER BY canonical_id LIMIT ?4",
+ )?;
+ let items = statement
+ .query_map(
+ params![generation_id, cursor, query, count_i64(bounds.limit + 1)?],
+ row_to_node,
+ )?
+ .collect::>>()?;
+ ensure_deadline(started, bounds)?;
+ bounded_page(items, bounds)
+ }
+
+ pub fn dependency_edges(
+ &self,
+ node_id: &str,
+ direction: EdgeDirection,
+ bounds: &QueryBounds,
+ ) -> Result> {
+ self.dependency_edges_with_kinds(node_id, direction, bounds, None)
+ }
+
+ fn dependency_edges_with_kinds(
+ &self,
+ node_id: &str,
+ direction: EdgeDirection,
+ bounds: &QueryBounds,
+ edge_kinds: Option<&BTreeSet>,
+ ) -> Result> {
+ validate_query_bounds(bounds)?;
+ validate_identifier(node_id)?;
+ let started = Instant::now();
+ let Some(generation_id) = self.active_generation() else {
+ return Ok(QueryPage {
+ items: Vec::new(),
+ next_cursor: None,
+ });
+ };
+ let predicate = match direction {
+ EdgeDirection::Incoming => "target_id = ?2",
+ EdgeDirection::Outgoing => "source_id = ?2",
+ EdgeDirection::Both => "(source_id = ?2 OR target_id = ?2)",
+ };
+ let edge_kind_predicate = edge_kinds.map_or_else(String::new, |kinds| {
+ let parameters = (0..kinds.len())
+ .map(|index| format!("?{}", index + 4))
+ .collect::>()
+ .join(", ");
+ format!(" AND kind IN ({parameters})")
+ });
+ let limit_parameter = edge_kinds.map_or(4, |kinds| kinds.len() + 4);
+ let sql = format!(
+ "SELECT canonical_id, source_id, target_id, kind, locator, start_line, end_line, resolver, resolver_version, confidence, resolution_class, stale FROM index_edges WHERE generation_id = ?1 AND {predicate} AND canonical_id > ?3{edge_kind_predicate} ORDER BY canonical_id LIMIT ?{limit_parameter}"
+ );
+ let mut parameters = vec![
+ SqlValue::Integer(generation_id),
+ SqlValue::Text(node_id.to_string()),
+ SqlValue::Text(bounds.cursor.clone().unwrap_or_default()),
+ ];
+ if let Some(kinds) = edge_kinds {
+ parameters.extend(kinds.iter().cloned().map(SqlValue::Text));
+ }
+ parameters.push(SqlValue::Integer(count_i64(bounds.limit + 1)?));
+ let mut statement = self.connection.prepare(&sql)?;
+ let items = statement
+ .query_map(params_from_iter(parameters.iter()), row_to_edge)?
+ .collect::>>()?;
+ ensure_deadline(started, bounds)?;
+ bounded_page(items, bounds)
+ }
+
+ pub fn impact_edges(
+ &self,
+ node_id: &str,
+ bounds: &QueryBounds,
+ ) -> Result> {
+ self.dependency_edges(node_id, EdgeDirection::Incoming, bounds)
+ }
+
+ pub fn node(&self, node_id: &str) -> Result> {
+ validate_identifier(node_id)?;
+ let Some(generation_id) = self.active_generation() else {
+ return Ok(None);
+ };
+ self.node_by_id(generation_id, node_id)
+ }
+
+ pub fn edge(&self, edge_id: &str) -> Result > {
+ validate_identifier(edge_id)?;
+ let Some(generation_id) = self.active_generation() else {
+ return Ok(None);
+ };
+ self.connection
+ .query_row(
+ "SELECT canonical_id, source_id, target_id, kind, locator, start_line, end_line, resolver, resolver_version, confidence, resolution_class, stale FROM index_edges WHERE generation_id = ?1 AND canonical_id = ?2",
+ params![generation_id, edge_id],
+ row_to_edge,
+ )
+ .optional()
+ .context("source_index_edge_query_failed")
+ }
+
+ pub fn nodes_by_kind(&self, kind: &str, bounds: &QueryBounds) -> Result> {
+ validate_query_bounds(bounds)?;
+ validate_token(kind, "source_index_node_kind_invalid")?;
+ let started = Instant::now();
+ let Some(generation_id) = self.active_generation() else {
+ return Ok(QueryPage {
+ items: Vec::new(),
+ next_cursor: None,
+ });
+ };
+ let cursor = bounds.cursor.as_deref().unwrap_or("");
+ let mut statement = self.connection.prepare(
+ "SELECT canonical_id, kind, language_kind, qualified_name, locator, start_line, end_line, content_hash, visibility FROM index_nodes WHERE generation_id = ?1 AND kind = ?2 AND canonical_id > ?3 ORDER BY canonical_id LIMIT ?4",
+ )?;
+ let items = statement
+ .query_map(
+ params![generation_id, kind, cursor, count_i64(bounds.limit + 1)?],
+ row_to_node,
+ )?
+ .collect::>>()?;
+ ensure_deadline(started, bounds)?;
+ bounded_page(items, bounds)
+ }
+
+ pub fn neighborhood(&self, node_id: &str, bounds: &QueryBounds) -> Result {
+ self.dependency_neighborhood(node_id, EdgeDirection::Both, bounds)
+ }
+
+ pub fn dependency_neighborhood(
+ &self,
+ node_id: &str,
+ direction: EdgeDirection,
+ bounds: &QueryBounds,
+ ) -> Result {
+ self.dependency_neighborhood_inner(node_id, direction, bounds, None)
+ }
+
+ pub fn dependency_neighborhood_with_kinds(
+ &self,
+ node_id: &str,
+ direction: EdgeDirection,
+ bounds: &QueryBounds,
+ edge_kinds: &BTreeSet,
+ ) -> Result {
+ self.dependency_neighborhood_inner(node_id, direction, bounds, Some(edge_kinds))
+ }
+
+ fn dependency_neighborhood_inner(
+ &self,
+ node_id: &str,
+ direction: EdgeDirection,
+ bounds: &QueryBounds,
+ edge_kinds: Option<&BTreeSet>,
+ ) -> Result {
+ validate_query_bounds(bounds)?;
+ validate_identifier(node_id)?;
+ let Some(generation_id) = self.active_generation() else {
+ return Ok(GraphNeighborhood {
+ nodes: Vec::new(),
+ edges: Vec::new(),
+ truncated: false,
+ });
+ };
+ let started = Instant::now();
+ let mut nodes = BTreeMap::new();
+ let Some(seed) = self.node_by_id(generation_id, node_id)? else {
+ return Ok(GraphNeighborhood {
+ nodes: Vec::new(),
+ edges: Vec::new(),
+ truncated: false,
+ });
+ };
+ nodes.insert(seed.canonical_id.clone(), seed);
+ let mut edges = BTreeMap::new();
+ let mut frontier = vec![node_id.to_string()];
+ let mut truncated = false;
+ for _ in 0..bounds.max_depth {
+ let mut next = BTreeSet::new();
+ for current in frontier {
+ ensure_deadline(started, bounds)?;
+ let elapsed_ms = u64::try_from(started.elapsed().as_millis()).unwrap_or(u64::MAX);
+ let mut edge_bounds = bounds.clone();
+ edge_bounds.limit = bounds.limit;
+ edge_bounds.cursor = None;
+ edge_bounds.timeout_ms = bounds.timeout_ms.saturating_sub(elapsed_ms).max(1);
+ let page = self.dependency_edges_with_kinds(
+ ¤t,
+ direction,
+ &edge_bounds,
+ edge_kinds,
+ )?;
+ ensure_deadline(started, bounds)?;
+ truncated |= page.next_cursor.is_some();
+ for edge in page.items {
+ if edges.len() >= bounds.limit {
+ truncated = true;
+ break;
+ }
+ let other = match direction {
+ EdgeDirection::Incoming => edge.source_id.clone(),
+ EdgeDirection::Outgoing => edge.target_id.clone(),
+ EdgeDirection::Both if edge.source_id == current => edge.target_id.clone(),
+ EdgeDirection::Both => edge.source_id.clone(),
+ };
+ if !nodes.contains_key(&other) {
+ if nodes.len() >= bounds.limit {
+ truncated = true;
+ continue;
+ }
+ if let Some(node) = self.node_by_id(generation_id, &other)? {
+ nodes.insert(other.clone(), node);
+ next.insert(other);
+ }
+ }
+ edges.entry(edge.canonical_id.clone()).or_insert(edge);
+ }
+ }
+ if next.is_empty() {
+ break;
+ }
+ frontier = next.into_iter().collect();
+ }
+ let result = GraphNeighborhood {
+ nodes: nodes.into_values().collect(),
+ edges: edges.into_values().collect(),
+ truncated,
+ };
+ ensure_deadline(started, bounds)?;
+ enforce_output_bound(&result, bounds)?;
+ Ok(result)
+ }
+
+ pub fn trace_routes(
+ &self,
+ from_node_id: &str,
+ to_node_id: &str,
+ bounds: &QueryBounds,
+ ) -> Result {
+ validate_query_bounds(bounds)?;
+ validate_identifier(from_node_id)?;
+ validate_identifier(to_node_id)?;
+ let started = Instant::now();
+ let mut queue = VecDeque::from([GraphRoute {
+ node_ids: vec![from_node_id.to_string()],
+ edge_ids: Vec::new(),
+ }]);
+ let max_queue = bounds.limit.saturating_mul(bounds.max_depth.max(1));
+ let mut routes = Vec::new();
+ let mut truncated = false;
+ 'search: while let Some(route) = queue.pop_front() {
+ ensure_deadline(started, bounds)?;
+ if route.edge_ids.len() >= bounds.max_depth {
+ continue;
+ }
+ let current = route
+ .node_ids
+ .last()
+ .context("source_index_route_invalid")?;
+ let mut edge_bounds = bounds.clone();
+ edge_bounds.limit = 100;
+ edge_bounds.cursor = None;
+ let elapsed_ms = u64::try_from(started.elapsed().as_millis()).unwrap_or(u64::MAX);
+ edge_bounds.timeout_ms = bounds.timeout_ms.saturating_sub(elapsed_ms).max(1);
+ let page = self.dependency_edges(current, EdgeDirection::Outgoing, &edge_bounds)?;
+ ensure_deadline(started, bounds)?;
+ truncated |= page.next_cursor.is_some();
+ for edge in page.items {
+ if route.node_ids.contains(&edge.target_id) {
+ continue;
+ }
+ let mut candidate = route.clone();
+ candidate.node_ids.push(edge.target_id.clone());
+ candidate.edge_ids.push(edge.canonical_id);
+ if edge.target_id == to_node_id {
+ routes.push(candidate);
+ if routes.len() > bounds.limit {
+ truncated = true;
+ break 'search;
+ }
+ } else if queue.len() < max_queue {
+ queue.push_back(candidate);
+ } else {
+ truncated = true;
+ }
+ }
+ }
+ routes.sort_by(|left, right| {
+ left.edge_ids
+ .len()
+ .cmp(&right.edge_ids.len())
+ .then_with(|| left.edge_ids.cmp(&right.edge_ids))
+ });
+ routes.truncate(bounds.limit);
+ let result = GraphRoutes {
+ items: routes,
+ truncated,
+ };
+ ensure_deadline(started, bounds)?;
+ enforce_output_bound(&result, bounds)?;
+ Ok(result)
+ }
+
+ /// Returns a bounded induced graph slice grouped by deterministic label propagation.
+ /// Topology forms communities; paths only supply deterministic display labels.
+ pub fn communities(
+ &self,
+ bounds: &QueryBounds,
+ ) -> Result> {
+ validate_query_bounds(bounds)?;
+ let started = Instant::now();
+ let Some(generation_id) = self.active_generation() else {
+ return Ok(GraphProjection {
+ items: Vec::new(),
+ nodes: Vec::new(),
+ edges: Vec::new(),
+ truncated: false,
+ next_cursor: None,
+ });
+ };
+ let projection_offset = projection_offset(bounds.cursor.as_ref(), 1, generation_id)?;
+ let mut statement = self.connection.prepare(
+ "SELECT canonical_id, kind, language_kind, qualified_name, locator, start_line, end_line, content_hash, visibility FROM index_nodes WHERE generation_id = ?1 ORDER BY ordinal LIMIT ?2",
+ )?;
+ let mut scan_nodes = statement
+ .query_map(
+ params![
+ generation_id,
+ count_i64(COMMUNITY_SCAN_NODE_LIMIT.saturating_add(1))?
+ ],
+ row_to_node,
+ )?
+ .collect::>>()?;
+ ensure_deadline(started, bounds)?;
+ let mut scan_truncated = scan_nodes.len() > COMMUNITY_SCAN_NODE_LIMIT;
+ scan_nodes.truncate(COMMUNITY_SCAN_NODE_LIMIT);
+ if scan_nodes.is_empty() {
+ return Ok(GraphProjection {
+ items: Vec::new(),
+ nodes: Vec::new(),
+ edges: Vec::new(),
+ truncated: scan_truncated,
+ next_cursor: None,
+ });
+ }
+
+ let node_ids = scan_nodes
+ .iter()
+ .map(|node| node.canonical_id.clone())
+ .collect::>();
+ let mut edge_statement = self.connection.prepare(
+ "WITH bounded_nodes AS (SELECT canonical_id FROM index_nodes WHERE generation_id = ?1 ORDER BY ordinal LIMIT ?2) SELECT canonical_id, source_id, target_id, kind, locator, start_line, end_line, resolver, resolver_version, confidence, resolution_class, stale FROM index_edges WHERE generation_id = ?1 AND source_id IN (SELECT canonical_id FROM bounded_nodes) AND target_id IN (SELECT canonical_id FROM bounded_nodes) ORDER BY ordinal LIMIT ?3",
+ )?;
+ let mut scan_edges = edge_statement
+ .query_map(
+ params![
+ generation_id,
+ count_i64(COMMUNITY_SCAN_NODE_LIMIT)?,
+ count_i64(COMMUNITY_SCAN_EDGE_LIMIT.saturating_add(1))?
+ ],
+ row_to_edge,
+ )?
+ .collect::>>()?;
+ ensure_deadline(started, bounds)?;
+ scan_truncated |= scan_edges.len() > COMMUNITY_SCAN_EDGE_LIMIT;
+ scan_edges.truncate(COMMUNITY_SCAN_EDGE_LIMIT);
+
+ let mut labels = scan_nodes
+ .iter()
+ .map(|node| (node.canonical_id.clone(), node.canonical_id.clone()))
+ .collect::>();
+ let mut neighbors = node_ids
+ .iter()
+ .map(|id| (id.clone(), BTreeSet::new()))
+ .collect::>();
+ for edge in &scan_edges {
+ neighbors
+ .entry(edge.source_id.clone())
+ .or_default()
+ .insert(edge.target_id.clone());
+ neighbors
+ .entry(edge.target_id.clone())
+ .or_default()
+ .insert(edge.source_id.clone());
+ }
+ for _ in 0..COMMUNITY_MAX_PASSES {
+ ensure_deadline(started, bounds)?;
+ let mut changed = false;
+ for node_id in &node_ids {
+ let adjacent = neighbors.get(node_id).into_iter().flatten();
+ let mut votes = BTreeMap::::new();
+ for neighbor in adjacent {
+ if let Some(label) = labels.get(neighbor) {
+ *votes.entry(label.clone()).or_default() += 1;
+ }
+ }
+ let next = votes
+ .into_iter()
+ .max_by(|left, right| left.1.cmp(&right.1).then_with(|| right.0.cmp(&left.0)))
+ .map(|(label, _)| label)
+ .unwrap_or_else(|| labels[node_id].clone());
+ if next != labels[node_id] {
+ labels.insert(node_id.clone(), next);
+ changed = true;
+ }
+ }
+ if !changed {
+ break;
+ }
+ }
+
+ let mut grouped = BTreeMap::>::new();
+ for (node_id, label) in &labels {
+ grouped
+ .entry(label.clone())
+ .or_default()
+ .push(node_id.clone());
+ }
+ let nodes_by_id = scan_nodes
+ .into_iter()
+ .map(|node| (node.canonical_id.clone(), node))
+ .collect::>();
+ let mut communities = grouped
+ .into_values()
+ .map(|mut members| {
+ members.sort();
+ let mut path_counts = BTreeMap::::new();
+ for node_id in &members {
+ if let Some(node) = nodes_by_id.get(node_id) {
+ *path_counts
+ .entry(community_path(&node.locator))
+ .or_default() += 1;
+ }
+ }
+ let path = path_counts
+ .into_iter()
+ .max_by(|left, right| left.1.cmp(&right.1).then_with(|| right.0.cmp(&left.0)))
+ .map(|(path, _)| path)
+ .unwrap_or_else(|| "workspace://unknown".to_string());
+ (members, path)
+ })
+ .collect::>();
+ communities.sort_by(|left, right| {
+ right
+ .0
+ .len()
+ .cmp(&left.0.len())
+ .then_with(|| left.0.cmp(&right.0))
+ });
+ if projection_offset > communities.len() {
+ bail!("source_index_projection_cursor_stale");
+ }
+ let omitted_communities =
+ projection_offset.saturating_add(bounds.limit) < communities.len();
+ let next_cursor = omitted_communities
+ .then(|| projection_cursor(1, generation_id, projection_offset + bounds.limit));
+ communities = communities
+ .into_iter()
+ .skip(projection_offset)
+ .take(bounds.limit)
+ .collect();
+ let community_count = communities.len().max(1);
+ let per_community_node_cap = (100 / community_count).max(1);
+ let mut items = Vec::new();
+ let mut evidence_nodes = BTreeMap::::new();
+ let mut evidence_edges = BTreeMap::::new();
+ for (mut community_nodes, path_prefix) in communities {
+ community_nodes.sort();
+ let community_set = community_nodes.iter().collect::>();
+ let represented_relationship_count = scan_edges
+ .iter()
+ .filter(|edge| {
+ community_set.contains(&edge.source_id)
+ && community_set.contains(&edge.target_id)
+ })
+ .count();
+ let mut internal_degrees = BTreeMap::::new();
+ for edge in &scan_edges {
+ if community_set.contains(&edge.source_id)
+ && community_set.contains(&edge.target_id)
+ {
+ *internal_degrees.entry(edge.source_id.clone()).or_default() += 1;
+ *internal_degrees.entry(edge.target_id.clone()).or_default() += 1;
+ }
+ }
+ let mut evidence_candidates = community_nodes.clone();
+ evidence_candidates.sort_by(|left, right| {
+ internal_degrees
+ .get(right)
+ .copied()
+ .unwrap_or(0)
+ .cmp(&internal_degrees.get(left).copied().unwrap_or(0))
+ .then_with(|| left.cmp(right))
+ });
+ let remaining_nodes = 100usize.saturating_sub(evidence_nodes.len());
+ let node_ids = evidence_candidates
+ .iter()
+ .take(per_community_node_cap.min(remaining_nodes))
+ .cloned()
+ .collect::>();
+ let selected_nodes = node_ids.iter().collect::>();
+ for node_id in &node_ids {
+ if let Some(node) = nodes_by_id.get(node_id) {
+ evidence_nodes.insert(node_id.clone(), node.clone());
+ }
+ }
+ let remaining_edges = 100usize.saturating_sub(evidence_edges.len());
+ let relationship_ids = scan_edges
+ .iter()
+ .filter(|edge| {
+ selected_nodes.contains(&edge.source_id)
+ && selected_nodes.contains(&edge.target_id)
+ })
+ .take(remaining_edges)
+ .map(|edge| {
+ evidence_edges.insert(edge.canonical_id.clone(), edge.clone());
+ edge.canonical_id.clone()
+ })
+ .collect::>();
+ let item_truncated = scan_truncated
+ || omitted_communities
+ || node_ids.len() < community_nodes.len()
+ || relationship_ids.len() < represented_relationship_count;
+ let id_parts = community_nodes
+ .iter()
+ .map(String::as_str)
+ .collect::>();
+ items.push(CommunityProjection {
+ id: projection_id("cicommunity_", COMMUNITY_ALGORITHM_VERSION, &id_parts),
+ label: path_prefix.trim_start_matches("workspace://").to_string(),
+ path_prefix,
+ represented_node_count: community_nodes.len(),
+ represented_relationship_count,
+ node_ids,
+ relationship_ids,
+ generation: generation_id,
+ algorithm_version: COMMUNITY_ALGORITHM_VERSION.to_string(),
+ truncated: item_truncated,
+ });
+ }
+ let truncated =
+ scan_truncated || omitted_communities || items.iter().any(|item| item.truncated);
+ let result = GraphProjection {
+ items,
+ nodes: evidence_nodes.into_values().collect(),
+ edges: evidence_edges.into_values().collect(),
+ truncated,
+ next_cursor,
+ };
+ enforce_output_bound(&result, bounds)?;
+ Ok(result)
+ }
+
+ /// Returns source-backed, bounded paths beginning at explicit entry-evidence edges.
+ pub fn processes(&self, bounds: &QueryBounds) -> Result> {
+ validate_query_bounds(bounds)?;
+ if bounds.max_depth == 0 {
+ bail!("source_index_process_bounds_invalid");
+ }
+ let started = Instant::now();
+ let Some(generation_id) = self.active_generation() else {
+ return Ok(GraphProjection {
+ items: Vec::new(),
+ nodes: Vec::new(),
+ edges: Vec::new(),
+ truncated: false,
+ next_cursor: None,
+ });
+ };
+ let projection_offset = projection_offset(bounds.cursor.as_ref(), 2, generation_id)?;
+ let mut statement = self.connection.prepare(
+ "SELECT canonical_id, source_id, target_id, kind, locator, start_line, end_line, resolver, resolver_version, confidence, resolution_class, stale FROM index_edges WHERE generation_id = ?1 AND kind IN ('entry_point', 'handles_route') AND stale = 0 AND confidence >= ?2 AND resolution_class != 'unresolved' ORDER BY canonical_id LIMIT ?3 OFFSET ?4",
+ )?;
+ let mut entry_edges = statement
+ .query_map(
+ params![
+ generation_id,
+ PROCESS_MIN_CONFIDENCE,
+ count_i64(bounds.limit.saturating_add(1))?,
+ count_i64(projection_offset)?
+ ],
+ row_to_edge,
+ )?
+ .collect::>>()?;
+ ensure_deadline(started, bounds)?;
+ if projection_offset > 0 && entry_edges.is_empty() {
+ bail!("source_index_projection_cursor_stale");
+ }
+ let mut globally_truncated = entry_edges.len() > bounds.limit;
+ entry_edges.truncate(bounds.limit);
+ let next_cursor = globally_truncated
+ .then(|| projection_cursor(2, generation_id, projection_offset + bounds.limit));
+
+ let mut items = Vec::new();
+ let mut evidence_nodes = BTreeMap::::new();
+ let mut evidence_edges = BTreeMap::::new();
+ for entry in entry_edges {
+ ensure_deadline(started, bounds)?;
+ let Some(candidate) = self.find_process_path(generation_id, &entry, bounds, started)?
+ else {
+ globally_truncated = true;
+ continue;
+ };
+ let mut evidence_node_ids = vec![entry.source_id.clone(), entry.target_id.clone()];
+ for node_id in candidate.node_ids.iter().skip(1) {
+ if !evidence_node_ids.contains(node_id) {
+ evidence_node_ids.push(node_id.clone());
+ }
+ }
+ let mut path_edges = vec![entry.clone()];
+ path_edges.extend(candidate.edges.iter().cloned());
+ let mut path_nodes = Vec::new();
+ let mut missing_evidence = false;
+ for node_id in &evidence_node_ids {
+ if let Some(node) = self.node_by_id(generation_id, node_id)? {
+ path_nodes.push(node);
+ } else {
+ missing_evidence = true;
+ break;
+ }
+ }
+ if missing_evidence {
+ globally_truncated = true;
+ continue;
+ }
+ let new_nodes = path_nodes
+ .iter()
+ .filter(|node| !evidence_nodes.contains_key(&node.canonical_id))
+ .count();
+ let new_edges = path_edges
+ .iter()
+ .filter(|edge| !evidence_edges.contains_key(&edge.canonical_id))
+ .count();
+ if evidence_nodes.len().saturating_add(new_nodes) > 100
+ || evidence_edges.len().saturating_add(new_edges) > 100
+ || items.len() >= bounds.limit
+ {
+ globally_truncated = true;
+ break;
+ }
+ for node in path_nodes {
+ evidence_nodes.insert(node.canonical_id.clone(), node);
+ }
+ for edge in &path_edges {
+ evidence_edges.insert(edge.canonical_id.clone(), edge.clone());
+ }
+ let sink_id = if candidate.edges.is_empty() {
+ &entry.target_id
+ } else {
+ candidate
+ .node_ids
+ .last()
+ .context("source_index_process_invalid")?
+ };
+ let sink = evidence_nodes
+ .get(sink_id)
+ .context("source_index_process_evidence_missing")?;
+ let entry_node = evidence_nodes
+ .get(&entry.source_id)
+ .context("source_index_process_evidence_missing")?;
+ let relationship_ids = path_edges
+ .iter()
+ .map(|edge| edge.canonical_id.clone())
+ .collect::>();
+ let confidence = path_edges
+ .iter()
+ .map(|edge| edge.confidence)
+ .fold(1.0_f64, f64::min);
+ let process_node_ids = if candidate.edges.is_empty() {
+ vec![entry.source_id.clone(), entry.target_id.clone()]
+ } else {
+ candidate.node_ids
+ };
+ let id_parts = relationship_ids
+ .iter()
+ .map(String::as_str)
+ .collect::>();
+ items.push(ProcessProjection {
+ id: projection_id("ciprocess_", PROCESS_ALGORITHM_VERSION, &id_parts),
+ label: format!("{} to {}", concise_name(entry_node), concise_name(sink)),
+ entry_node_id: entry.source_id.clone(),
+ entry_relationship_id: entry.canonical_id.clone(),
+ sink_node_id: sink.canonical_id.clone(),
+ sink_kind: process_sink_kind(sink, candidate.edges.last()),
+ node_ids: process_node_ids,
+ relationship_ids,
+ confidence,
+ generation: generation_id,
+ algorithm_version: PROCESS_ALGORITHM_VERSION.to_string(),
+ truncated: candidate.truncated,
+ });
+ }
+ if globally_truncated {
+ for item in &mut items {
+ item.truncated = true;
+ }
+ }
+ let result = GraphProjection {
+ items,
+ nodes: evidence_nodes.into_values().collect(),
+ edges: evidence_edges.into_values().collect(),
+ truncated: globally_truncated,
+ next_cursor,
+ };
+ enforce_output_bound(&result, bounds)?;
+ Ok(result)
+ }
+
+ fn find_process_path(
+ &self,
+ generation_id: i64,
+ entry: &EdgeRecord,
+ bounds: &QueryBounds,
+ started: Instant,
+ ) -> Result> {
+ if !PROCESS_ENTRY_KINDS.contains(&entry.kind.as_str()) {
+ return Ok(None);
+ }
+ let mut queue = VecDeque::from([ProcessPath {
+ node_ids: vec![entry.source_id.clone()],
+ edges: Vec::new(),
+ truncated: false,
+ }]);
+ let mut fallback = Some(queue[0].clone());
+ let max_execution_depth = bounds.max_depth.saturating_sub(1);
+ let max_queue = bounds.limit.saturating_mul(bounds.max_depth.max(1));
+ while let Some(path) = queue.pop_front() {
+ ensure_deadline(started, bounds)?;
+ let current_id = path
+ .node_ids
+ .last()
+ .context("source_index_process_invalid")?;
+ let current = self.node_by_id(generation_id, current_id)?;
+ if !path.edges.is_empty()
+ && current
+ .as_ref()
+ .is_some_and(|node| is_process_sink(node, path.edges.last()))
+ {
+ return Ok(Some(path));
+ }
+ let outgoing = self
+ .process_step_edges(generation_id, current_id, bounds.limit)?
+ .into_iter()
+ .filter(|edge| edge.canonical_id != entry.canonical_id)
+ .collect::>();
+ let has_more = outgoing.len() > bounds.limit;
+ let outgoing = outgoing.into_iter().take(bounds.limit).collect::>();
+ if outgoing.is_empty() {
+ if !path.edges.is_empty() {
+ fallback = Some(path);
+ }
+ continue;
+ }
+ if path.edges.len() >= max_execution_depth {
+ let mut bounded = path;
+ bounded.truncated = true;
+ return Ok(Some(bounded));
+ }
+ for edge in outgoing {
+ if path.node_ids.contains(&edge.target_id) {
+ continue;
+ }
+ if queue.len() >= max_queue {
+ globally_mark_path(&mut fallback);
+ break;
+ }
+ let mut candidate = path.clone();
+ candidate.node_ids.push(edge.target_id.clone());
+ candidate.edges.push(edge);
+ candidate.truncated |= has_more;
+ fallback = Some(candidate.clone());
+ queue.push_back(candidate);
+ }
+ }
+ if fallback.as_ref().is_some_and(|path| !path.edges.is_empty()) {
+ globally_mark_path(&mut fallback);
+ }
+ Ok(fallback)
+ }
+
+ fn process_step_edges(
+ &self,
+ generation_id: i64,
+ source_id: &str,
+ limit: usize,
+ ) -> Result> {
+ let placeholders = (0..PROCESS_STEP_KINDS.len())
+ .map(|index| format!("?{}", index + 4))
+ .collect::>()
+ .join(",");
+ let limit_parameter = PROCESS_STEP_KINDS.len() + 4;
+ let sql = format!(
+ "SELECT canonical_id, source_id, target_id, kind, locator, start_line, end_line, resolver, resolver_version, confidence, resolution_class, stale FROM index_edges WHERE generation_id = ?1 AND source_id = ?2 AND stale = 0 AND confidence >= ?3 AND resolution_class != 'unresolved' AND kind IN ({placeholders}) ORDER BY canonical_id LIMIT ?{limit_parameter}"
+ );
+ let mut parameters = Vec::with_capacity(PROCESS_STEP_KINDS.len() + 4);
+ parameters.push(SqlValue::Integer(generation_id));
+ parameters.push(SqlValue::Text(source_id.to_string()));
+ parameters.push(SqlValue::Real(PROCESS_MIN_CONFIDENCE));
+ parameters.extend(
+ PROCESS_STEP_KINDS
+ .iter()
+ .map(|kind| SqlValue::Text((*kind).to_string())),
+ );
+ parameters.push(SqlValue::Integer(count_i64(limit.saturating_add(2))?));
+ let mut statement = self.connection.prepare(&sql)?;
+ let edges = statement
+ .query_map(params_from_iter(parameters.iter()), row_to_edge)?
+ .collect::>>()
+ .context("source_index_process_edges_failed")?;
+ Ok(edges)
+ }
+
+ fn node_by_id(&self, generation_id: i64, node_id: &str) -> Result> {
+ self.connection
+ .query_row(
+ "SELECT canonical_id, kind, language_kind, qualified_name, locator, start_line, end_line, content_hash, visibility FROM index_nodes WHERE generation_id = ?1 AND canonical_id = ?2",
+ params![generation_id, node_id],
+ row_to_node,
+ )
+ .optional()
+ .context("source_index_node_query_failed")
+ }
+}
+
+#[derive(Debug, Clone)]
+struct ProcessPath {
+ node_ids: Vec,
+ edges: Vec,
+ truncated: bool,
+}
+
+fn globally_mark_path(path: &mut Option) {
+ if let Some(path) = path {
+ path.truncated = true;
+ }
+}
+
+fn community_path(locator: &str) -> String {
+ let relative = locator_file(locator).trim_start_matches("workspace://");
+ let parts = relative.split('/').collect::>();
+ let depth = if parts.len() >= 2
+ && matches!(
+ parts[0],
+ "apps" | "packages" | "services" | "providers" | "crates" | "modules"
+ ) {
+ 2
+ } else {
+ 1
+ };
+ format!("workspace://{}", parts[..depth.min(parts.len())].join("/"))
+}
+
+fn projection_id(prefix: &str, algorithm: &str, parts: &[&str]) -> String {
+ let mut digest = Sha256::new();
+ digest.update(algorithm.as_bytes());
+ for part in parts {
+ digest.update([0]);
+ digest.update(part.as_bytes());
+ }
+ format!("{prefix}{}", &hex::encode(digest.finalize())[..32])
+}
+
+fn concise_name(node: &NodeRecord) -> String {
+ node.qualified_name
+ .rsplit("::")
+ .next()
+ .unwrap_or(&node.qualified_name)
+ .chars()
+ .map(|character| {
+ if character.is_ascii_alphanumeric() || "_.$:/#@ +()<>, -".contains(character) {
+ character
+ } else {
+ '_'
+ }
+ })
+ .take(72)
+ .collect()
+}
+
+fn is_process_sink(node: &NodeRecord, incoming: Option<&EdgeRecord>) -> bool {
+ matches!(
+ node.kind.as_str(),
+ "route" | "handler" | "storage" | "queue" | "event" | "sink"
+ ) || incoming
+ .is_some_and(|edge| matches!(edge.kind.as_str(), "reads" | "writes" | "emits" | "listens"))
+}
+
+fn process_sink_kind(node: &NodeRecord, incoming: Option<&EdgeRecord>) -> String {
+ incoming
+ .filter(|edge| matches!(edge.kind.as_str(), "reads" | "writes" | "emits" | "listens"))
+ .map_or_else(|| node.kind.clone(), |edge| edge.kind.clone())
+}
+
+fn insert_generation_records(
+ transaction: &rusqlite::Transaction<'_>,
+ generation_id: i64,
+ input: &GenerationInput,
+) -> Result<()> {
+ for (ordinal, record) in input.files.iter().enumerate() {
+ transaction.execute(
+ "INSERT INTO index_files (generation_id, ordinal, locator, content_hash, byte_size, language, parse_state, diagnostic_count, owner_identity) VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9)",
+ params![generation_id, count_i64(ordinal)?, record.locator, record.content_hash, record.byte_size, record.language, record.parse_state, record.diagnostic_count, record.owner_identity],
+ )?;
+ }
+ for (ordinal, record) in input.nodes.iter().enumerate() {
+ transaction.execute(
+ "INSERT INTO index_nodes (generation_id, ordinal, canonical_id, kind, language_kind, qualified_name, locator, start_line, end_line, content_hash, visibility) VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11)",
+ params![generation_id, count_i64(ordinal)?, record.canonical_id, record.kind, record.language_kind, record.qualified_name, record.locator, record.start_line, record.end_line, record.content_hash, record.visibility],
+ )?;
+ }
+ for (ordinal, record) in input.edges.iter().enumerate() {
+ transaction.execute(
+ "INSERT INTO index_edges (generation_id, ordinal, canonical_id, source_id, target_id, kind, locator, start_line, end_line, resolver, resolver_version, confidence, resolution_class, stale) VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13, ?14)",
+ params![generation_id, count_i64(ordinal)?, record.canonical_id, record.source_id, record.target_id, record.kind, record.locator, record.start_line, record.end_line, record.resolver, record.resolver_version, record.confidence, record.resolution_class, i64::from(record.stale)],
+ )?;
+ }
+ for (ordinal, record) in input.unresolved.iter().enumerate() {
+ transaction.execute(
+ "INSERT INTO index_unresolved (generation_id, ordinal, canonical_id, source_id, relationship_kind, target_text_hash, locator, start_line, end_line, reason_code, confidence_class) VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11)",
+ params![generation_id, count_i64(ordinal)?, record.canonical_id, record.source_id, record.relationship_kind, record.target_text_hash, record.locator, record.start_line, record.end_line, record.reason_code, record.confidence_class],
+ )?;
+ }
+ for (ordinal, record) in input.coverage.iter().enumerate() {
+ transaction.execute(
+ "INSERT INTO index_coverage (generation_id, ordinal, language, capability, represented_count, omitted_count, failed_count, reason_code) VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8)",
+ params![generation_id, count_i64(ordinal)?, record.language, record.capability, record.represented_count, record.omitted_count, record.failed_count, record.reason_code],
+ )?;
+ }
+ for (ordinal, record) in input.diagnostics.iter().enumerate() {
+ transaction.execute(
+ "INSERT INTO index_diagnostics (generation_id, ordinal, canonical_id, severity, code, locator, start_line, end_line, message_hash) VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9)",
+ params![generation_id, count_i64(ordinal)?, record.canonical_id, record.severity, record.code, record.locator, record.start_line, record.end_line, record.message_hash],
+ )?;
+ }
+ Ok(())
+}
+
+fn load_generation_summary(
+ connection: &Connection,
+ generation_id: i64,
+) -> Result {
+ connection
+ .query_row(
+ "SELECT id, parent_id, reason, created_at, committed_at, file_count, node_count, edge_count, unresolved_count, diagnostic_count, structural_fingerprint, ignore_fingerprint FROM index_generations WHERE id = ?1 AND state = 'committed'",
+ [generation_id],
+ row_to_summary,
+ )
+ .context("source_index_generation_not_found")
+}
+
+fn load_generation_files(connection: &Connection, generation_id: i64) -> Result> {
+ collect_rows(
+ connection,
+ "SELECT locator, content_hash, byte_size, language, parse_state, diagnostic_count, owner_identity FROM index_files WHERE generation_id = ?1 ORDER BY ordinal",
+ generation_id,
+ |row| Ok(FileRecord {
+ locator: row.get(0)?,
+ content_hash: row.get(1)?,
+ byte_size: row.get(2)?,
+ language: row.get(3)?,
+ parse_state: row.get(4)?,
+ diagnostic_count: row.get(5)?,
+ owner_identity: row.get(6)?,
+ }),
+ )
+}
+
+fn load_generation_coverage(
+ connection: &Connection,
+ generation_id: i64,
+) -> Result> {
+ collect_rows(
+ connection,
+ "SELECT language, capability, represented_count, omitted_count, failed_count, reason_code FROM index_coverage WHERE generation_id = ?1 ORDER BY ordinal",
+ generation_id,
+ |row| Ok(CoverageRecord {
+ language: row.get(0)?,
+ capability: row.get(1)?,
+ represented_count: row.get(2)?,
+ omitted_count: row.get(3)?,
+ failed_count: row.get(4)?,
+ reason_code: row.get(5)?,
+ }),
+ )
+}
+
+fn load_generation_records(
+ connection: &Connection,
+ summary: &GenerationSummary,
+) -> Result {
+ let files = load_generation_files(connection, summary.id)?;
+ let nodes = collect_rows(
+ connection,
+ "SELECT canonical_id, kind, language_kind, qualified_name, locator, start_line, end_line, content_hash, visibility FROM index_nodes WHERE generation_id = ?1 ORDER BY ordinal",
+ summary.id,
+ row_to_node,
+ )?;
+ let edges = collect_rows(
+ connection,
+ "SELECT canonical_id, source_id, target_id, kind, locator, start_line, end_line, resolver, resolver_version, confidence, resolution_class, stale FROM index_edges WHERE generation_id = ?1 ORDER BY ordinal",
+ summary.id,
+ row_to_edge,
+ )?;
+ let unresolved = collect_rows(
+ connection,
+ "SELECT canonical_id, source_id, relationship_kind, target_text_hash, locator, start_line, end_line, reason_code, confidence_class FROM index_unresolved WHERE generation_id = ?1 ORDER BY ordinal",
+ summary.id,
+ |row| Ok(UnresolvedRecord {
+ canonical_id: row.get(0)?,
+ source_id: row.get(1)?,
+ relationship_kind: row.get(2)?,
+ target_text_hash: row.get(3)?,
+ locator: row.get(4)?,
+ start_line: row.get(5)?,
+ end_line: row.get(6)?,
+ reason_code: row.get(7)?,
+ confidence_class: row.get(8)?,
+ }),
+ )?;
+ let coverage = load_generation_coverage(connection, summary.id)?;
+ let diagnostics = collect_rows(
+ connection,
+ "SELECT canonical_id, severity, code, locator, start_line, end_line, message_hash FROM index_diagnostics WHERE generation_id = ?1 ORDER BY ordinal",
+ summary.id,
+ |row| Ok(DiagnosticRecord {
+ canonical_id: row.get(0)?,
+ severity: row.get(1)?,
+ code: row.get(2)?,
+ locator: row.get(3)?,
+ start_line: row.get(4)?,
+ end_line: row.get(5)?,
+ message_hash: row.get(6)?,
+ }),
+ )?;
+ Ok(GenerationInput {
+ reason: summary.reason.clone(),
+ created_at: summary.created_at.clone(),
+ structural_fingerprint: summary.structural_fingerprint.clone(),
+ ignore_fingerprint: summary.ignore_fingerprint.clone(),
+ files,
+ nodes,
+ edges,
+ unresolved,
+ coverage,
+ diagnostics,
+ })
+}
+
+fn collect_rows(
+ connection: &Connection,
+ sql: &str,
+ generation_id: i64,
+ mapper: F,
+) -> Result>
+where
+ F: FnMut(&rusqlite::Row<'_>) -> rusqlite::Result,
+{
+ let mut statement = connection.prepare(sql)?;
+ let records = statement
+ .query_map([generation_id], mapper)?
+ .collect::>>()
+ .context("source_index_generation_load_failed")?;
+ Ok(records)
+}
+
+fn row_to_summary(row: &rusqlite::Row<'_>) -> rusqlite::Result {
+ Ok(GenerationSummary {
+ id: row.get(0)?,
+ parent_id: row.get(1)?,
+ reason: row.get(2)?,
+ created_at: row.get(3)?,
+ committed_at: row.get(4)?,
+ file_count: row.get(5)?,
+ node_count: row.get(6)?,
+ edge_count: row.get(7)?,
+ unresolved_count: row.get(8)?,
+ diagnostic_count: row.get(9)?,
+ structural_fingerprint: row.get(10)?,
+ ignore_fingerprint: row.get(11)?,
+ })
+}
+
+fn row_to_node(row: &rusqlite::Row<'_>) -> rusqlite::Result {
+ Ok(NodeRecord {
+ canonical_id: row.get(0)?,
+ kind: row.get(1)?,
+ language_kind: row.get(2)?,
+ qualified_name: row.get(3)?,
+ locator: row.get(4)?,
+ start_line: row.get(5)?,
+ end_line: row.get(6)?,
+ content_hash: row.get(7)?,
+ visibility: row.get(8)?,
+ })
+}
+
+fn row_to_edge(row: &rusqlite::Row<'_>) -> rusqlite::Result {
+ Ok(EdgeRecord {
+ canonical_id: row.get(0)?,
+ source_id: row.get(1)?,
+ target_id: row.get(2)?,
+ kind: row.get(3)?,
+ locator: row.get(4)?,
+ start_line: row.get(5)?,
+ end_line: row.get(6)?,
+ resolver: row.get(7)?,
+ resolver_version: row.get(8)?,
+ confidence: row.get(9)?,
+ resolution_class: row.get(10)?,
+ stale: row.get::<_, i64>(11)? != 0,
+ })
+}
+
+fn bounded_page(mut items: Vec, bounds: &QueryBounds) -> Result>
+where
+ T: serde::Serialize,
+ T: CursorRecord,
+{
+ let has_more = items.len() > bounds.limit;
+ if has_more {
+ items.pop();
+ }
+ let next_cursor = has_more
+ .then(|| items.last().map(CursorRecord::cursor))
+ .flatten();
+ let page = QueryPage { items, next_cursor };
+ enforce_output_bound(&page, bounds)?;
+ Ok(page)
+}
+
+trait CursorRecord {
+ fn cursor(&self) -> String;
+}
+
+impl CursorRecord for NodeRecord {
+ fn cursor(&self) -> String {
+ self.canonical_id.clone()
+ }
+}
+
+impl CursorRecord for EdgeRecord {
+ fn cursor(&self) -> String {
+ self.canonical_id.clone()
+ }
+}
+
+pub fn normalized_generation_fingerprint(input: &GenerationInput) -> Result {
+ let mut normalized = input.clone();
+ normalize_generation_records(&mut normalized);
+ let structural = serde_json::json!({
+ "ignoreFingerprint": normalized.ignore_fingerprint,
+ "files": normalized.files,
+ "nodes": normalized.nodes,
+ "edges": normalized.edges,
+ "unresolved": normalized.unresolved,
+ "coverage": normalized.coverage,
+ "diagnostics": normalized.diagnostics,
+ });
+ Ok(format!(
+ "sha256:{}",
+ hex::encode(Sha256::digest(serde_json::to_vec(&structural)?))
+ ))
+}
+
+pub fn select_generation_files(
+ input: &GenerationInput,
+ locators: &BTreeSet,
+) -> GenerationInput {
+ let node_ids = input
+ .nodes
+ .iter()
+ .filter(|node| locators.contains(locator_file(&node.locator)))
+ .map(|node| node.canonical_id.clone())
+ .collect::>();
+ GenerationInput {
+ reason: input.reason.clone(),
+ created_at: input.created_at.clone(),
+ structural_fingerprint: input.structural_fingerprint.clone(),
+ ignore_fingerprint: input.ignore_fingerprint.clone(),
+ files: input
+ .files
+ .iter()
+ .filter(|file| locators.contains(&file.locator))
+ .cloned()
+ .collect(),
+ nodes: input
+ .nodes
+ .iter()
+ .filter(|node| node_ids.contains(&node.canonical_id))
+ .cloned()
+ .collect(),
+ edges: input
+ .edges
+ .iter()
+ .filter(|edge| node_ids.contains(&edge.source_id))
+ .cloned()
+ .collect(),
+ unresolved: input
+ .unresolved
+ .iter()
+ .filter(|item| node_ids.contains(&item.source_id))
+ .cloned()
+ .collect(),
+ coverage: input.coverage.clone(),
+ diagnostics: input
+ .diagnostics
+ .iter()
+ .filter(|item| locators.contains(locator_file(&item.locator)))
+ .cloned()
+ .collect(),
+ }
+}
+
+pub fn merge_incremental_generation(
+ active: &GenerationInput,
+ replacement: &GenerationInput,
+ plan: &RefreshPlan,
+) -> Result {
+ let mut removed_files = plan
+ .invalidated_files
+ .iter()
+ .chain(plan.deleted_files.iter())
+ .cloned()
+ .collect::>();
+ removed_files.extend(
+ plan.renamed_files
+ .iter()
+ .map(|rename| rename.from_locator.clone()),
+ );
+ let removed_nodes = active
+ .nodes
+ .iter()
+ .filter(|node| removed_files.contains(locator_file(&node.locator)))
+ .map(|node| node.canonical_id.clone())
+ .collect::>();
+ let mut merged = GenerationInput {
+ reason: replacement.reason.clone(),
+ created_at: replacement.created_at.clone(),
+ structural_fingerprint: replacement.structural_fingerprint.clone(),
+ ignore_fingerprint: replacement.ignore_fingerprint.clone(),
+ files: active
+ .files
+ .iter()
+ .filter(|file| !removed_files.contains(&file.locator))
+ .cloned()
+ .chain(replacement.files.iter().cloned())
+ .collect(),
+ nodes: active
+ .nodes
+ .iter()
+ .filter(|node| !removed_nodes.contains(&node.canonical_id))
+ .cloned()
+ .chain(replacement.nodes.iter().cloned())
+ .collect(),
+ edges: active
+ .edges
+ .iter()
+ .filter(|edge| {
+ !removed_nodes.contains(&edge.source_id)
+ && !removed_files.contains(locator_file(&edge.locator))
+ })
+ .cloned()
+ .chain(replacement.edges.iter().cloned())
+ .collect(),
+ unresolved: active
+ .unresolved
+ .iter()
+ .filter(|item| {
+ !removed_nodes.contains(&item.source_id)
+ && !removed_files.contains(locator_file(&item.locator))
+ })
+ .cloned()
+ .chain(replacement.unresolved.iter().cloned())
+ .collect(),
+ coverage: if replacement.coverage.is_empty() {
+ active.coverage.clone()
+ } else {
+ replacement.coverage.clone()
+ },
+ diagnostics: active
+ .diagnostics
+ .iter()
+ .filter(|item| !removed_files.contains(locator_file(&item.locator)))
+ .cloned()
+ .chain(replacement.diagnostics.iter().cloned())
+ .collect(),
+ };
+ let final_nodes = merged
+ .nodes
+ .iter()
+ .map(|node| node.canonical_id.as_str())
+ .collect::>();
+ merged.edges.retain(|edge| {
+ final_nodes.contains(edge.source_id.as_str())
+ && final_nodes.contains(edge.target_id.as_str())
+ });
+ normalize_generation_records(&mut merged);
+ merged.structural_fingerprint = normalized_generation_fingerprint(&merged)?;
+ validate_generation(&merged)?;
+ Ok(merged)
+}
+
+fn normalize_generation_records(input: &mut GenerationInput) {
+ input
+ .files
+ .sort_by(|left, right| left.locator.cmp(&right.locator));
+ input
+ .nodes
+ .sort_by(|left, right| left.canonical_id.cmp(&right.canonical_id));
+ input
+ .edges
+ .sort_by(|left, right| left.canonical_id.cmp(&right.canonical_id));
+ input
+ .unresolved
+ .sort_by(|left, right| left.canonical_id.cmp(&right.canonical_id));
+ input.coverage.sort_by(|left, right| {
+ left.language
+ .cmp(&right.language)
+ .then_with(|| left.capability.cmp(&right.capability))
+ });
+ input
+ .diagnostics
+ .sort_by(|left, right| left.canonical_id.cmp(&right.canonical_id));
+}
+
+fn detect_renames(
+ previous: &BTreeMap,
+ current: &BTreeMap,
+ added: &BTreeSet,
+ deleted: &BTreeSet,
+) -> Vec {
+ let mut added_by_hash = BTreeMap::<&str, Vec<&str>>::new();
+ let mut deleted_by_hash = BTreeMap::<&str, Vec<&str>>::new();
+ for locator in added {
+ added_by_hash
+ .entry(current[locator].content_hash.as_str())
+ .or_default()
+ .push(locator);
+ }
+ for locator in deleted {
+ deleted_by_hash
+ .entry(previous[locator].content_hash.as_str())
+ .or_default()
+ .push(locator);
+ }
+ let mut renames = added_by_hash
+ .into_iter()
+ .filter_map(|(hash, added_locators)| {
+ let deleted_locators = deleted_by_hash.get(hash)?;
+ (added_locators.len() == 1 && deleted_locators.len() == 1).then(|| FileRename {
+ from_locator: deleted_locators[0].to_string(),
+ to_locator: added_locators[0].to_string(),
+ })
+ })
+ .collect::>();
+ renames.sort_by(|left, right| left.from_locator.cmp(&right.from_locator));
+ renames
+}
+
+fn invalidation_closure(
+ generation: &GenerationInput,
+ seed_files: &BTreeSet,
+ bounds: &RefreshBounds,
+) -> (BTreeSet, bool) {
+ let file_by_node = generation
+ .nodes
+ .iter()
+ .map(|node| {
+ (
+ node.canonical_id.as_str(),
+ locator_file(&node.locator).to_string(),
+ )
+ })
+ .collect::>();
+ let mut invalidated = seed_files.clone();
+ let mut frontier = file_by_node
+ .iter()
+ .filter(|(_, locator)| seed_files.contains(*locator))
+ .map(|(node_id, _)| (*node_id).to_string())
+ .collect::>();
+ let mut truncated = false;
+ for _ in 0..bounds.max_depth {
+ let mut next = BTreeSet::new();
+ for edge in &generation.edges {
+ if !frontier.contains(&edge.target_id) || !invalidation_edge(edge) {
+ continue;
+ }
+ let Some(locator) = file_by_node.get(edge.source_id.as_str()) else {
+ continue;
+ };
+ if invalidated.insert(locator.clone()) {
+ if invalidated.len() >= bounds.max_invalidated_files {
+ truncated = true;
+ return (invalidated, truncated);
+ }
+ next.insert(edge.source_id.clone());
+ }
+ }
+ if next.is_empty() {
+ break;
+ }
+ frontier = next;
+ }
+ (invalidated, truncated)
+}
+
+fn invalidation_edge(edge: &EdgeRecord) -> bool {
+ match edge.kind.as_str() {
+ "calls" => matches!(edge.resolution_class.as_str(), "typed" | "exact"),
+ "imports" | "exports" | "re_exports" | "inherits" | "extends" | "implements"
+ | "mixes_in" | "extends_type" | "depends_on" | "part_of" | "entry_point"
+ | "handles_route" | "process_step" | "constructs" | "references" => true,
+ _ => false,
+ }
+}
+
+fn validate_refresh_bounds(bounds: &RefreshBounds) -> Result<()> {
+ if bounds.max_depth > 8 || !(1..=100_000).contains(&bounds.max_invalidated_files) {
+ bail!("source_index_refresh_bounds_invalid");
+ }
+ Ok(())
+}
+
+fn validate_generation(input: &GenerationInput) -> Result<()> {
+ validate_token(&input.reason, "source_index_generation_reason_invalid")?;
+ if input.created_at.is_empty() || input.created_at.len() > 64 {
+ bail!("source_index_generation_timestamp_invalid");
+ }
+ validate_hash(&input.structural_fingerprint)?;
+ if let Some(fingerprint) = &input.ignore_fingerprint {
+ validate_hash(fingerprint)?;
+ }
+ let mut files = BTreeSet::new();
+ for record in &input.files {
+ validate_locator(&record.locator)?;
+ validate_hash(&record.content_hash)?;
+ validate_token(&record.language, "source_index_language_invalid")?;
+ validate_token(&record.parse_state, "source_index_parse_state_invalid")?;
+ validate_identifier(&record.owner_identity)?;
+ if record.byte_size < 0
+ || record.diagnostic_count < 0
+ || !files.insert(record.locator.clone())
+ {
+ bail!("source_index_file_record_invalid");
+ }
+ }
+ let mut nodes = BTreeSet::new();
+ for record in &input.nodes {
+ validate_identifier(&record.canonical_id)?;
+ validate_token(&record.kind, "source_index_node_kind_invalid")?;
+ validate_token(&record.language_kind, "source_index_language_kind_invalid")?;
+ validate_token(&record.visibility, "source_index_visibility_invalid")?;
+ validate_locator(&record.locator)?;
+ validate_span(record.start_line, record.end_line)?;
+ if let Some(hash) = &record.content_hash {
+ validate_hash(hash)?;
+ }
+ if record.qualified_name.is_empty()
+ || record.qualified_name.len() > 2_048
+ || !nodes.insert(record.canonical_id.clone())
+ || !files.contains(locator_file(&record.locator))
+ {
+ bail!("source_index_node_record_invalid");
+ }
+ }
+ let mut edges = BTreeSet::new();
+ for record in &input.edges {
+ validate_identifier(&record.canonical_id)?;
+ validate_locator(&record.locator)?;
+ validate_span(record.start_line, record.end_line)?;
+ validate_token(&record.kind, "source_index_edge_kind_invalid")?;
+ validate_token(&record.resolver, "source_index_resolver_invalid")?;
+ validate_token(
+ &record.resolver_version,
+ "source_index_resolver_version_invalid",
+ )?;
+ validate_token(
+ &record.resolution_class,
+ "source_index_resolution_class_invalid",
+ )?;
+ if !record.confidence.is_finite()
+ || !(0.0..=1.0).contains(&record.confidence)
+ || !edges.insert(record.canonical_id.clone())
+ || !nodes.contains(&record.source_id)
+ || !nodes.contains(&record.target_id)
+ || !files.contains(locator_file(&record.locator))
+ {
+ bail!("source_index_edge_record_invalid");
+ }
+ }
+ let mut unresolved = BTreeSet::new();
+ for record in &input.unresolved {
+ validate_identifier(&record.canonical_id)?;
+ validate_hash(&record.target_text_hash)?;
+ validate_locator(&record.locator)?;
+ validate_span(record.start_line, record.end_line)?;
+ validate_token(
+ &record.relationship_kind,
+ "source_index_relationship_kind_invalid",
+ )?;
+ validate_token(&record.reason_code, "source_index_reason_code_invalid")?;
+ validate_token(
+ &record.confidence_class,
+ "source_index_confidence_class_invalid",
+ )?;
+ if !unresolved.insert(record.canonical_id.clone())
+ || !nodes.contains(&record.source_id)
+ || !files.contains(locator_file(&record.locator))
+ {
+ bail!("source_index_unresolved_record_invalid");
+ }
+ }
+ let mut coverage = BTreeSet::new();
+ for record in &input.coverage {
+ validate_token(&record.language, "source_index_language_invalid")?;
+ validate_token(&record.capability, "source_index_capability_invalid")?;
+ if let Some(reason) = &record.reason_code {
+ validate_token(reason, "source_index_reason_code_invalid")?;
+ }
+ if record.represented_count < 0
+ || record.omitted_count < 0
+ || record.failed_count < 0
+ || !coverage.insert((record.language.clone(), record.capability.clone()))
+ {
+ bail!("source_index_coverage_record_invalid");
+ }
+ }
+ let mut diagnostics = BTreeSet::new();
+ for record in &input.diagnostics {
+ validate_identifier(&record.canonical_id)?;
+ validate_locator(&record.locator)?;
+ validate_span(record.start_line, record.end_line)?;
+ validate_hash(&record.message_hash)?;
+ validate_token(&record.severity, "source_index_severity_invalid")?;
+ validate_token(&record.code, "source_index_diagnostic_code_invalid")?;
+ if !diagnostics.insert(record.canonical_id.clone())
+ || !files.contains(locator_file(&record.locator))
+ {
+ bail!("source_index_diagnostic_record_invalid");
+ }
+ }
+ Ok(())
+}
+
+fn validate_query_bounds(bounds: &QueryBounds) -> Result<()> {
+ if !(1..=100).contains(&bounds.limit)
+ || bounds.max_depth > 8
+ || !(1_024..=1_048_576).contains(&bounds.max_output_bytes)
+ || !(1..=2_000).contains(&bounds.timeout_ms)
+ {
+ bail!("source_index_query_bounds_invalid");
+ }
+ if let Some(cursor) = &bounds.cursor {
+ validate_cursor(cursor)?;
+ }
+ Ok(())
+}
+
+fn validate_query_text(value: &str) -> Result<()> {
+ if value.trim().is_empty() || value.len() > 512 || value.chars().any(char::is_control) {
+ bail!("source_index_query_text_invalid");
+ }
+ Ok(())
+}
+
+fn search_terms(query: &str) -> Vec {
+ let terms = query
+ .split(|character: char| !character.is_alphanumeric())
+ .filter(|term| !term.is_empty())
+ .map(str::to_lowercase)
+ .collect::>();
+ if terms.is_empty() {
+ vec![query.to_lowercase()]
+ } else {
+ terms.into_iter().collect()
+ }
+}
+
+fn validate_cursor(value: &str) -> Result<()> {
+ if value.is_empty() || value.len() > 512 || value.chars().any(char::is_control) {
+ bail!("source_index_query_cursor_invalid");
+ }
+ Ok(())
+}
+
+fn validate_identifier(value: &str) -> Result<()> {
+ if value.is_empty() || value.len() > 512 || value.chars().any(char::is_control) {
+ bail!("source_index_identifier_invalid");
+ }
+ Ok(())
+}
+
+fn validate_token(value: &str, code: &'static str) -> Result<()> {
+ if value.is_empty()
+ || value.len() > 128
+ || !value
+ .bytes()
+ .all(|byte| byte.is_ascii_alphanumeric() || matches!(byte, b'_' | b'-' | b'.' | b':'))
+ {
+ bail!(code);
+ }
+ Ok(())
+}
+
+fn validate_hash(value: &str) -> Result<()> {
+ let bytes = value.as_bytes();
+ if bytes.len() != 71
+ || !value.starts_with("sha256:")
+ || !bytes[7..].iter().all(u8::is_ascii_hexdigit)
+ {
+ bail!("source_index_hash_invalid");
+ }
+ Ok(())
+}
+
+fn validate_locator(value: &str) -> Result<()> {
+ let file = locator_file(value);
+ if !file.starts_with("workspace://")
+ || file.len() > 4_096
+ || file.contains('\0')
+ || file.contains('\\')
+ || file
+ .trim_start_matches("workspace://")
+ .split('/')
+ .any(|part| part == ".." || part.is_empty())
+ {
+ bail!("source_index_locator_invalid");
+ }
+ Ok(())
+}
+
+fn locator_file(value: &str) -> &str {
+ value.split_once('#').map_or(value, |(file, _)| file)
+}
+
+fn validate_span(start_line: i64, end_line: i64) -> Result<()> {
+ if start_line < 1 || end_line < start_line {
+ bail!("source_index_span_invalid");
+ }
+ Ok(())
+}
+
+fn escape_like(value: &str) -> String {
+ value
+ .replace('\\', "\\\\")
+ .replace('%', "\\%")
+ .replace('_', "\\_")
+}
+
+fn count_i64(value: usize) -> Result {
+ i64::try_from(value).context("source_index_count_overflow")
+}
+
+fn ensure_deadline(started: Instant, bounds: &QueryBounds) -> Result<()> {
+ if started.elapsed() > Duration::from_millis(bounds.timeout_ms) {
+ bail!("source_index_query_timeout");
+ }
+ Ok(())
+}
+
+fn enforce_output_bound(value: &T, bounds: &QueryBounds) -> Result<()> {
+ if serde_json::to_vec(value)?.len() > bounds.max_output_bytes {
+ bail!("source_index_query_output_limit");
+ }
+ Ok(())
+}
+
+pub fn inspect_index(path: &Path, options: &SourceIndexOptions) -> IndexHealth {
+ if !path.is_file() {
+ return health(HealthStatus::Absent, "source_index_absent", None, None);
+ }
+ let connection = match open_read_only_connection(path) {
+ Ok(connection) => connection,
+ Err(_) => return health(HealthStatus::Corrupt, "source_index_corrupt", None, None),
+ };
+ if connection.pragma_update(None, "query_only", "ON").is_err() {
+ return health(HealthStatus::Corrupt, "source_index_corrupt", None, None);
+ }
+ let schema_version =
+ match connection.pragma_query_value(None, "user_version", |row| row.get::<_, i64>(0)) {
+ Ok(version) => version,
+ Err(_) => return health(HealthStatus::Corrupt, "source_index_corrupt", None, None),
+ };
+ if schema_version > SCHEMA_VERSION {
+ return health(
+ HealthStatus::UnsupportedSchema,
+ "source_index_schema_newer",
+ None,
+ Some(schema_version),
+ );
+ }
+ if schema_version < SCHEMA_VERSION {
+ return health(
+ HealthStatus::MigrationRequired,
+ "source_index_migration_required",
+ None,
+ Some(schema_version),
+ );
+ }
+ let integrity =
+ connection.pragma_query_value(None, "quick_check", |row| row.get::<_, String>(0));
+ if !integrity.is_ok_and(|value| value == "ok") {
+ return health(
+ HealthStatus::Corrupt,
+ "source_index_integrity_failed",
+ None,
+ Some(schema_version),
+ );
+ }
+ let metadata = connection.query_row(
+ "SELECT repository_identity, engine_version, active_generation FROM index_metadata WHERE singleton = 1",
+ [],
+ |row| Ok((row.get::<_, String>(0)?, row.get::<_, String>(1)?, row.get::<_, Option>(2)?)),
+ );
+ let (repository_identity, engine_version, active_generation) = match metadata {
+ Ok(metadata) => metadata,
+ Err(_) => {
+ return health(
+ HealthStatus::Corrupt,
+ "source_index_metadata_invalid",
+ None,
+ Some(schema_version),
+ )
+ }
+ };
+ if repository_identity != options.repository_identity {
+ return health(
+ HealthStatus::WrongRepository,
+ "source_index_wrong_repository",
+ active_generation,
+ Some(schema_version),
+ );
+ }
+ if !migration_checksum_valid(&connection) {
+ return health(
+ HealthStatus::Corrupt,
+ "source_index_migration_checksum_invalid",
+ active_generation,
+ Some(schema_version),
+ );
+ }
+ let staging_count = connection
+ .query_row(
+ "SELECT COUNT(*) FROM index_generations WHERE state = 'staging'",
+ [],
+ |row| row.get::<_, i64>(0),
+ )
+ .unwrap_or(1);
+ if staging_count > 0 {
+ return health(
+ HealthStatus::Interrupted,
+ "source_index_interrupted_generation",
+ active_generation,
+ Some(schema_version),
+ );
+ }
+ if engine_version != options.engine_version {
+ return health(
+ HealthStatus::Stale,
+ "source_index_engine_changed",
+ active_generation,
+ Some(schema_version),
+ );
+ }
+ health(
+ HealthStatus::Ready,
+ "source_index_ready",
+ active_generation,
+ Some(schema_version),
+ )
+}
+
+pub fn logical_database_bytes(path: &Path) -> u64 {
+ let logical_bytes = open_read_only_connection(path).and_then(|connection| {
+ connection.pragma_update(None, "query_only", "ON")?;
+ let page_count =
+ connection.pragma_query_value(None, "page_count", |row| row.get::<_, u64>(0))?;
+ let page_size =
+ connection.pragma_query_value(None, "page_size", |row| row.get::<_, u64>(0))?;
+ Ok(page_count.saturating_mul(page_size))
+ });
+ logical_bytes.unwrap_or_else(|_| fs::metadata(path).map_or(0, |metadata| metadata.len()))
+}
+
+fn open_read_only_connection(path: &Path) -> Result {
+ let path = path.to_str().context("source_index_path_invalid")?;
+ let mut uri = String::with_capacity(path.len() + 32);
+ uri.push_str("file:");
+ for byte in path.bytes() {
+ if byte.is_ascii_alphanumeric() || matches!(byte, b'/' | b'-' | b'.' | b'_' | b'~' | b':') {
+ uri.push(char::from(byte));
+ } else {
+ use std::fmt::Write as _;
+ write!(&mut uri, "%{byte:02X}").context("source_index_path_invalid")?;
+ }
+ }
+ uri.push_str("?mode=ro&immutable=1");
+ Connection::open_with_flags(
+ uri,
+ OpenFlags::SQLITE_OPEN_READ_ONLY
+ | OpenFlags::SQLITE_OPEN_NO_MUTEX
+ | OpenFlags::SQLITE_OPEN_URI,
+ )
+ .context("source_index_read_only_open_failed")
+}
+
+fn configure_writer(connection: &Connection) -> Result<()> {
+ connection
+ .pragma_update(None, "foreign_keys", "ON")
+ .context("source_index_foreign_keys_failed")?;
+ connection
+ .pragma_update(None, "journal_mode", "WAL")
+ .context("source_index_wal_failed")?;
+ connection
+ .pragma_update(None, "synchronous", "FULL")
+ .context("source_index_sync_failed")?;
+ connection
+ .busy_timeout(std::time::Duration::from_secs(5))
+ .context("source_index_busy_timeout_failed")?;
+ Ok(())
+}
+
+fn migrate(connection: &Connection, options: &SourceIndexOptions) -> Result<()> {
+ let version: i64 = connection.pragma_query_value(None, "user_version", |row| row.get(0))?;
+ if version > SCHEMA_VERSION {
+ bail!("source_index_schema_newer");
+ }
+ if version == 0 {
+ let transaction = connection.unchecked_transaction()?;
+ transaction.execute_batch(MIGRATION_SQL)?;
+ let timestamp = timestamp_token();
+ transaction.execute(
+ "INSERT INTO index_migrations (migration_id, checksum, applied_at) VALUES (?1, ?2, ?3)",
+ params![MIGRATION_ID, migration_checksum(), timestamp],
+ )?;
+ transaction.execute(
+ "INSERT INTO index_metadata (singleton, schema_version, repository_identity, engine_version, created_at, updated_at) VALUES (1, ?1, ?2, ?3, ?4, ?4)",
+ params![SCHEMA_VERSION, options.repository_identity, options.engine_version, timestamp],
+ )?;
+ transaction.execute(
+ "INSERT INTO index_health (singleton, integrity_status, updated_at) VALUES (1, 'ready', ?1)",
+ params![timestamp],
+ )?;
+ transaction.pragma_update(None, "user_version", SCHEMA_VERSION)?;
+ transaction.commit()?;
+ }
+ Ok(())
+}
+
+fn validate_current(connection: &Connection, options: &SourceIndexOptions) -> Result<()> {
+ let version: i64 = connection.pragma_query_value(None, "user_version", |row| row.get(0))?;
+ if version != SCHEMA_VERSION {
+ bail!(if version > SCHEMA_VERSION {
+ "source_index_schema_newer"
+ } else {
+ "source_index_migration_required"
+ });
+ }
+ let integrity: String = connection.pragma_query_value(None, "quick_check", |row| row.get(0))?;
+ if integrity != "ok" {
+ bail!("source_index_integrity_failed");
+ }
+ let repository_identity: String = connection.query_row(
+ "SELECT repository_identity FROM index_metadata WHERE singleton = 1",
+ [],
+ |row| row.get(0),
+ )?;
+ if repository_identity != options.repository_identity {
+ bail!("source_index_wrong_repository");
+ }
+ if !migration_checksum_valid(connection) {
+ bail!("source_index_migration_checksum_invalid");
+ }
+ Ok(())
+}
+
+fn migration_checksum_valid(connection: &Connection) -> bool {
+ connection
+ .query_row(
+ "SELECT checksum FROM index_migrations WHERE migration_id = ?1",
+ [MIGRATION_ID],
+ |row| row.get::<_, String>(0),
+ )
+ .is_ok_and(|checksum| checksum == migration_checksum())
+}
+
+fn migration_checksum() -> String {
+ format!(
+ "sha256:{}",
+ hex::encode(Sha256::digest(MIGRATION_SQL.as_bytes()))
+ )
+}
+
+fn validate_options(options: &SourceIndexOptions) -> Result<()> {
+ let identity = options.repository_identity.as_bytes();
+ if identity.len() != 71
+ || !options.repository_identity.starts_with("sha256:")
+ || !identity[7..].iter().all(u8::is_ascii_hexdigit)
+ {
+ bail!("source_index_repository_identity_invalid");
+ }
+ let parts = options.engine_version.split('.').collect::>();
+ if parts.len() != 3
+ || parts
+ .iter()
+ .any(|part| part.is_empty() || !part.bytes().all(|byte| byte.is_ascii_digit()))
+ {
+ bail!("source_index_engine_version_invalid");
+ }
+ Ok(())
+}
+
+fn health(
+ status: HealthStatus,
+ reason: &str,
+ active_generation: Option,
+ schema_version: Option,
+) -> IndexHealth {
+ IndexHealth {
+ status,
+ reason_codes: vec![reason.to_string()],
+ active_generation,
+ schema_version,
+ }
+}
+
+fn timestamp_token() -> String {
+ use std::time::{SystemTime, UNIX_EPOCH};
+ let seconds = SystemTime::now()
+ .duration_since(UNIX_EPOCH)
+ .map_or(0, |duration| duration.as_secs());
+ format!("unix:{seconds}")
+}
+
+fn secure_permissions(path: &Path, mode: u32) -> Result<()> {
+ #[cfg(unix)]
+ {
+ use std::os::unix::fs::PermissionsExt;
+ fs::set_permissions(path, fs::Permissions::from_mode(mode))
+ .context("source_index_permissions_failed")?;
+ }
+ #[cfg(not(unix))]
+ let _ = (path, mode);
+ Ok(())
+}
diff --git a/rust/oaf-index/src/model.rs b/rust/oaf-index/src/model.rs
new file mode 100644
index 00000000..42c76e8c
--- /dev/null
+++ b/rust/oaf-index/src/model.rs
@@ -0,0 +1,223 @@
+use serde::{Deserialize, Serialize};
+
+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+pub struct FileRecord {
+ pub locator: String,
+ pub content_hash: String,
+ pub byte_size: i64,
+ pub language: String,
+ pub parse_state: String,
+ pub diagnostic_count: i64,
+ pub owner_identity: String,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+pub struct NodeRecord {
+ pub canonical_id: String,
+ pub kind: String,
+ pub language_kind: String,
+ pub qualified_name: String,
+ pub locator: String,
+ pub start_line: i64,
+ pub end_line: i64,
+ pub content_hash: Option,
+ pub visibility: String,
+}
+
+#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
+pub struct EdgeRecord {
+ pub canonical_id: String,
+ pub source_id: String,
+ pub target_id: String,
+ pub kind: String,
+ pub locator: String,
+ pub start_line: i64,
+ pub end_line: i64,
+ pub resolver: String,
+ pub resolver_version: String,
+ pub confidence: f64,
+ pub resolution_class: String,
+ pub stale: bool,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+pub struct UnresolvedRecord {
+ pub canonical_id: String,
+ pub source_id: String,
+ pub relationship_kind: String,
+ pub target_text_hash: String,
+ pub locator: String,
+ pub start_line: i64,
+ pub end_line: i64,
+ pub reason_code: String,
+ pub confidence_class: String,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+pub struct CoverageRecord {
+ pub language: String,
+ pub capability: String,
+ pub represented_count: i64,
+ pub omitted_count: i64,
+ pub failed_count: i64,
+ pub reason_code: Option,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+pub struct DiagnosticRecord {
+ pub canonical_id: String,
+ pub severity: String,
+ pub code: String,
+ pub locator: String,
+ pub start_line: i64,
+ pub end_line: i64,
+ pub message_hash: String,
+}
+
+#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
+pub struct GenerationInput {
+ pub reason: String,
+ pub created_at: String,
+ pub structural_fingerprint: String,
+ pub ignore_fingerprint: Option,
+ pub files: Vec,
+ pub nodes: Vec,
+ pub edges: Vec,
+ pub unresolved: Vec,
+ pub coverage: Vec,
+ pub diagnostics: Vec,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+pub struct DiscoveredFile {
+ pub locator: String,
+ pub content_hash: String,
+ pub byte_size: i64,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+pub struct FileRename {
+ pub from_locator: String,
+ pub to_locator: String,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq)]
+pub struct RefreshBounds {
+ pub max_depth: usize,
+ pub max_invalidated_files: usize,
+}
+
+impl Default for RefreshBounds {
+ fn default() -> Self {
+ Self {
+ max_depth: 8,
+ max_invalidated_files: 10_000,
+ }
+ }
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+pub struct RefreshPlan {
+ pub added_files: Vec,
+ pub changed_files: Vec,
+ pub deleted_files: Vec,
+ pub renamed_files: Vec,
+ pub invalidated_files: Vec,
+ pub unchanged_file_count: usize,
+ pub ignore_rules_changed: bool,
+ pub truncated: bool,
+ pub no_change: bool,
+ pub reason_codes: Vec,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+pub struct RefreshCommit {
+ pub summary: GenerationSummary,
+ pub wrote: bool,
+ pub invalidated_file_count: usize,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+pub struct GenerationSummary {
+ pub id: i64,
+ pub parent_id: Option,
+ pub reason: String,
+ pub created_at: String,
+ pub committed_at: String,
+ pub file_count: i64,
+ pub node_count: i64,
+ pub edge_count: i64,
+ pub unresolved_count: i64,
+ pub diagnostic_count: i64,
+ pub structural_fingerprint: String,
+ pub ignore_fingerprint: Option,
+}
+
+#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
+pub struct StoredGeneration {
+ pub summary: GenerationSummary,
+ pub input: GenerationInput,
+}
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq)]
+pub enum EdgeDirection {
+ Incoming,
+ Outgoing,
+ Both,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq)]
+pub struct QueryBounds {
+ pub limit: usize,
+ pub max_depth: usize,
+ pub max_output_bytes: usize,
+ pub timeout_ms: u64,
+ pub cursor: Option,
+}
+
+impl QueryBounds {
+ pub fn new(limit: usize) -> Self {
+ Self {
+ limit,
+ max_depth: 1,
+ max_output_bytes: 1_048_576,
+ timeout_ms: 250,
+ cursor: None,
+ }
+ }
+
+ pub fn with_depth(mut self, max_depth: usize) -> Self {
+ self.max_depth = max_depth;
+ self
+ }
+
+ pub fn with_cursor(mut self, cursor: impl Into) -> Self {
+ self.cursor = Some(cursor.into());
+ self
+ }
+}
+
+#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
+pub struct QueryPage {
+ pub items: Vec,
+ pub next_cursor: Option,
+}
+
+#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
+pub struct GraphNeighborhood {
+ pub nodes: Vec,
+ pub edges: Vec,
+ pub truncated: bool,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+pub struct GraphRoute {
+ pub node_ids: Vec,
+ pub edge_ids: Vec,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+pub struct GraphRoutes {
+ pub items: Vec,
+ pub truncated: bool,
+}
diff --git a/rust/oaf-index/src/registry.rs b/rust/oaf-index/src/registry.rs
new file mode 100644
index 00000000..88bf9abf
--- /dev/null
+++ b/rust/oaf-index/src/registry.rs
@@ -0,0 +1,1385 @@
+use super::{
+ inspect_index, locator_file, open_read_only_connection, repository_identity_hash,
+ secure_permissions, EdgeDirection, HealthStatus, NodeRecord, QueryBounds, SourceIndex,
+ SourceIndexOptions,
+};
+use anyhow::{bail, Context, Result};
+use oaf_ingest::{discover_file_hashes_bounded, FileHashDiscoveryBounds, IngestOptions};
+use rusqlite::{params, Connection, OptionalExtension};
+use serde::{Deserialize, Serialize};
+use sha2::{Digest, Sha256};
+use std::collections::{BTreeMap, BTreeSet};
+use std::fs;
+use std::path::{Component, Path, PathBuf};
+use std::time::{Duration, Instant};
+
+pub const REPOSITORY_REGISTRY_SCHEMA_VERSION: i64 = 1;
+pub const REPOSITORY_REGISTRY_LOCATOR: &str = "workspace://.local/source-index/registry.v1.sqlite";
+pub const REPOSITORY_REGISTRY_RELATIVE_PATH: &str = ".local/source-index/registry.v1.sqlite";
+pub const REPOSITORY_INDEX_RELATIVE_PATH: &str = ".local/source-index/index.v1.sqlite";
+pub const REPOSITORY_SEARCH_MAX_REPOSITORIES: usize = 8;
+pub const REPOSITORY_SEARCH_MAX_PER_REPOSITORY: usize = 25;
+pub const REPOSITORY_SEARCH_MAX_RESULTS: usize = 50;
+pub const REPOSITORY_SEARCH_MAX_DEADLINE_MS: u64 = 2_000;
+pub const REPOSITORY_SEARCH_MAX_OUTPUT_BYTES: usize = 1_048_576;
+
+const REPOSITORY_FRESHNESS_MAX_CANDIDATE_FILES: usize = 1_000_000;
+const REPOSITORY_FRESHNESS_MAX_HASHED_BYTES: u64 = 350 * 1024 * 1024;
+const LEGACY_REPOSITORY_FRESHNESS_MAX_FILE_BYTES: u64 = 10 * 1024 * 1024;
+
+const REGISTRY_SQL: &str = r#"
+CREATE TABLE registry_metadata (
+ singleton INTEGER PRIMARY KEY CHECK (singleton = 1),
+ schema_version INTEGER NOT NULL,
+ workspace_id TEXT NOT NULL,
+ fleet_root_identity_hash TEXT NOT NULL,
+ created_at TEXT NOT NULL,
+ updated_at TEXT NOT NULL
+) STRICT;
+CREATE TABLE registered_repositories (
+ repository_id TEXT PRIMARY KEY,
+ display_name TEXT NOT NULL,
+ root_locator TEXT NOT NULL UNIQUE,
+ repository_identity_hash TEXT NOT NULL UNIQUE,
+ registered_at TEXT NOT NULL,
+ last_seen_at TEXT NOT NULL
+) STRICT;
+CREATE INDEX registered_repositories_seen
+ ON registered_repositories (last_seen_at DESC, repository_id);
+"#;
+
+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct RegisteredRepository {
+ pub repository_id: String,
+ pub display_name: String,
+ pub root_locator: String,
+ pub index_locator: String,
+ pub repository_identity_hash: String,
+ pub active_generation: Option,
+ pub state: String,
+ pub freshness: String,
+ pub last_seen_at: String,
+}
+
+#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct QualifiedRepositoryNode {
+ pub id: String,
+ pub native_id: String,
+ pub repository_id: String,
+ pub kind: String,
+ pub label: String,
+ pub locator: String,
+ pub confidence: f64,
+ pub generation: i64,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct PerRepositorySearch {
+ pub repository_id: String,
+ pub state: String,
+ pub result_count: usize,
+ pub truncated: bool,
+ pub reason_codes: Vec,
+}
+
+#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct RepositorySearchOutput {
+ pub repositories: Vec,
+ pub results: Vec,
+ pub per_repository: Vec,
+ pub partial: bool,
+ pub truncated: bool,
+ pub opened_repository_count: usize,
+}
+
+#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct RepositoryListOutput {
+ pub repositories: Vec,
+ pub truncated: bool,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct GoRepositoryModule {
+ pub repository_id: String,
+ pub module_coordinate: String,
+ pub manifest_locator: String,
+ pub required_module_coordinates: Vec,
+}
+
+#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct GoRepositoryRelationship {
+ pub id: String,
+ pub kind: String,
+ pub source_repository_id: String,
+ pub target_repository_id: String,
+ pub from_node_id: String,
+ pub to_node_id: String,
+ pub evidence_locator: String,
+ pub evidence_native_relationship_ids: Vec,
+ pub confidence: f64,
+ pub resolution: String,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct GoRepositoryPath {
+ pub node_ids: Vec,
+ pub relationship_ids: Vec,
+}
+
+#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct RepositoryGoOutput {
+ pub repositories: Vec,
+ pub go_modules: Vec,
+ pub go_relationships: Vec,
+ pub paths: Vec,
+ pub impacted_nodes: Vec,
+ pub partial: bool,
+ pub truncated: bool,
+ pub opened_repository_count: usize,
+}
+
+pub struct GoRepositoryQuery<'a> {
+ pub repository_ids: &'a [String],
+ pub client_repository_id: &'a str,
+ pub service_repository_id: &'a str,
+ pub client_entry_native_id: &'a str,
+ pub service_target_native_id: &'a str,
+ pub deadline_ms: u64,
+}
+
+#[derive(Debug, Clone)]
+struct RegistryRow {
+ repository_id: String,
+ display_name: String,
+ root_locator: String,
+ repository_identity_hash: String,
+ last_seen_at: String,
+}
+
+pub struct RepositoryRegistry {
+ connection: Connection,
+ fleet_root: PathBuf,
+ workspace_id: String,
+ engine_version: String,
+}
+
+impl RepositoryRegistry {
+ pub fn open(fleet_root: &Path, workspace_id: &str, engine_version: &str) -> Result {
+ validate_registry_options(workspace_id, engine_version)?;
+ let fleet_root = fleet_root
+ .canonicalize()
+ .context("repository_fleet_root_invalid")?;
+ let path = fleet_root.join(REPOSITORY_REGISTRY_RELATIVE_PATH);
+ let parent = path
+ .parent()
+ .context("repository_registry_parent_required")?;
+ fs::create_dir_all(parent).context("repository_registry_parent_create_failed")?;
+ secure_permissions(parent, 0o700)?;
+ let connection = Connection::open(&path).context("repository_registry_open_failed")?;
+ configure_writer(&connection)?;
+ migrate_registry(&connection, &fleet_root, workspace_id)?;
+ secure_permissions(&path, 0o600)?;
+ validate_registry(&connection, &fleet_root, workspace_id)?;
+ Ok(Self {
+ connection,
+ fleet_root,
+ workspace_id: workspace_id.to_string(),
+ engine_version: engine_version.to_string(),
+ })
+ }
+
+ pub fn open_read_only(
+ fleet_root: &Path,
+ workspace_id: &str,
+ engine_version: &str,
+ ) -> Result {
+ validate_registry_options(workspace_id, engine_version)?;
+ let fleet_root = fleet_root
+ .canonicalize()
+ .context("repository_fleet_root_invalid")?;
+ let path = fleet_root.join(REPOSITORY_REGISTRY_RELATIVE_PATH);
+ let connection = open_read_only_connection(&path)
+ .context("repository_registry_read_only_open_failed")?;
+ connection
+ .pragma_update(None, "query_only", "ON")
+ .context("repository_registry_query_only_failed")?;
+ validate_registry(&connection, &fleet_root, workspace_id)?;
+ Ok(Self {
+ connection,
+ fleet_root,
+ workspace_id: workspace_id.to_string(),
+ engine_version: engine_version.to_string(),
+ })
+ }
+
+ pub fn register(
+ &mut self,
+ display_name: &str,
+ root_locator: &str,
+ ) -> Result {
+ validate_display_name(display_name)?;
+ let (normalized_locator, repository_root) =
+ resolve_repository_root(&self.fleet_root, root_locator)?;
+ let identity = repository_identity_hash(&repository_root, &self.workspace_id);
+ let options = SourceIndexOptions::new(&identity, &self.engine_version);
+ let index_path = repository_root.join(REPOSITORY_INDEX_RELATIVE_PATH);
+ let index = SourceIndex::open_read_only(&index_path, &options)
+ .context("repository_index_unavailable")?;
+ let active_generation = index
+ .active_generation()
+ .context("repository_index_active_generation_missing")?;
+ drop(index);
+ let repository_id =
+ derive_repository_id(&self.workspace_id, &normalized_locator, &identity);
+ let timestamp = registry_timestamp();
+ let transaction = self.connection.transaction()?;
+ transaction.execute(
+ "INSERT INTO registered_repositories (repository_id, display_name, root_locator, repository_identity_hash, registered_at, last_seen_at) VALUES (?1, ?2, ?3, ?4, ?5, ?5) ON CONFLICT(repository_id) DO UPDATE SET display_name = excluded.display_name, last_seen_at = excluded.last_seen_at",
+ params![repository_id, display_name.trim(), normalized_locator, identity, timestamp],
+ ).context("repository_registry_write_failed")?;
+ transaction.execute(
+ "UPDATE registry_metadata SET updated_at = ?1 WHERE singleton = 1",
+ params![timestamp],
+ )?;
+ transaction.commit()?;
+ Ok(RegisteredRepository {
+ repository_id,
+ display_name: display_name.trim().to_string(),
+ root_locator: normalized_locator.clone(),
+ index_locator: index_locator(&normalized_locator),
+ repository_identity_hash: identity,
+ active_generation: Some(active_generation),
+ state: "ready".to_string(),
+ freshness: "unverified".to_string(),
+ last_seen_at: timestamp,
+ })
+ }
+
+ pub fn list(&self, limit: usize) -> Result {
+ if !(1..=64).contains(&limit) {
+ bail!("repository_list_limit_invalid");
+ }
+ let mut rows = self.load_rows(limit.saturating_add(1), None)?;
+ let truncated = rows.len() > limit;
+ rows.truncate(limit);
+ Ok(RepositoryListOutput {
+ repositories: rows.into_iter().map(|row| self.inspect_row(row)).collect(),
+ truncated,
+ })
+ }
+
+ pub fn search(
+ &self,
+ query: &str,
+ repository_ids: &[String],
+ per_repository_limit: usize,
+ limit: usize,
+ deadline_ms: u64,
+ ) -> Result {
+ validate_search(
+ query,
+ repository_ids,
+ per_repository_limit,
+ limit,
+ deadline_ms,
+ )?;
+ let started = Instant::now();
+ let wanted = repository_ids.iter().cloned().collect::>();
+ let rows = self.load_rows(REPOSITORY_SEARCH_MAX_REPOSITORIES, Some(&wanted))?;
+ let found = rows
+ .iter()
+ .map(|row| row.repository_id.clone())
+ .collect::>();
+ if found != wanted {
+ bail!("repository_not_registered");
+ }
+ let by_id = rows
+ .into_iter()
+ .map(|row| (row.repository_id.clone(), row))
+ .collect::>();
+ let mut repositories = Vec::with_capacity(repository_ids.len());
+ let mut results = Vec::new();
+ let mut per_repository = Vec::with_capacity(repository_ids.len());
+ let mut opened_repository_count = 0usize;
+ let mut partial = false;
+ let mut truncated = false;
+
+ for repository_id in repository_ids {
+ if started.elapsed() >= Duration::from_millis(deadline_ms) {
+ partial = true;
+ if let Some(row) = by_id.get(repository_id) {
+ repositories.push(repository_from_row(row, None));
+ }
+ per_repository.push(PerRepositorySearch {
+ repository_id: repository_id.clone(),
+ state: "unavailable".to_string(),
+ result_count: 0,
+ truncated: false,
+ reason_codes: vec!["repository_search_deadline_exceeded".to_string()],
+ });
+ continue;
+ }
+ let row = by_id
+ .get(repository_id)
+ .cloned()
+ .context("repository_not_registered")?;
+ let remaining_ms = deadline_ms.saturating_sub(elapsed_ms(started)).max(1);
+ let query_result = self.query_row(&row, query, per_repository_limit, remaining_ms);
+ match query_result {
+ Ok((generation, nodes, repository_truncated)) => {
+ opened_repository_count += 1;
+ repositories.push(repository_from_row(&row, Some(generation)));
+ let projected = nodes
+ .into_iter()
+ .filter(|node| {
+ valid_prefixed_hex(&node.canonical_id, "cinode_")
+ && valid_result_locator(&node.locator)
+ })
+ .map(|node| {
+ let kind = safe_result_code(&node.kind);
+ let label = result_label(&node);
+ QualifiedRepositoryNode {
+ id: derive_qualified_node_id(repository_id, &node.canonical_id),
+ native_id: node.canonical_id,
+ repository_id: repository_id.clone(),
+ kind,
+ label,
+ locator: node.locator,
+ confidence: 1.0,
+ generation,
+ }
+ })
+ .collect::>();
+ let result_count = projected.len();
+ results.extend(projected);
+ truncated |= repository_truncated;
+ per_repository.push(PerRepositorySearch {
+ repository_id: repository_id.clone(),
+ state: "ready".to_string(),
+ result_count,
+ truncated: repository_truncated,
+ reason_codes: Vec::new(),
+ });
+ }
+ Err(error) => {
+ partial = true;
+ repositories.push(self.inspect_row(row));
+ per_repository.push(PerRepositorySearch {
+ repository_id: repository_id.clone(),
+ state: "unavailable".to_string(),
+ result_count: 0,
+ truncated: false,
+ reason_codes: vec![safe_repository_reason(&error).to_string()],
+ });
+ }
+ }
+ }
+
+ results.sort_by(|left, right| {
+ left.label
+ .to_lowercase()
+ .cmp(&right.label.to_lowercase())
+ .then_with(|| left.repository_id.cmp(&right.repository_id))
+ .then_with(|| left.native_id.cmp(&right.native_id))
+ });
+ if results.len() > limit {
+ results.truncate(limit);
+ truncated = true;
+ }
+ repositories.sort_by(|left, right| left.repository_id.cmp(&right.repository_id));
+ per_repository.sort_by(|left, right| left.repository_id.cmp(&right.repository_id));
+ let output = RepositorySearchOutput {
+ repositories,
+ results,
+ per_repository,
+ partial,
+ truncated,
+ opened_repository_count,
+ };
+ if serde_json::to_vec(&output)?.len() > REPOSITORY_SEARCH_MAX_OUTPUT_BYTES {
+ bail!("repository_search_output_too_large");
+ }
+ Ok(output)
+ }
+
+ pub fn resolve_go(&self, query: &GoRepositoryQuery<'_>) -> Result {
+ self.go_relationships(query, None, GoOutputKind::Resolve)
+ }
+
+ pub fn trace_go(
+ &self,
+ query: &GoRepositoryQuery<'_>,
+ limit: usize,
+ ) -> Result {
+ self.go_relationships(query, Some(limit), GoOutputKind::Trace)
+ }
+
+ pub fn impact_go(
+ &self,
+ query: &GoRepositoryQuery<'_>,
+ limit: usize,
+ ) -> Result {
+ self.go_relationships(query, Some(limit), GoOutputKind::Impact)
+ }
+
+ fn go_relationships(
+ &self,
+ query: &GoRepositoryQuery<'_>,
+ limit: Option,
+ output_kind: GoOutputKind,
+ ) -> Result {
+ validate_go_request(query, limit)?;
+ let client_repository_id = query.client_repository_id;
+ let service_repository_id = query.service_repository_id;
+ let started = Instant::now();
+ let wanted = query
+ .repository_ids
+ .iter()
+ .cloned()
+ .collect::>();
+ let rows = self.load_rows(2, Some(&wanted))?;
+ if rows.len() != 2 {
+ bail!("repository_not_registered");
+ }
+ let by_id = rows
+ .into_iter()
+ .map(|row| (row.repository_id.clone(), row))
+ .collect::>();
+ let client_row = by_id
+ .get(client_repository_id)
+ .context("repository_not_registered")?;
+ let service_row = by_id
+ .get(service_repository_id)
+ .context("repository_not_registered")?;
+
+ ensure_go_deadline(started, query.deadline_ms)?;
+ let (_, service_root) =
+ resolve_repository_root(&self.fleet_root, &service_row.root_locator)?;
+ let service_manifest = read_go_manifest(&service_root)?;
+ let service_options =
+ SourceIndexOptions::new(&service_row.repository_identity_hash, &self.engine_version);
+ let service_index = SourceIndex::open_read_only(
+ &service_root.join(REPOSITORY_INDEX_RELATIVE_PATH),
+ &service_options,
+ )
+ .context("repository_index_unavailable")?;
+ let service_generation = service_index
+ .active_generation()
+ .context("repository_index_active_generation_missing")?;
+ let service_target = service_index
+ .node(query.service_target_native_id)?
+ .context("repository_go_target_not_found")?;
+ if !valid_result_locator(&service_target.locator) {
+ bail!("repository_go_target_not_found");
+ }
+ let expected_import = go_import_coordinate(&service_manifest.module, &service_target)?;
+ drop(service_index);
+
+ ensure_go_deadline(started, query.deadline_ms)?;
+ let (_, client_root) = resolve_repository_root(&self.fleet_root, &client_row.root_locator)?;
+ let client_manifest = read_go_manifest(&client_root)?;
+ if !client_manifest.requires.contains(&service_manifest.module) {
+ bail!("repository_go_module_mismatch");
+ }
+ let client_options =
+ SourceIndexOptions::new(&client_row.repository_identity_hash, &self.engine_version);
+ let client_index = SourceIndex::open_read_only(
+ &client_root.join(REPOSITORY_INDEX_RELATIVE_PATH),
+ &client_options,
+ )
+ .context("repository_index_unavailable")?;
+ let client_generation = client_index
+ .active_generation()
+ .context("repository_index_active_generation_missing")?;
+ let client_entry = client_index
+ .node(query.client_entry_native_id)?
+ .context("repository_go_entry_not_found")?;
+ if !valid_result_locator(&client_entry.locator) {
+ bail!("repository_go_entry_not_found");
+ }
+ let query_bounds = QueryBounds {
+ limit: REPOSITORY_SEARCH_MAX_PER_REPOSITORY,
+ max_depth: 1,
+ max_output_bytes: REPOSITORY_SEARCH_MAX_OUTPUT_BYTES,
+ timeout_ms: remaining_ms(started, query.deadline_ms),
+ cursor: None,
+ };
+ let client_file = locator_file(&client_entry.locator);
+ let import_targets = client_index
+ .find_exact_nodes(&expected_import, &query_bounds)?
+ .items;
+ let mut import_edge = None;
+ for target in import_targets
+ .into_iter()
+ .filter(|node| symbol_tail(&node.qualified_name) == expected_import)
+ {
+ import_edge = client_index
+ .dependency_edges(&target.canonical_id, EdgeDirection::Incoming, &query_bounds)?
+ .items
+ .into_iter()
+ .find(|edge| {
+ edge.kind == "imports"
+ && edge.resolution_class == "unresolved"
+ && !edge.stale
+ && locator_file(&edge.locator) == client_file
+ && valid_result_locator(&edge.locator)
+ && valid_prefixed_hex(&edge.canonical_id, "ciedge_")
+ });
+ if import_edge.is_some() {
+ break;
+ }
+ }
+ let import_edge = import_edge.context("repository_go_import_not_found")?;
+ let target_name = symbol_tail(&service_target.qualified_name);
+ let execution_edge = client_index
+ .dependency_edges(
+ query.client_entry_native_id,
+ EdgeDirection::Outgoing,
+ &query_bounds,
+ )?
+ .items
+ .into_iter()
+ .find(|edge| {
+ if !matches!(edge.kind.as_str(), "calls" | "constructs")
+ || edge.resolution_class != "unresolved"
+ || edge.stale
+ || locator_file(&edge.locator) != client_file
+ || !valid_result_locator(&edge.locator)
+ || !valid_prefixed_hex(&edge.canonical_id, "ciedge_")
+ {
+ return false;
+ }
+ client_index
+ .node(&edge.target_id)
+ .ok()
+ .flatten()
+ .is_some_and(|node| symbol_tail(&node.qualified_name) == target_name)
+ })
+ .context("repository_go_relationship_not_found")?;
+ drop(client_index);
+ ensure_go_deadline(started, query.deadline_ms)?;
+
+ let client_entry = qualify_node(client_repository_id, client_entry, client_generation, 1.0);
+ let service_target = qualify_node(
+ service_repository_id,
+ service_target,
+ service_generation,
+ 1.0,
+ );
+ let import_relationship_id = prefixed_digest(
+ "mrrel_",
+ &[
+ client_repository_id.as_bytes(),
+ service_repository_id.as_bytes(),
+ import_edge.canonical_id.as_bytes(),
+ ],
+ );
+ let execution_relationship_id = prefixed_digest(
+ "mrrel_",
+ &[
+ client_repository_id.as_bytes(),
+ service_repository_id.as_bytes(),
+ execution_edge.canonical_id.as_bytes(),
+ query.service_target_native_id.as_bytes(),
+ ],
+ );
+ let relationships = vec![
+ GoRepositoryRelationship {
+ id: import_relationship_id,
+ kind: "imports".to_string(),
+ source_repository_id: client_repository_id.to_string(),
+ target_repository_id: service_repository_id.to_string(),
+ from_node_id: derive_qualified_node_id(
+ client_repository_id,
+ &import_edge.source_id,
+ ),
+ to_node_id: service_target.id.clone(),
+ evidence_locator: import_edge.locator,
+ evidence_native_relationship_ids: vec![import_edge.canonical_id.clone()],
+ confidence: import_edge.confidence,
+ resolution: "exact_module_coordinate".to_string(),
+ },
+ GoRepositoryRelationship {
+ id: execution_relationship_id.clone(),
+ kind: execution_edge.kind,
+ source_repository_id: client_repository_id.to_string(),
+ target_repository_id: service_repository_id.to_string(),
+ from_node_id: client_entry.id.clone(),
+ to_node_id: service_target.id.clone(),
+ evidence_locator: execution_edge.locator,
+ evidence_native_relationship_ids: vec![
+ import_edge.canonical_id.clone(),
+ execution_edge.canonical_id,
+ ],
+ confidence: import_edge.confidence.min(execution_edge.confidence),
+ resolution: "exact_module_coordinate".to_string(),
+ },
+ ];
+ let path = GoRepositoryPath {
+ node_ids: vec![client_entry.id.clone(), service_target.id.clone()],
+ relationship_ids: vec![execution_relationship_id],
+ };
+ let mut repositories = vec![
+ repository_from_row(client_row, Some(client_generation)),
+ repository_from_row(service_row, Some(service_generation)),
+ ];
+ repositories.sort_by(|left, right| left.repository_id.cmp(&right.repository_id));
+ let output = RepositoryGoOutput {
+ repositories,
+ go_modules: vec![
+ GoRepositoryModule {
+ repository_id: client_repository_id.to_string(),
+ module_coordinate: client_manifest.module,
+ manifest_locator: "workspace://go.mod".to_string(),
+ required_module_coordinates: vec![service_manifest.module.clone()],
+ },
+ GoRepositoryModule {
+ repository_id: service_repository_id.to_string(),
+ module_coordinate: service_manifest.module,
+ manifest_locator: "workspace://go.mod".to_string(),
+ required_module_coordinates: Vec::new(),
+ },
+ ],
+ go_relationships: relationships,
+ paths: matches!(output_kind, GoOutputKind::Trace | GoOutputKind::Impact)
+ .then_some(path)
+ .into_iter()
+ .collect(),
+ impacted_nodes: matches!(output_kind, GoOutputKind::Impact)
+ .then_some(client_entry)
+ .into_iter()
+ .collect(),
+ partial: false,
+ truncated: false,
+ opened_repository_count: 2,
+ };
+ if serde_json::to_vec(&output)?.len() > REPOSITORY_SEARCH_MAX_OUTPUT_BYTES {
+ bail!("repository_go_output_too_large");
+ }
+ Ok(output)
+ }
+
+ fn load_rows(
+ &self,
+ limit: usize,
+ repository_ids: Option<&BTreeSet>,
+ ) -> Result> {
+ let mut statement = self.connection.prepare(
+ "SELECT repository_id, display_name, root_locator, repository_identity_hash, last_seen_at FROM registered_repositories ORDER BY repository_id",
+ )?;
+ let rows = statement
+ .query_map([], |row| {
+ Ok(RegistryRow {
+ repository_id: row.get(0)?,
+ display_name: row.get(1)?,
+ root_locator: row.get(2)?,
+ repository_identity_hash: row.get(3)?,
+ last_seen_at: row.get(4)?,
+ })
+ })?
+ .filter_map(|row| match row {
+ Ok(row) if repository_ids.is_none_or(|ids| ids.contains(&row.repository_id)) => {
+ Some(Ok(row))
+ }
+ Ok(_) => None,
+ Err(error) => Some(Err(error)),
+ })
+ .take(limit)
+ .collect::>>()?;
+ Ok(rows)
+ }
+
+ fn inspect_row(&self, row: RegistryRow) -> RegisteredRepository {
+ let resolved = resolve_repository_root(&self.fleet_root, &row.root_locator);
+ let health = resolved.ok().map(|(_, root)| {
+ let options =
+ SourceIndexOptions::new(&row.repository_identity_hash, &self.engine_version);
+ inspect_index(&root.join(REPOSITORY_INDEX_RELATIVE_PATH), &options)
+ });
+ let active_generation = health.as_ref().and_then(|value| value.active_generation);
+ let ready = health.as_ref().is_some_and(|value| {
+ value.status == HealthStatus::Ready && active_generation.is_some()
+ });
+ let freshness = if health.is_some_and(|value| value.status == HealthStatus::Stale) {
+ "stale"
+ } else {
+ "unverified"
+ };
+ RegisteredRepository {
+ repository_id: row.repository_id,
+ display_name: row.display_name,
+ root_locator: row.root_locator.clone(),
+ index_locator: index_locator(&row.root_locator),
+ repository_identity_hash: row.repository_identity_hash,
+ active_generation,
+ state: if ready {
+ "ready".to_string()
+ } else {
+ "unavailable".to_string()
+ },
+ freshness: freshness.to_string(),
+ last_seen_at: row.last_seen_at,
+ }
+ }
+
+ fn query_row(
+ &self,
+ row: &RegistryRow,
+ query: &str,
+ per_repository_limit: usize,
+ timeout_ms: u64,
+ ) -> Result<(i64, Vec, bool)> {
+ let (_, root) = resolve_repository_root(&self.fleet_root, &row.root_locator)?;
+ let options = SourceIndexOptions::new(&row.repository_identity_hash, &self.engine_version);
+ match inspect_index(&root.join(REPOSITORY_INDEX_RELATIVE_PATH), &options).status {
+ HealthStatus::Ready => {}
+ HealthStatus::Stale => bail!("repository_index_stale"),
+ HealthStatus::WrongRepository => bail!("repository_index_identity_mismatch"),
+ _ => bail!("repository_index_unavailable"),
+ }
+ let index =
+ SourceIndex::open_read_only(&root.join(REPOSITORY_INDEX_RELATIVE_PATH), &options)?;
+ if !repository_index_is_current(&index, &root, timeout_ms)? {
+ bail!("repository_index_stale");
+ }
+ let generation = index
+ .active_generation()
+ .context("repository_index_active_generation_missing")?;
+ let page = index.find_nodes(
+ query,
+ &QueryBounds {
+ limit: per_repository_limit,
+ max_depth: 1,
+ max_output_bytes: REPOSITORY_SEARCH_MAX_OUTPUT_BYTES,
+ timeout_ms: timeout_ms.min(REPOSITORY_SEARCH_MAX_DEADLINE_MS),
+ cursor: None,
+ },
+ )?;
+ let truncated = page.next_cursor.is_some();
+ Ok((generation, page.items, truncated))
+ }
+}
+
+fn repository_index_is_current(index: &SourceIndex, root: &Path, timeout_ms: u64) -> Result {
+ let active = index
+ .load_active_generation_metadata()?
+ .context("repository_index_active_generation_missing")?;
+ let scope_all_languages = active
+ .coverage
+ .iter()
+ .find(|record| {
+ record.language == "source-index" && record.capability == "scan-scope-all-languages"
+ })
+ .and_then(|record| match record.represented_count {
+ 0 => Some(false),
+ 1 => Some(true),
+ _ => None,
+ });
+ let Some(scope_all_languages) = scope_all_languages else {
+ return Ok(false);
+ };
+ let languages = active
+ .files
+ .iter()
+ .map(|file| file.language.clone())
+ .collect::>();
+ let mut options = IngestOptions::new(root);
+ options.max_file_bytes = active
+ .coverage
+ .iter()
+ .find(|record| record.language == "source-index" && record.capability == "scan-max-file-bytes")
+ .and_then(|record| u64::try_from(record.represented_count).ok())
+ .unwrap_or(LEGACY_REPOSITORY_FRESHNESS_MAX_FILE_BYTES);
+ options.prefer_cpp_headers = languages.contains("cpp") && !languages.contains("c");
+ let selected_file_limit = active
+ .coverage
+ .iter()
+ .find(|record| record.language == "source-index" && record.capability == "omitted-files")
+ .is_some_and(|record| record.omitted_count > 0)
+ .then_some(active.files.len());
+ let report = discover_file_hashes_bounded(
+ &options,
+ &FileHashDiscoveryBounds {
+ max_candidate_files: REPOSITORY_FRESHNESS_MAX_CANDIDATE_FILES,
+ max_hashed_bytes: REPOSITORY_FRESHNESS_MAX_HASHED_BYTES,
+ selected_file_limit,
+ deadline: Instant::now() + Duration::from_millis(timeout_ms),
+ },
+ |source| repository_source_language(source, &languages, scope_all_languages).is_some(),
+ )?;
+ if !report.complete {
+ return Ok(false);
+ }
+ let current = report
+ .hashes
+ .into_iter()
+ .map(|file| {
+ Ok(super::DiscoveredFile {
+ locator: file.source,
+ content_hash: format!("sha256:{}", file.sha256),
+ byte_size: i64::try_from(file.bytes).context("repository_index_file_size_invalid")?,
+ })
+ })
+ .collect::>>()?;
+ Ok(index
+ .plan_refresh(¤t, None, &super::RefreshBounds::default())?
+ .no_change)
+}
+
+fn repository_source_language(
+ source: &str,
+ languages: &BTreeSet,
+ scope_all_languages: bool,
+) -> Option<&'static str> {
+ let lower = source.to_ascii_lowercase();
+ let language = if lower.ends_with("/cmakelists.txt") {
+ if languages.contains("c") || scope_all_languages { "c" } else if languages.contains("cpp") { "cpp" } else { return None; }
+ } else if lower.ends_with("/pyproject.toml") {
+ "python"
+ } else if lower.ends_with(".d.ts") || lower.ends_with(".ts") || lower.ends_with(".tsx") { "typescript" }
+ else if lower.ends_with(".js") || lower.ends_with(".jsx") || lower.ends_with(".mjs") || lower.ends_with(".cjs") { "javascript" }
+ else if lower.ends_with(".py") { "python" }
+ else if lower.ends_with(".java") { "java" }
+ else if lower.ends_with(".kt") || lower.ends_with(".kts") { "kotlin" }
+ else if lower.ends_with(".cs") { "csharp" }
+ else if lower.ends_with(".go") { "go" }
+ else if lower.ends_with(".rs") { "rust" }
+ else if lower.ends_with(".php") { "php" }
+ else if lower.ends_with(".rb") { "ruby" }
+ else if lower.ends_with(".swift") { "swift" }
+ else if lower.ends_with(".c") { "c" }
+ else if lower.ends_with(".cc") || lower.ends_with(".cp") || lower.ends_with(".cxx") || lower.ends_with(".cpp") || lower.ends_with(".hpp") || (lower.ends_with(".h") && languages.contains("cpp") && !languages.contains("c")) { "cpp" }
+ else if lower.ends_with(".h") { "c" }
+ else if lower.ends_with(".dart") { "dart" }
+ else { return None; };
+ (scope_all_languages || languages.contains(language)).then_some(language)
+}
+
+#[derive(Clone, Copy)]
+enum GoOutputKind {
+ Resolve,
+ Trace,
+ Impact,
+}
+
+struct GoManifest {
+ module: String,
+ requires: BTreeSet,
+}
+
+fn validate_go_request(query: &GoRepositoryQuery<'_>, limit: Option